Skip to content

Instantly share code, notes, and snippets.

@okapies
Created January 30, 2014 10:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save okapies/8705976 to your computer and use it in GitHub Desktop.
Save okapies/8705976 to your computer and use it in GitHub Desktop.
scalac is crazy with private[this] in value class
class HogeOps(val underlying: Any) extends AnyVal {
private
[this] // <-- !!!
def toOption[A](v: => A): Option[A] = ???
}
@okapies
Copy link
Author

okapies commented Jan 30, 2014

$ scalac -version
Scala compiler version 2.10.3 -- Copyright 2002-2013, LAMP/EPFL
$ scalac HogeOps.scala
error: 
     while compiling: HogeOps.scala
        during phase: extmethods
     library version: version 2.10.3
    compiler version: version 2.10.3
  reconstructed args: 

  last tree to typer: TypeTree(type A)
              symbol: type A (flags: <deferred> <param>)
   symbol definition: A
                 tpe: A
       symbol owners: type A -> method toOption -> class HogeOps -> package <empty>
      context owners: method toOption -> class HogeOps -> package <empty>

== Enclosing template or block ==

Apply( // val <error>: <error> in class <error>, tree.tpe=<error>
  TypeApply( // val <error>: <error> in class <error>, tree.tpe=<error>
    "HogeOps"."toOption$extension" // val <error>: <error> in class <error>, tree.tpe=<error>
    <tpt> // tree.tpe=A
  )
  This("HogeOps")final class HogeOps extends AnyVal
)

== Expanded type of tree ==

SkolemTypeRef(TypeSkolem(A))

uncaught exception during compilation: scala.reflect.internal.Types$TypeError
error: scala.reflect.internal.Types$TypeError: method toOption$extension in object HogeOps cannot be accessed in object HogeOps
        at scala.tools.nsc.typechecker.Contexts$Context.issue(Contexts.scala:401)
        at scala.tools.nsc.typechecker.Infer$Inferencer.issue(Infer.scala:312)
        at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$normalTypedApply$1$1.apply(Typers.scala:4613)
        at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$normalTypedApply$1$1.apply(Typers.scala:4613)
        at scala.tools.nsc.typechecker.Typers$Typer.onError$3(Typers.scala:4571)
        at scala.tools.nsc.typechecker.Typers$Typer.normalTypedApply$1(Typers.scala:4613)
        at scala.tools.nsc.typechecker.Typers$Typer.typedApply$1(Typers.scala:4625)
        at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5670)
        at scala.tools.nsc.typechecker.Typers$Typer.typedPos(Typers.scala:5675)
        at scala.tools.nsc.transform.ExtensionMethods$Extender$$anonfun$transform$2$$anonfun$apply$7.apply(ExtensionMethods.scala:252)
        at scala.tools.nsc.transform.ExtensionMethods$Extender$$anonfun$transform$2$$anonfun$apply$7.apply(ExtensionMethods.scala:252)
        at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:2936)
        at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:34)
        at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:28)
        at scala.tools.nsc.transform.ExtensionMethods$Extender$$anonfun$transform$2.apply(ExtensionMethods.scala:251)
        at scala.tools.nsc.transform.ExtensionMethods$Extender$$anonfun$transform$2.apply(ExtensionMethods.scala:250)
        at scala.reflect.internal.Trees$class.deriveDefDef(Trees.scala:1598)
        at scala.reflect.internal.SymbolTable.deriveDefDef(SymbolTable.scala:13)
        at scala.tools.nsc.transform.ExtensionMethods$Extender.transform(ExtensionMethods.scala:250)
        at scala.tools.nsc.transform.ExtensionMethods$Extender.transform(ExtensionMethods.scala:129)
        at scala.reflect.api.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:2927)
        at scala.reflect.api.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:2925)
        at scala.collection.immutable.List.loop$1(List.scala:170)
        at scala.collection.immutable.List.mapConserve(List.scala:186)
        at scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:2925)
        at scala.tools.nsc.transform.ExtensionMethods$Extender.transformStats(ExtensionMethods.scala:263)
        at scala.tools.nsc.transform.ExtensionMethods$Extender.transformStats(ExtensionMethods.scala:129)
        at scala.reflect.internal.Trees$class.itransform(Trees.scala:1276)
        at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:13)
        at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:13)
        at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2897)
        ...

@xuwei-k
Copy link

xuwei-k commented Jan 30, 2014

@okapies
Copy link
Author

okapies commented Jan 30, 2014

@xuwei-k That's exactly this problem. Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment