scala / bug

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

Reflection: chokes on variadic methods #6036

Closed scabug closed 12 years ago

scabug commented 12 years ago

This also happens in compiled code.

scala> val cm = reflect.runtime.currentMirror; val u = cm.universe cm: reflect.runtime.universe.Mirror = JavaMirror with scala.tools.nsc.interpreter.IMain$TranslatingClassLoader@65f1a3a8 of type class scala.tools.nsc.interpreter.IMain$TranslatingClassLoader with classpath u: reflect.runtime.universe.type = scala.reflect.runtime.JavaUniverse@5f4fcc96

scala> class A { def foo(x: Int*) = 1 } defined class A

scala> u.typeOf[A] member u.newTermName("foo") typeSignature warning: there were 1 feature warnings; re-run with -feature for details res0: u.Type = (x: <?>)scala.Int

scala> res0.asInstanceOf[u.MethodType].params.head res1: u.Symbol = value x

scala> res1.typeSignature typeSignature typeSignatureIn

scala> res1.typeSignature scala.reflect.internal.Types$TypeError: bad reference while unpickling $line4.$read: type not found in scala.type at scala.reflect.internal.pickling.UnPickler$Scan.toTypeError(UnPickler.scala:836) at scala.reflect.internal.pickling.UnPickler$Scan$LazyTypeRef.complete(UnPickler.scala:849) at scala.reflect.internal.Symbols$Symbol.info(Symbols.scala:1209) at scala.reflect.internal.Symbols$SymbolContextApiImpl.typeSignature(Symbols.scala:75) at scala.reflect.internal.Symbols$SymbolContextApiImpl.typeSignature(Symbols.scala:62) at .(:13) at .() at .(:7) at .() at $print() at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:616) at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.call(IMain.scala:736) at scala.tools.nsc.interpreter.IMain$Request.loadAndRun(IMain.scala:991) at scala.tools.nsc.interpreter.IMain.loadAndRunReq$1(IMain.scala:579) at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:610) at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:574) at scala.tools.nsc.interpreter.ILoop.reallyInterpret$1(ILoop.scala:742) at scala.tools.nsc.interpreter.ILoop.interpretStartingWith(ILoop.scala:787) at scala.tools.nsc.interpreter.ILoop.command(ILoop.scala:699) at scala.tools.nsc.interpreter.ILoop.processLine$1(ILoop.scala:563) at scala.tools.nsc.interpreter.ILoop.innerLoop$1(ILoop.scala:570) at scala.tools.nsc.interpreter.ILoop.loop(ILoop.scala:573) at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply$mcZ$sp(ILoop.scala:864) at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply(ILoop.scala:819) at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply(ILoop.scala:819) at scala.tools.nsc.util.ScalaClassLoader$.savingContextLoader(ScalaClassLoader.scala:135) at scala.tools.nsc.interpreter.ILoop.process(ILoop.scala:819) at scala.tools.nsc.MainGenericRunner.runTarget$1(MainGenericRunner.scala:79) at scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala:92) at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:101) at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)

scabug commented 12 years ago

Imported From: https://issues.scala-lang.org/browse/SI-6036?orig=1 Reporter: @clhodapp Affected Versions: 2.10.0-M4

scabug commented 12 years ago

@xeno-by said:

class A { def foo(x: Int*) = 1 }

object Test extends App {
  val cm = reflect.runtime.currentMirror
  val u = cm.universe
  val sig = u.typeOf[A] member u.newTermName("foo") typeSignature
  val x = sig.asInstanceOf[u.MethodType].params.head
  println(x.typeSignature)
}

Works fine outside REPL. Please, clarify your first sentence in the bug report.

scabug commented 12 years ago

@clhodapp said (edited on Jul 6, 2012 6:17:42 PM UTC): This is weird. It works when I run it with partest, but not when I run it with "scala" directly... Can you verify that it works outside of partest? I will try to figure out what's going on on my end.

scabug commented 12 years ago

@clhodapp said: I just did a full build from the very latest in trunk and...

1:52%> ~/git/scala/build/pack/bin/scalac Test.scala
warning: there were 1 feature warnings; re-run with -feature for details one warning found 1:53%> ~/git/scala/build/pack/bin/scala Test
scala.reflect.internal.Types$TypeError: bad reference while unpickling A: type not found in scala.type at scala.reflect.internal.pickling.UnPickler$Scan.toTypeError(UnPickler.scala:836) at scala.reflect.internal.pickling.UnPickler$Scan$LazyTypeRef.complete(UnPickler.scala:849) at scala.reflect.internal.Symbols$Symbol.info(Symbols.scala:1209) at scala.reflect.internal.Symbols$SymbolContextApiImpl.typeSignature(Symbols.scala:74) at scala.reflect.internal.Symbols$SymbolContextApiImpl.typeSignature(Symbols.scala:61) at Test$delayedInit$body.apply(Test.scala:9) at scala.Function0$class.apply$mcV$sp(Function0.scala:40) at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12) at scala.App$$anonfun$main$1.apply(App.scala:61) at scala.App$$anonfun$main$1.apply(App.scala:61) at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:59) at scala.collection.immutable.List.foreach(List.scala:77) at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:32) at scala.collection.mutable.ListBuffer.foreach(ListBuffer.scala:45) at scala.App$class.main(App.scala:61) at Test$.main(Test.scala:4) at Test.main(Test.scala) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:616) at scala.tools.nsc.util.ScalaClassLoader$$anonfun$run$1.apply(ScalaClassLoader.scala:71) at scala.tools.nsc.util.ScalaClassLoader$class.asContext(ScalaClassLoader.scala:31) at scala.tools.nsc.util.ScalaClassLoader$URLClassLoader.asContext(ScalaClassLoader.scala:139) at scala.tools.nsc.util.ScalaClassLoader$class.run(ScalaClassLoader.scala:71) at scala.tools.nsc.util.ScalaClassLoader$URLClassLoader.run(ScalaClassLoader.scala:139) at scala.tools.nsc.CommonRunner$class.run(ObjectRunner.scala:28) at scala.tools.nsc.ObjectRunner$.run(ObjectRunner.scala:45) at scala.tools.nsc.CommonRunner$class.runAndCatch(ObjectRunner.scala:35) at scala.tools.nsc.ObjectRunner$.runAndCatch(ObjectRunner.scala:45) at scala.tools.nsc.MainGenericRunner.runTarget$1(MainGenericRunner.scala:70) at scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala:92) at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:101) at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)

scabug commented 12 years ago

@xeno-by said: Ugh, strange. Seems like it's caused by different classloader environments. Anyways I've fixed this bug for good, and the pull request will soon follow.

scabug commented 12 years ago

@adriaanm said: https://github.com/scala/scala/pull/843