scala / bug

Scala 2 bug reports only. Please, no questions — proper bug reports only.
https://scala-lang.org
232 stars 21 forks source link

Value class calls private method: crash #6215

Closed scabug closed 12 years ago

scabug commented 12 years ago
class Foo(val v: String) extends AnyVal { private def len = v.length ; def f = len }
no-symbol does not have an owner
    at scala.reflect.internal.SymbolTable.abort(SymbolTable.scala:46)
    at scala.tools.nsc.Global.abort(Global.scala:249)
    at scala.reflect.internal.Symbols$NoSymbol.owner(Symbols.scala:3026)
    at scala.reflect.internal.TreeGen.mkAttributedRef(TreeGen.scala:130)
    at scala.tools.nsc.transform.Erasure$ErasureTransformer$$anon$1.preErase(Erasure.scala:1072)
    at scala.tools.nsc.transform.Erasure$ErasureTransformer$$anon$1.transform(Erasure.scala:1136)
    at scala.tools.nsc.transform.Erasure$ErasureTransformer$$anon$1.transform(Erasure.scala:930)
    at scala.reflect.internal.Trees$$anonfun$itransform$5.apply(Trees.scala:1181)
    at scala.reflect.internal.Trees$$anonfun$itransform$5.apply(Trees.scala:1179)
    at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:684)
    at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:38)
    at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:31)
    at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:19)
scabug commented 12 years ago

Imported From: https://issues.scala-lang.org/browse/SI-6215?orig=1 Reporter: @paulp Affected Versions: 2.10.0 Other Milestones: 2.10.0

scabug commented 12 years ago

@som-snytt said (edited on Sep 28, 2012 5:30:10 PM UTC): Me, too. I'm kind of surprised I was surprised by this bug, i.e., in the balance of fixability and people using a new feature and doing the obvious thing and then it doesn't work. By obvious I mean, I don't want to expose my helper method to impliciting. I also went back to the SIP to see if this is prohibited for some clever reason. (I also built today's scalac, because I see there is lots of recent work to nail down the release. By way of show of support.)

I realize that in Scala there is no expectation of privacy.

object `package` {
  /* crashes
  implicit class MaybeInt(val s: String) extends AnyVal {
    def toInt_? : Option[Int] = if (s.isEmpty) None else convert
    private def convert = try { Some(Integer.parseInt(s)) } catch { case _: NumberFormatException => None }
  }
  */
  /* OK
  implicit class MaybeInt(val s: String) extends AnyVal {
    def toInt_? : Option[Int] = if (s.isEmpty) None else convert
    def convert = try { Some(Integer.parseInt(s)) } catch { case _: NumberFormatException => None }
  }
  */
  /* OK
  implicit class MaybeInt(val s: String) {
    def toInt_? : Option[Int] = if (s.isEmpty) None else convert
    private def convert = try { Some(Integer.parseInt(s)) } catch { case _: NumberFormatException => None }
  }
  */
}
scabug commented 12 years ago

@paulp said: This should have been a blocker, I think.

scabug commented 12 years ago

@odersky said: https://github.com/scala/scala/pull/1427

scabug commented 12 years ago

@adriaanm said: superseded by https://github.com/scala/scala/pull/1442

scabug commented 12 years ago

@gkossakowski said: Fixed in https://github.com/scala/scala/pull/1442