From 96dd73146f4317feeb59a242d692977f87c5211d Mon Sep 17 00:00:00 2001 From: Eugene Burmako Date: Sat, 30 Jun 2012 01:45:47 +0200 Subject: reify no longer dealiases symbols and types this uncovers a bug in toolboxes: https://issues.scala-lang.org/browse/SI-6007 however that bug is not critical, so it will be dealt with later --- .../scala/reflect/reify/codegen/GenSymbols.scala | 6 +- .../scala/reflect/reify/codegen/GenTrees.scala | 10 +- .../scala/reflect/reify/codegen/GenTypes.scala | 9 +- src/reflect/scala/reflect/internal/Symbols.scala | 6 +- .../scala/reflect/runtime/JavaMirrors.scala | 1 + test/files/jvm/manifests-new.check | 116 ++++++++++----------- test/files/run/newTags.check | 8 +- test/files/run/reflection-repl.check | 2 +- test/files/run/reify-aliases.check | 1 + test/files/run/reify-aliases.scala | 5 + test/files/run/reify_ann1a.check | 14 +-- test/files/run/reify_ann1b.check | 4 +- test/files/run/reify_ann2a.check | 18 ++-- test/files/run/reify_ann3.check | 4 +- test/files/run/reify_ann4.check | 4 +- test/files/run/reify_ann5.check | 4 +- test/files/run/reify_classfileann_a.check | 4 +- test/files/run/reify_classfileann_b.check | 4 +- test/files/run/reify_newimpl_09.check | 1 - test/files/run/reify_newimpl_09.scala | 13 --- test/files/run/reify_newimpl_10.check | 1 - test/files/run/reify_newimpl_10.scala | 14 --- test/files/run/reify_newimpl_16.check | 1 - test/files/run/reify_newimpl_16.scala | 17 --- test/files/run/reify_newimpl_17.check | 2 - test/files/run/reify_newimpl_17.scala | 20 ---- test/files/run/reify_newimpl_26.check | 2 +- test/files/run/reify_newimpl_28.check | 1 - test/files/run/reify_newimpl_28.scala | 17 --- test/files/run/reify_newimpl_32.check | 1 - test/files/run/reify_newimpl_32.scala | 17 --- test/files/run/reify_newimpl_34.check | 1 - test/files/run/reify_newimpl_34.scala | 18 ---- test/files/run/reify_printf.scala | 4 +- test/files/run/t5224.check | 2 +- test/files/run/t5271_3.check | 2 +- test/files/run/t5704.check | 2 +- test/pending/run/reify_newimpl_09.scala | 13 +++ test/pending/run/reify_newimpl_09a.scala | 13 +++ test/pending/run/reify_newimpl_09b.scala | 14 +++ test/pending/run/reify_newimpl_09c.scala | 20 ++++ test/pending/run/reify_newimpl_10.scala | 14 +++ test/pending/run/reify_newimpl_16.scala | 17 +++ test/pending/run/reify_newimpl_17.scala | 20 ++++ test/pending/run/reify_newimpl_28.scala | 17 +++ test/pending/run/reify_newimpl_32.scala | 17 +++ test/pending/run/reify_newimpl_34.scala | 18 ++++ 47 files changed, 278 insertions(+), 241 deletions(-) create mode 100644 test/files/run/reify-aliases.check create mode 100644 test/files/run/reify-aliases.scala delete mode 100644 test/files/run/reify_newimpl_09.check delete mode 100644 test/files/run/reify_newimpl_09.scala delete mode 100644 test/files/run/reify_newimpl_10.check delete mode 100644 test/files/run/reify_newimpl_10.scala delete mode 100644 test/files/run/reify_newimpl_16.check delete mode 100644 test/files/run/reify_newimpl_16.scala delete mode 100644 test/files/run/reify_newimpl_17.check delete mode 100644 test/files/run/reify_newimpl_17.scala delete mode 100644 test/files/run/reify_newimpl_28.check delete mode 100644 test/files/run/reify_newimpl_28.scala delete mode 100644 test/files/run/reify_newimpl_32.check delete mode 100644 test/files/run/reify_newimpl_32.scala delete mode 100644 test/files/run/reify_newimpl_34.check delete mode 100644 test/files/run/reify_newimpl_34.scala create mode 100644 test/pending/run/reify_newimpl_09.scala create mode 100644 test/pending/run/reify_newimpl_09a.scala create mode 100644 test/pending/run/reify_newimpl_09b.scala create mode 100644 test/pending/run/reify_newimpl_09c.scala create mode 100644 test/pending/run/reify_newimpl_10.scala create mode 100644 test/pending/run/reify_newimpl_16.scala create mode 100644 test/pending/run/reify_newimpl_17.scala create mode 100644 test/pending/run/reify_newimpl_28.scala create mode 100644 test/pending/run/reify_newimpl_32.scala create mode 100644 test/pending/run/reify_newimpl_34.scala diff --git a/src/compiler/scala/reflect/reify/codegen/GenSymbols.scala b/src/compiler/scala/reflect/reify/codegen/GenSymbols.scala index 3a98d308a7..9b0777580b 100644 --- a/src/compiler/scala/reflect/reify/codegen/GenSymbols.scala +++ b/src/compiler/scala/reflect/reify/codegen/GenSymbols.scala @@ -23,10 +23,8 @@ trait GenSymbols { def symtab: SymbolTable = state.symtab /** Reify a reference to a symbol */ - def reifySymRef(sym0: Symbol): Tree = { - assert(sym0 != null, "sym is null") - val sym = sym0.dealias - + def reifySymRef(sym: Symbol): Tree = { + assert(sym != null, "sym is null") if (sym == NoSymbol) mirrorSelect(nme.NoSymbol) else if (sym.isRootPackage) diff --git a/src/compiler/scala/reflect/reify/codegen/GenTrees.scala b/src/compiler/scala/reflect/reify/codegen/GenTrees.scala index b97bf6b0cd..f48df8df65 100644 --- a/src/compiler/scala/reflect/reify/codegen/GenTrees.scala +++ b/src/compiler/scala/reflect/reify/codegen/GenTrees.scala @@ -161,11 +161,9 @@ trait GenTrees { if (tree.symbol.isLocalToReifee || tree.tpe.isLocalToReifee) reifyProduct(tree) else { - val sym0 = tree.symbol - val sym = sym0.dealias - val tpe0 = tree.tpe - val tpe = tpe0.dealias - if (reifyDebug) println("reifying bound type %s (underlying type is %s, dealiased is %s)".format(sym0, tpe0, tpe)) + val sym = tree.symbol + val tpe = tree.tpe + if (reifyDebug) println("reifying bound type %s (underlying type is %s)".format(sym, tpe)) if (tpe.isSpliceable) { val spliced = spliceType(tpe) @@ -187,7 +185,7 @@ trait GenTrees { if (reifyDebug) println("tpe is locatable: reify as Ident(%s)".format(sym)) mirrorBuildCall(nme.Ident, reify(sym)) } else { - if (reifyDebug) println("tpe is an alias, but not a locatable: reify as TypeTree(%s)".format(tpe)) + if (reifyDebug) println("tpe is not locatable: reify as TypeTree(%s)".format(tpe)) mirrorBuildCall(nme.TypeTree, reify(tpe)) } } diff --git a/src/compiler/scala/reflect/reify/codegen/GenTypes.scala b/src/compiler/scala/reflect/reify/codegen/GenTypes.scala index f7239f9c67..82951a2434 100644 --- a/src/compiler/scala/reflect/reify/codegen/GenTypes.scala +++ b/src/compiler/scala/reflect/reify/codegen/GenTypes.scala @@ -11,9 +11,8 @@ trait GenTypes { * Reify a type. * For internal use only, use ``reified'' instead. */ - def reifyType(tpe0: Type): Tree = { - assert(tpe0 != null, "tpe is null") - val tpe = tpe0.dealias + def reifyType(tpe: Type): Tree = { + assert(tpe != null, "tpe is null") if (tpe.isErroneous) CannotReifyErroneousReifee(tpe) @@ -29,9 +28,9 @@ trait GenTypes { if (spliced != EmptyTree) return spliced - val tsym = tpe.typeSymbol + val tsym = tpe.typeSymbolDirect if (tsym.isClass && tpe == tsym.typeConstructor && tsym.isStatic) - Select(Select(reify(tpe.typeSymbol), nme.asTypeSymbol), nme.asTypeConstructor) + Select(Select(reify(tsym), nme.asTypeSymbol), nme.asTypeConstructor) else tpe match { case tpe @ NoType => reifyMirrorObject(tpe) diff --git a/src/reflect/scala/reflect/internal/Symbols.scala b/src/reflect/scala/reflect/internal/Symbols.scala index 79041924a8..9018ddacbe 100644 --- a/src/reflect/scala/reflect/internal/Symbols.scala +++ b/src/reflect/scala/reflect/internal/Symbols.scala @@ -900,15 +900,12 @@ trait Symbols extends api.Symbols { self: SymbolTable => if (owner.isTerm) return false if (isLocalDummy) return false + if (isAliasType) return true if (isType && isNonClassType) return false if (isRefinementClass) return false return true } - // [Eugene] is it a good idea to add ``dealias'' to Symbol? - /** Expands type aliases */ - def dealias: Symbol = this - /** The variance of this symbol as an integer */ final def variance: Int = if (isCovariant) 1 @@ -2564,7 +2561,6 @@ trait Symbols extends api.Symbols { self: SymbolTable => extends TypeSymbol(initOwner, initPos, initName) { type TypeOfClonedSymbol = TypeSymbol final override def isAliasType = true - final override def dealias = info.typeSymbol.dealias override def cloneSymbolImpl(owner: Symbol, newFlags: Long): TypeSymbol = owner.newNonClassSymbol(name, pos, newFlags) } diff --git a/src/reflect/scala/reflect/runtime/JavaMirrors.scala b/src/reflect/scala/reflect/runtime/JavaMirrors.scala index 38d280ec73..41955170bd 100644 --- a/src/reflect/scala/reflect/runtime/JavaMirrors.scala +++ b/src/reflect/scala/reflect/runtime/JavaMirrors.scala @@ -972,6 +972,7 @@ trait JavaMirrors extends internal.SymbolTable with api.JavaUniverse { self: Sym case ExistentialType(_, rtpe) => typeToJavaClass(rtpe) case TypeRef(_, ArrayClass, List(elemtpe)) => jArrayClass(typeToJavaClass(elemtpe)) case TypeRef(_, sym: ClassSymbol, _) => classToJava(sym.asClassSymbol) + case tpe @ TypeRef(_, sym: AliasTypeSymbol, _) => typeToJavaClass(tpe.dealias) case _ => throw new NoClassDefFoundError("no Java class corresponding to "+tpe+" found") } } diff --git a/test/files/jvm/manifests-new.check b/test/files/jvm/manifests-new.check index 9ff49ef8b4..1c0bf6a568 100644 --- a/test/files/jvm/manifests-new.check +++ b/test/files/jvm/manifests-new.check @@ -1,58 +1,58 @@ -x=(), t=TypeTag[Unit], k=TypeRef, s=class Unit -x=true, t=TypeTag[Boolean], k=TypeRef, s=class Boolean -x=a, t=TypeTag[Char], k=TypeRef, s=class Char -x=1, t=TypeTag[Int], k=TypeRef, s=class Int -x=abc, t=TypeTag[java.lang.String], k=TypeRef, s=class String -x='abc, t=TypeTag[Symbol], k=TypeRef, s=class Symbol - -x=List(()), t=TypeTag[List[Unit]], k=TypeRef, s=class List -x=List(true), t=TypeTag[List[Boolean]], k=TypeRef, s=class List -x=List(1), t=TypeTag[List[Int]], k=TypeRef, s=class List -x=List(abc), t=TypeTag[List[java.lang.String]], k=TypeRef, s=class List -x=List('abc), t=TypeTag[List[Symbol]], k=TypeRef, s=class List - -x=[Z, t=TypeTag[Array[Boolean]], k=TypeRef, s=class Array -x=[C, t=TypeTag[Array[Char]], k=TypeRef, s=class Array -x=[I, t=TypeTag[Array[Int]], k=TypeRef, s=class Array -x=[Ljava.lang.String;, t=TypeTag[Array[java.lang.String]], k=TypeRef, s=class Array -x=[Lscala.Symbol;, t=TypeTag[Array[Symbol]], k=TypeRef, s=class Array - -x=((),()), t=TypeTag[(Unit, Unit)], k=TypeRef, s=class Tuple2 -x=(true,false), t=TypeTag[(Boolean, Boolean)], k=TypeRef, s=class Tuple2 -x=(1,2), t=TypeTag[(Int, Int)], k=TypeRef, s=class Tuple2 -x=(abc,xyz), t=TypeTag[(java.lang.String, java.lang.String)], k=TypeRef, s=class Tuple2 -x=('abc,'xyz), t=TypeTag[(Symbol, Symbol)], k=TypeRef, s=class Tuple2 - -x=Test$, t=TypeTag[Test.type], k=SingleType, s=object Test -x=scala.collection.immutable.List$, t=TypeTag[scala.collection.immutable.List.type], k=SingleType, s=object List - -x=Foo, t=TypeTag[Foo[Int]], k=TypeRef, s=class Foo -x=Foo, t=TypeTag[Foo[List[Int]]], k=TypeRef, s=class Foo -x=Foo, t=TypeTag[Foo[Foo[Int]]], k=TypeRef, s=class Foo -x=Foo, t=TypeTag[Foo[List[Foo[Int]]]], k=TypeRef, s=class Foo - -x=Test1$$anon$1, t=TypeTag[Bar[java.lang.String]], k=RefinedType, s= -x=Test1$$anon$2, t=TypeTag[Bar[java.lang.String]], k=RefinedType, s= - -()=() -true=true -a=a -1=1 -'abc='abc - -List(())=List(()) -List(true)=List(true) -List('abc)=List('abc) - -Array()=Array() -Array(true)=Array(true) -Array(a)=Array(a) -Array(1)=Array(1) - -((),())=((),()) -(true,false)=(true,false) - -List(List(1), List(2))=List(List(1), List(2)) - -Array(Array(1), Array(2))=Array(Array(1), Array(2)) - +x=(), t=TypeTag[Unit], k=TypeRef, s=class Unit +x=true, t=TypeTag[Boolean], k=TypeRef, s=class Boolean +x=a, t=TypeTag[Char], k=TypeRef, s=class Char +x=1, t=TypeTag[Int], k=TypeRef, s=class Int +x=abc, t=TypeTag[java.lang.String], k=TypeRef, s=class String +x='abc, t=TypeTag[Symbol], k=TypeRef, s=class Symbol + +x=List(()), t=TypeTag[List[Unit]], k=TypeRef, s=class List +x=List(true), t=TypeTag[List[Boolean]], k=TypeRef, s=class List +x=List(1), t=TypeTag[List[Int]], k=TypeRef, s=class List +x=List(abc), t=TypeTag[List[java.lang.String]], k=TypeRef, s=class List +x=List('abc), t=TypeTag[List[Symbol]], k=TypeRef, s=class List + +x=[Z, t=TypeTag[Array[Boolean]], k=TypeRef, s=class Array +x=[C, t=TypeTag[Array[Char]], k=TypeRef, s=class Array +x=[I, t=TypeTag[Array[Int]], k=TypeRef, s=class Array +x=[Ljava.lang.String;, t=TypeTag[Array[java.lang.String]], k=TypeRef, s=class Array +x=[Lscala.Symbol;, t=TypeTag[Array[Symbol]], k=TypeRef, s=class Array + +x=((),()), t=TypeTag[(Unit, Unit)], k=TypeRef, s=class Tuple2 +x=(true,false), t=TypeTag[(Boolean, Boolean)], k=TypeRef, s=class Tuple2 +x=(1,2), t=TypeTag[(Int, Int)], k=TypeRef, s=class Tuple2 +x=(abc,xyz), t=TypeTag[(java.lang.String, java.lang.String)], k=TypeRef, s=class Tuple2 +x=('abc,'xyz), t=TypeTag[(Symbol, Symbol)], k=TypeRef, s=class Tuple2 + +x=Test$, t=TypeTag[Test.type], k=SingleType, s=object Test +x=scala.collection.immutable.List$, t=TypeTag[scala.collection.immutable.List.type], k=SingleType, s=object List + +x=Foo, t=TypeTag[Foo[Int]], k=TypeRef, s=class Foo +x=Foo, t=TypeTag[Foo[List[Int]]], k=TypeRef, s=class Foo +x=Foo, t=TypeTag[Foo[Foo[Int]]], k=TypeRef, s=class Foo +x=Foo, t=TypeTag[Foo[List[Foo[Int]]]], k=TypeRef, s=class Foo + +x=Test1$$anon$1, t=TypeTag[Bar[String]], k=RefinedType, s= +x=Test1$$anon$2, t=TypeTag[Bar[String]], k=RefinedType, s= + +()=() +true=true +a=a +1=1 +'abc='abc + +List(())=List(()) +List(true)=List(true) +List('abc)=List('abc) + +Array()=Array() +Array(true)=Array(true) +Array(a)=Array(a) +Array(1)=Array(1) + +((),())=((),()) +(true,false)=(true,false) + +List(List(1), List(2))=List(List(1), List(2)) + +Array(Array(1), Array(2))=Array(Array(1), Array(2)) + diff --git a/test/files/run/newTags.check b/test/files/run/newTags.check index d83740c40c..2cbc265d7a 100644 --- a/test/files/run/newTags.check +++ b/test/files/run/newTags.check @@ -1,5 +1,5 @@ -TypeRef(ThisType(class immutable),class List,List(TypeRef(ThisType(class scala),class Int,List()))) +TypeRef(SingleType(SingleType(SingleType(NoPrefix,class ),module scala),module package),class List,List(TypeRef(ThisType(class scala),class Int,List()))) List[Int] -TypeRef(ThisType(class immutable),class Map,List(TypeRef(ThisType(class lang),class String,List()), TypeRef(ThisType(class lang),class String,List()))) -scala.collection.immutable.Map[java.lang.String,java.lang.String] -TypeTag[TypeRef(ThisType(class immutable),class Map,List(TypeRef(ThisType(class lang),class String,List()), TypeRef(ThisType(class lang),class String,List())))] +TypeRef(SingleType(ThisType(class scala),module Predef),class Map,List(TypeRef(SingleType(ThisType(class scala),module Predef),class String,List()), TypeRef(SingleType(ThisType(class scala),module Predef),class String,List()))) +Map[String,String] +TypeTag[TypeRef(SingleType(ThisType(class scala),module Predef),class Map,List(TypeRef(SingleType(ThisType(class scala),module Predef),class String,List()), TypeRef(SingleType(ThisType(class scala),module Predef),class String,List())))] diff --git a/test/files/run/reflection-repl.check b/test/files/run/reflection-repl.check index e93fb6d6e7..341dd10ab0 100644 --- a/test/files/run/reflection-repl.check +++ b/test/files/run/reflection-repl.check @@ -4,6 +4,6 @@ Type :help for more information. scala> scala> scala.reflect.runtime.universe.typeOf[List[Nothing]] -res0: reflect.runtime.universe.Type = List[Nothing] +res0: reflect.runtime.universe.Type = scala.List[Nothing] scala> diff --git a/test/files/run/reify-aliases.check b/test/files/run/reify-aliases.check new file mode 100644 index 0000000000..392dd59a1d --- /dev/null +++ b/test/files/run/reify-aliases.check @@ -0,0 +1 @@ +TypeRef(SingleType(ThisType(scala), scala.Predef), newTypeName("String"), List()) diff --git a/test/files/run/reify-aliases.scala b/test/files/run/reify-aliases.scala new file mode 100644 index 0000000000..45b1a34e24 --- /dev/null +++ b/test/files/run/reify-aliases.scala @@ -0,0 +1,5 @@ +import scala.reflect.runtime.universe._ + +object Test extends App { + println(showRaw(typeOf[String])) +} \ No newline at end of file diff --git a/test/files/run/reify_ann1a.check b/test/files/run/reify_ann1a.check index 9df18b2362..9bbb0ab87a 100644 --- a/test/files/run/reify_ann1a.check +++ b/test/files/run/reify_ann1a.check @@ -1,5 +1,5 @@ { - @new ann(immutable.this.List.apply("1a")) @new ann(immutable.this.List.apply("1b")) class C[@new ann(immutable.this.List.apply("2a")) @new ann(immutable.this.List.apply("2b")) T >: Nothing <: Any] extends Object { + @new ann(immutable.this.List.apply("1a")) @new ann(immutable.this.List.apply("1b")) class C[@new ann(immutable.this.List.apply("2a")) @new ann(immutable.this.List.apply("2b")) T >: Nothing <: Any] extends AnyRef { @new ann(immutable.this.List.apply("3a")) @new ann(immutable.this.List.apply("3b")) private[this] val x: T @ann(immutable.this.List.apply("4a")) @ann(immutable.this.List.apply("4b")) = _; def (@new ann(immutable.this.List.apply("3a")) @new ann(immutable.this.List.apply("3b")) x: T @ann(immutable.this.List.apply("4a")) @ann(immutable.this.List.apply("4b"))) = { super.(); @@ -14,15 +14,15 @@ () } { - @ann(immutable.this.List.apply[java.lang.String]("1a")) @ann(immutable.this.List.apply[java.lang.String]("1b")) class C[@ann(immutable.this.List.apply[java.lang.String]("2a")) @ann(immutable.this.List.apply[java.lang.String]("2b")) T] extends Object { - @ann(immutable.this.List.apply[java.lang.String]("3a")) @ann(immutable.this.List.apply[java.lang.String]("3b")) private[this] val x: T @ann(immutable.this.List.apply[java.lang.String]("4b")) @ann(immutable.this.List.apply[java.lang.String]("4a")) = _; - def (@ann(immutable.this.List.apply[java.lang.String]("3a")) @ann(immutable.this.List.apply[java.lang.String]("3b")) x: T @ann(immutable.this.List.apply[java.lang.String]("4b")) @ann(immutable.this.List.apply[java.lang.String]("4a"))): C[T] = { + @ann(immutable.this.List.apply[String]("1a")) @ann(immutable.this.List.apply[String]("1b")) class C[@ann(immutable.this.List.apply[String]("2a")) @ann(immutable.this.List.apply[String]("2b")) T] extends AnyRef { + @ann(immutable.this.List.apply[String]("3a")) @ann(immutable.this.List.apply[String]("3b")) private[this] val x: T @ann(immutable.this.List.apply[String]("4b")) @ann(immutable.this.List.apply[String]("4a")) = _; + def (@ann(immutable.this.List.apply[String]("3a")) @ann(immutable.this.List.apply[String]("3b")) x: T @ann(immutable.this.List.apply[String]("4b")) @ann(immutable.this.List.apply[String]("4a"))): C[T] = { C.super.(); () }; - @ann(immutable.this.List.apply[java.lang.String]("5a")) @ann(immutable.this.List.apply[java.lang.String]("5b")) def f(x: Int @ann(immutable.this.List.apply[java.lang.String]("6b")) @ann(immutable.this.List.apply[java.lang.String]("6a"))): Int = { - @ann(immutable.this.List.apply[java.lang.String]("7a")) @ann(immutable.this.List.apply[java.lang.String]("7b")) val r: Int @ann(immutable.this.List.apply[java.lang.String]("8b")) @ann(immutable.this.List.apply[java.lang.String]("8a")) = ((x.+(3): Int @ann(immutable.this.List.apply[java.lang.String]("8a"))): Int @ann(immutable.this.List.apply[java.lang.String]("8b")) @ann(immutable.this.List.apply[java.lang.String]("8a"))); - val s: Int @ann(immutable.this.List.apply[java.lang.String]("9b")) @ann(immutable.this.List.apply[java.lang.String]("9a")) = (4: Int @ann(immutable.this.List.apply[java.lang.String]("9b")) @ann(immutable.this.List.apply[java.lang.String]("9a"))); + @ann(immutable.this.List.apply[String]("5a")) @ann(immutable.this.List.apply[String]("5b")) def f(x: Int @ann(immutable.this.List.apply[String]("6b")) @ann(immutable.this.List.apply[String]("6a"))): Int = { + @ann(immutable.this.List.apply[String]("7a")) @ann(immutable.this.List.apply[String]("7b")) val r: Int @ann(immutable.this.List.apply[String]("8b")) @ann(immutable.this.List.apply[String]("8a")) = ((x.+(3): Int @ann(immutable.this.List.apply[String]("8a"))): Int @ann(immutable.this.List.apply[String]("8b")) @ann(immutable.this.List.apply[String]("8a"))); + val s: Int @ann(immutable.this.List.apply[String]("9b")) @ann(immutable.this.List.apply[String]("9a")) = (4: Int @ann(immutable.this.List.apply[String]("9b")) @ann(immutable.this.List.apply[String]("9a"))); r.+(s) } }; diff --git a/test/files/run/reify_ann1b.check b/test/files/run/reify_ann1b.check index bae838f15f..4a51c02701 100644 --- a/test/files/run/reify_ann1b.check +++ b/test/files/run/reify_ann1b.check @@ -1,5 +1,5 @@ { - @new ann(bar = "1a") @new ann(bar = "1b") class C[@new ann(bar = "2a") @new ann(bar = "2b") T >: Nothing <: Any] extends Object { + @new ann(bar = "1a") @new ann(bar = "1b") class C[@new ann(bar = "2a") @new ann(bar = "2b") T >: Nothing <: Any] extends AnyRef { @new ann(bar = "3a") @new ann(bar = "3b") private[this] val x: T @ann(bar = "4a") @ann(bar = "4b") = _; def (@new ann(bar = "3a") @new ann(bar = "3b") x: T @ann(bar = "4a") @ann(bar = "4b")) = { super.(); @@ -14,7 +14,7 @@ () } { - @ann(bar = "1a") @ann(bar = "1b") class C[@ann(bar = "2a") @ann(bar = "2b") T] extends Object { + @ann(bar = "1a") @ann(bar = "1b") class C[@ann(bar = "2a") @ann(bar = "2b") T] extends AnyRef { @ann(bar = "3a") @ann(bar = "3b") private[this] val x: T @ann(bar = "4b") @ann(bar = "4a") = _; def (@ann(bar = "3a") @ann(bar = "3b") x: T @ann(bar = "4b") @ann(bar = "4a")): C[T] = { C.super.(); diff --git a/test/files/run/reify_ann2a.check b/test/files/run/reify_ann2a.check index bb30441f8c..4d67bbf786 100644 --- a/test/files/run/reify_ann2a.check +++ b/test/files/run/reify_ann2a.check @@ -6,7 +6,7 @@ () } }; - @new ann(immutable.this.List.apply("1a")) @new ann(immutable.this.List.apply("1b")) class C[@new ann(immutable.this.List.apply("2a")) @new ann(immutable.this.List.apply("2b")) T >: Nothing <: Any] extends Object { + @new ann(immutable.this.List.apply("1a")) @new ann(immutable.this.List.apply("1b")) class C[@new ann(immutable.this.List.apply("2a")) @new ann(immutable.this.List.apply("2b")) T >: Nothing <: Any] extends AnyRef { @new ann(immutable.this.List.apply("3a")) @new ann(immutable.this.List.apply("3b")) private[this] val x: T @ann(immutable.this.List.apply("4a")) @ann(immutable.this.List.apply("4b")) = _; def (@new ann(immutable.this.List.apply("3a")) @new ann(immutable.this.List.apply("3b")) x: T @ann(immutable.this.List.apply("4a")) @ann(immutable.this.List.apply("4b"))) = { super.(); @@ -22,21 +22,21 @@ } { class ann extends scala.annotation.Annotation with scala.annotation.StaticAnnotation { - private[this] val bar: List[java.lang.String] = _; - def (bar: List[java.lang.String]): ann = { + private[this] val bar: List[String] = _; + def (bar: List[String]): ann = { ann.super.(); () } }; - @ann(immutable.this.List.apply[java.lang.String]("1a")) @ann(immutable.this.List.apply[java.lang.String]("1b")) class C[@ann(immutable.this.List.apply[java.lang.String]("2a")) @ann(immutable.this.List.apply[java.lang.String]("2b")) T] extends Object { - @ann(immutable.this.List.apply[java.lang.String]("3a")) @ann(immutable.this.List.apply[java.lang.String]("3b")) private[this] val x: T @ann(immutable.this.List.apply[java.lang.String]("4b")) @ann(immutable.this.List.apply[java.lang.String]("4a")) = _; - def (@ann(immutable.this.List.apply[java.lang.String]("3a")) @ann(immutable.this.List.apply[java.lang.String]("3b")) x: T @ann(immutable.this.List.apply[java.lang.String]("4b")) @ann(immutable.this.List.apply[java.lang.String]("4a"))): C[T] = { + @ann(immutable.this.List.apply[String]("1a")) @ann(immutable.this.List.apply[String]("1b")) class C[@ann(immutable.this.List.apply[String]("2a")) @ann(immutable.this.List.apply[String]("2b")) T] extends AnyRef { + @ann(immutable.this.List.apply[String]("3a")) @ann(immutable.this.List.apply[String]("3b")) private[this] val x: T @ann(immutable.this.List.apply[String]("4b")) @ann(immutable.this.List.apply[String]("4a")) = _; + def (@ann(immutable.this.List.apply[String]("3a")) @ann(immutable.this.List.apply[String]("3b")) x: T @ann(immutable.this.List.apply[String]("4b")) @ann(immutable.this.List.apply[String]("4a"))): C[T] = { C.super.(); () }; - @ann(immutable.this.List.apply[java.lang.String]("5a")) @ann(immutable.this.List.apply[java.lang.String]("5b")) def f(x: Int @ann(immutable.this.List.apply[java.lang.String]("6b")) @ann(immutable.this.List.apply[java.lang.String]("6a"))): Int = { - @ann(immutable.this.List.apply[java.lang.String]("7a")) @ann(immutable.this.List.apply[java.lang.String]("7b")) val r: Int @ann(immutable.this.List.apply[java.lang.String]("8b")) @ann(immutable.this.List.apply[java.lang.String]("8a")) = ((x.+(3): Int @ann(immutable.this.List.apply[java.lang.String]("8a"))): Int @ann(immutable.this.List.apply[java.lang.String]("8b")) @ann(immutable.this.List.apply[java.lang.String]("8a"))); - val s: Int @ann(immutable.this.List.apply[java.lang.String]("9b")) @ann(immutable.this.List.apply[java.lang.String]("9a")) = (4: Int @ann(immutable.this.List.apply[java.lang.String]("9b")) @ann(immutable.this.List.apply[java.lang.String]("9a"))); + @ann(immutable.this.List.apply[String]("5a")) @ann(immutable.this.List.apply[String]("5b")) def f(x: Int @ann(immutable.this.List.apply[String]("6b")) @ann(immutable.this.List.apply[String]("6a"))): Int = { + @ann(immutable.this.List.apply[String]("7a")) @ann(immutable.this.List.apply[String]("7b")) val r: Int @ann(immutable.this.List.apply[String]("8b")) @ann(immutable.this.List.apply[String]("8a")) = ((x.+(3): Int @ann(immutable.this.List.apply[String]("8a"))): Int @ann(immutable.this.List.apply[String]("8b")) @ann(immutable.this.List.apply[String]("8a"))); + val s: Int @ann(immutable.this.List.apply[String]("9b")) @ann(immutable.this.List.apply[String]("9a")) = (4: Int @ann(immutable.this.List.apply[String]("9b")) @ann(immutable.this.List.apply[String]("9a"))); r.+(s) } }; diff --git a/test/files/run/reify_ann3.check b/test/files/run/reify_ann3.check index 9452a9701e..96b4cf9c4e 100644 --- a/test/files/run/reify_ann3.check +++ b/test/files/run/reify_ann3.check @@ -1,5 +1,5 @@ { - class Tree[A >: Nothing <: Any, B >: Nothing <: Any] extends Object { + class Tree[A >: Nothing <: Any, B >: Nothing <: Any] extends AnyRef { @new inline @getter() final val key: A = _; def (key: A) = { super.(); @@ -9,7 +9,7 @@ () } { - class Tree[A, B] extends Object { + class Tree[A, B] extends AnyRef { final private[this] val key: A = _; @inline @scala.annotation.meta.getter final def key: A = Tree.this.key; def (key: A): Tree[A,B] = { diff --git a/test/files/run/reify_ann4.check b/test/files/run/reify_ann4.check index 406ee7bc08..6f853053d2 100644 --- a/test/files/run/reify_ann4.check +++ b/test/files/run/reify_ann4.check @@ -5,7 +5,7 @@ () } }; - class C extends Object { + class C extends AnyRef { def () = { super.(); () @@ -21,7 +21,7 @@ () } }; - class C extends Object { + class C extends AnyRef { def (): C = { C.super.(); () diff --git a/test/files/run/reify_ann5.check b/test/files/run/reify_ann5.check index ecf08eebb2..d443c601a0 100644 --- a/test/files/run/reify_ann5.check +++ b/test/files/run/reify_ann5.check @@ -1,5 +1,5 @@ { - class C extends Object { + class C extends AnyRef { @new inline @beanGetter() @new BeanProperty() val x: Int = _; def (x: Int) = { super.(); @@ -9,7 +9,7 @@ () } { - class C extends Object { + class C extends AnyRef { @scala.beans.BeanProperty private[this] val x: Int = _; def x: Int = C.this.x; def (x: Int): C = { diff --git a/test/files/run/reify_classfileann_a.check b/test/files/run/reify_classfileann_a.check index 685ecf5de6..6f17b26158 100644 --- a/test/files/run/reify_classfileann_a.check +++ b/test/files/run/reify_classfileann_a.check @@ -1,5 +1,5 @@ { - @new ann(bar = "1", quux = Array("2", "3"), baz = new ann(bar = "4")) class C extends Object { + @new ann(bar = "1", quux = Array("2", "3"), baz = new ann(bar = "4")) class C extends AnyRef { def () = { super.(); () @@ -8,7 +8,7 @@ () } { - @ann(bar = "1", quux = ["2", "3"], baz = ann(bar = "4")) class C extends Object { + @ann(bar = "1", quux = ["2", "3"], baz = ann(bar = "4")) class C extends AnyRef { def (): C = { C.super.(); () diff --git a/test/files/run/reify_classfileann_b.check b/test/files/run/reify_classfileann_b.check index 0aac9aeb2a..33270e0035 100644 --- a/test/files/run/reify_classfileann_b.check +++ b/test/files/run/reify_classfileann_b.check @@ -1,5 +1,5 @@ { - class C extends Object { + class C extends AnyRef { def () = { super.(); () @@ -9,7 +9,7 @@ () } { - class C extends Object { + class C extends AnyRef { def (): C = { C.super.(); () diff --git a/test/files/run/reify_newimpl_09.check b/test/files/run/reify_newimpl_09.check deleted file mode 100644 index 220bd6875a..0000000000 --- a/test/files/run/reify_newimpl_09.check +++ /dev/null @@ -1 +0,0 @@ -List(2) \ No newline at end of file diff --git a/test/files/run/reify_newimpl_09.scala b/test/files/run/reify_newimpl_09.scala deleted file mode 100644 index 27fbd37b71..0000000000 --- a/test/files/run/reify_newimpl_09.scala +++ /dev/null @@ -1,13 +0,0 @@ -import scala.reflect.runtime.universe._ -import scala.tools.reflect.ToolBox -import scala.tools.reflect.Eval - -object Test extends App { - { - type T = Int - val code = reify { - List[T](2) - } - println(code.eval) - } -} \ No newline at end of file diff --git a/test/files/run/reify_newimpl_10.check b/test/files/run/reify_newimpl_10.check deleted file mode 100644 index 220bd6875a..0000000000 --- a/test/files/run/reify_newimpl_10.check +++ /dev/null @@ -1 +0,0 @@ -List(2) \ No newline at end of file diff --git a/test/files/run/reify_newimpl_10.scala b/test/files/run/reify_newimpl_10.scala deleted file mode 100644 index 791e52943a..0000000000 --- a/test/files/run/reify_newimpl_10.scala +++ /dev/null @@ -1,14 +0,0 @@ -import scala.reflect.runtime.universe._ -import scala.tools.reflect.ToolBox -import scala.tools.reflect.Eval - -object Test extends App { - { - type T = Int - implicit val tt = implicitly[TypeTag[String]].asInstanceOf[TypeTag[T]] // this "mistake" is made for a reason! - val code = reify { - List[T](2) - } - println(code.eval) - } -} \ No newline at end of file diff --git a/test/files/run/reify_newimpl_16.check b/test/files/run/reify_newimpl_16.check deleted file mode 100644 index 220bd6875a..0000000000 --- a/test/files/run/reify_newimpl_16.check +++ /dev/null @@ -1 +0,0 @@ -List(2) \ No newline at end of file diff --git a/test/files/run/reify_newimpl_16.scala b/test/files/run/reify_newimpl_16.scala deleted file mode 100644 index a0cadf4d48..0000000000 --- a/test/files/run/reify_newimpl_16.scala +++ /dev/null @@ -1,17 +0,0 @@ -import scala.reflect.runtime.universe._ -import scala.tools.reflect.ToolBox -import scala.tools.reflect.Eval - -object Test extends App { - { - class C { - type T = Int - val code = reify { - List[T](2) - } - println(code.eval) - } - - new C - } -} \ No newline at end of file diff --git a/test/files/run/reify_newimpl_17.check b/test/files/run/reify_newimpl_17.check deleted file mode 100644 index e592e0e94e..0000000000 --- a/test/files/run/reify_newimpl_17.check +++ /dev/null @@ -1,2 +0,0 @@ -scala.tools.reflect.ToolBoxError: reflective toolbox has failed: -unresolved free type variables (namely: U defined by C in reify_newimpl_17.scala:6:11). have you forgot to use TypeTag annotations for type parameters external to a reifee? if you have troubles tracking free type variables, consider using -Xlog-free-types diff --git a/test/files/run/reify_newimpl_17.scala b/test/files/run/reify_newimpl_17.scala deleted file mode 100644 index 8fbcd52502..0000000000 --- a/test/files/run/reify_newimpl_17.scala +++ /dev/null @@ -1,20 +0,0 @@ -import scala.reflect.runtime.universe._ -import scala.tools.reflect.ToolBox -import scala.tools.reflect.Eval - -object Test extends App { - class C[U] { - type T = U - val code = reify { - List[T](2.asInstanceOf[T]) - } - println(code.eval) - } - - try { - new C[Int] - } catch { - case ex: Throwable => - println(ex) - } -} \ No newline at end of file diff --git a/test/files/run/reify_newimpl_26.check b/test/files/run/reify_newimpl_26.check index 6c5f124960..c006cb7ffb 100644 --- a/test/files/run/reify_newimpl_26.check +++ b/test/files/run/reify_newimpl_26.check @@ -14,7 +14,7 @@ scala> def foo[T]{ foo: [T]=> Unit scala> foo[Int] -AbsTypeTag[List[T]] +AbsTypeTag[scala.List[T]] scala> diff --git a/test/files/run/reify_newimpl_28.check b/test/files/run/reify_newimpl_28.check deleted file mode 100644 index a7029974a4..0000000000 --- a/test/files/run/reify_newimpl_28.check +++ /dev/null @@ -1 +0,0 @@ -List(2) diff --git a/test/files/run/reify_newimpl_28.scala b/test/files/run/reify_newimpl_28.scala deleted file mode 100644 index 524a110704..0000000000 --- a/test/files/run/reify_newimpl_28.scala +++ /dev/null @@ -1,17 +0,0 @@ -import scala.reflect.runtime.universe._ -import scala.tools.reflect.ToolBox -import scala.tools.reflect.Eval - -object Test extends App { - { - object C { - type T = Int - val code = reify { - List[T](2) - } - println(code.eval) - } - - C - } -} \ No newline at end of file diff --git a/test/files/run/reify_newimpl_32.check b/test/files/run/reify_newimpl_32.check deleted file mode 100644 index a7029974a4..0000000000 --- a/test/files/run/reify_newimpl_32.check +++ /dev/null @@ -1 +0,0 @@ -List(2) diff --git a/test/files/run/reify_newimpl_32.scala b/test/files/run/reify_newimpl_32.scala deleted file mode 100644 index 095e59d919..0000000000 --- a/test/files/run/reify_newimpl_32.scala +++ /dev/null @@ -1,17 +0,0 @@ -import scala.reflect.runtime.universe._ -import scala.tools.reflect.ToolBox -import scala.tools.reflect.Eval - -object Test extends App { - { - object C { - type T = Int - val code = reify { - List[C.T](2) - } - println(code.eval) - } - - C - } -} \ No newline at end of file diff --git a/test/files/run/reify_newimpl_34.check b/test/files/run/reify_newimpl_34.check deleted file mode 100644 index a7029974a4..0000000000 --- a/test/files/run/reify_newimpl_34.check +++ /dev/null @@ -1 +0,0 @@ -List(2) diff --git a/test/files/run/reify_newimpl_34.scala b/test/files/run/reify_newimpl_34.scala deleted file mode 100644 index a0a575ed7d..0000000000 --- a/test/files/run/reify_newimpl_34.scala +++ /dev/null @@ -1,18 +0,0 @@ -import scala.reflect.runtime.universe._ -import scala.tools.reflect.ToolBox -import scala.tools.reflect.Eval - -object Test extends App { - { - object C { - type T = Int - lazy val c = C - val code = reify { - List[c.T](2) - } - println(code.eval) - } - - C - } -} \ No newline at end of file diff --git a/test/files/run/reify_printf.scala b/test/files/run/reify_printf.scala index 1b1c6fdbb8..07e99781e3 100644 --- a/test/files/run/reify_printf.scala +++ b/test/files/run/reify_printf.scala @@ -44,8 +44,8 @@ object Test extends App { val Literal(Constant(s_format: String)) = format val paramsStack = scala.collection.mutable.Stack(params: _*) val parsed = s_format.split("(?<=%[\\w%])|(?=%[\\w%])") map { - case "%d" => createTempValDef( paramsStack.pop, IntTpe ) - case "%s" => createTempValDef( paramsStack.pop, StringTpe ) + case "%d" => createTempValDef( paramsStack.pop, typeOf[Int] ) + case "%s" => createTempValDef( paramsStack.pop, typeOf[String] ) case "%%" => { (None:Option[Tree], Literal(Constant("%"))) } diff --git a/test/files/run/t5224.check b/test/files/run/t5224.check index c754f23551..ffeb7b43ce 100644 --- a/test/files/run/t5224.check +++ b/test/files/run/t5224.check @@ -1,5 +1,5 @@ { - @new Foo(bar = "qwe") class C extends Object { + @new Foo(bar = "qwe") class C extends AnyRef { def () = { super.(); () diff --git a/test/files/run/t5271_3.check b/test/files/run/t5271_3.check index 2b920a36a8..3cfedbacd7 100644 --- a/test/files/run/t5271_3.check +++ b/test/files/run/t5271_3.check @@ -1,5 +1,5 @@ { - object C extends Object { + object C extends AnyRef { def () = { super.(); () diff --git a/test/files/run/t5704.check b/test/files/run/t5704.check index 74c4610988..0f6c84d2ec 100644 --- a/test/files/run/t5704.check +++ b/test/files/run/t5704.check @@ -1 +1 @@ -java.lang.String +String diff --git a/test/pending/run/reify_newimpl_09.scala b/test/pending/run/reify_newimpl_09.scala new file mode 100644 index 0000000000..27fbd37b71 --- /dev/null +++ b/test/pending/run/reify_newimpl_09.scala @@ -0,0 +1,13 @@ +import scala.reflect.runtime.universe._ +import scala.tools.reflect.ToolBox +import scala.tools.reflect.Eval + +object Test extends App { + { + type T = Int + val code = reify { + List[T](2) + } + println(code.eval) + } +} \ No newline at end of file diff --git a/test/pending/run/reify_newimpl_09a.scala b/test/pending/run/reify_newimpl_09a.scala new file mode 100644 index 0000000000..27fbd37b71 --- /dev/null +++ b/test/pending/run/reify_newimpl_09a.scala @@ -0,0 +1,13 @@ +import scala.reflect.runtime.universe._ +import scala.tools.reflect.ToolBox +import scala.tools.reflect.Eval + +object Test extends App { + { + type T = Int + val code = reify { + List[T](2) + } + println(code.eval) + } +} \ No newline at end of file diff --git a/test/pending/run/reify_newimpl_09b.scala b/test/pending/run/reify_newimpl_09b.scala new file mode 100644 index 0000000000..9e86dd5d8d --- /dev/null +++ b/test/pending/run/reify_newimpl_09b.scala @@ -0,0 +1,14 @@ +import scala.reflect.runtime.universe._ +import scala.tools.reflect.ToolBox +import scala.tools.reflect.Eval + +object Test extends App { + { + type U = Int + type T = U + val code = reify { + List[T](2) + } + println(code.eval) + } +} \ No newline at end of file diff --git a/test/pending/run/reify_newimpl_09c.scala b/test/pending/run/reify_newimpl_09c.scala new file mode 100644 index 0000000000..e2f4a4923a --- /dev/null +++ b/test/pending/run/reify_newimpl_09c.scala @@ -0,0 +1,20 @@ +import scala.reflect.runtime.universe._ +import scala.tools.reflect.ToolBox +import scala.tools.reflect.Eval + +object Test extends App { + { + def foo[W] = { + type U = W + type T = U + reify { + List[T](2) + } + } + val code = foo[Int] + println(code.tree.freeTypes) + val W = code.tree.freeTypes(2) + cm.mkToolBox().runExpr(code.tree, Map(W -> definitions.IntTpe)) + println(code.eval) + } +} \ No newline at end of file diff --git a/test/pending/run/reify_newimpl_10.scala b/test/pending/run/reify_newimpl_10.scala new file mode 100644 index 0000000000..791e52943a --- /dev/null +++ b/test/pending/run/reify_newimpl_10.scala @@ -0,0 +1,14 @@ +import scala.reflect.runtime.universe._ +import scala.tools.reflect.ToolBox +import scala.tools.reflect.Eval + +object Test extends App { + { + type T = Int + implicit val tt = implicitly[TypeTag[String]].asInstanceOf[TypeTag[T]] // this "mistake" is made for a reason! + val code = reify { + List[T](2) + } + println(code.eval) + } +} \ No newline at end of file diff --git a/test/pending/run/reify_newimpl_16.scala b/test/pending/run/reify_newimpl_16.scala new file mode 100644 index 0000000000..a0cadf4d48 --- /dev/null +++ b/test/pending/run/reify_newimpl_16.scala @@ -0,0 +1,17 @@ +import scala.reflect.runtime.universe._ +import scala.tools.reflect.ToolBox +import scala.tools.reflect.Eval + +object Test extends App { + { + class C { + type T = Int + val code = reify { + List[T](2) + } + println(code.eval) + } + + new C + } +} \ No newline at end of file diff --git a/test/pending/run/reify_newimpl_17.scala b/test/pending/run/reify_newimpl_17.scala new file mode 100644 index 0000000000..8fbcd52502 --- /dev/null +++ b/test/pending/run/reify_newimpl_17.scala @@ -0,0 +1,20 @@ +import scala.reflect.runtime.universe._ +import scala.tools.reflect.ToolBox +import scala.tools.reflect.Eval + +object Test extends App { + class C[U] { + type T = U + val code = reify { + List[T](2.asInstanceOf[T]) + } + println(code.eval) + } + + try { + new C[Int] + } catch { + case ex: Throwable => + println(ex) + } +} \ No newline at end of file diff --git a/test/pending/run/reify_newimpl_28.scala b/test/pending/run/reify_newimpl_28.scala new file mode 100644 index 0000000000..524a110704 --- /dev/null +++ b/test/pending/run/reify_newimpl_28.scala @@ -0,0 +1,17 @@ +import scala.reflect.runtime.universe._ +import scala.tools.reflect.ToolBox +import scala.tools.reflect.Eval + +object Test extends App { + { + object C { + type T = Int + val code = reify { + List[T](2) + } + println(code.eval) + } + + C + } +} \ No newline at end of file diff --git a/test/pending/run/reify_newimpl_32.scala b/test/pending/run/reify_newimpl_32.scala new file mode 100644 index 0000000000..095e59d919 --- /dev/null +++ b/test/pending/run/reify_newimpl_32.scala @@ -0,0 +1,17 @@ +import scala.reflect.runtime.universe._ +import scala.tools.reflect.ToolBox +import scala.tools.reflect.Eval + +object Test extends App { + { + object C { + type T = Int + val code = reify { + List[C.T](2) + } + println(code.eval) + } + + C + } +} \ No newline at end of file diff --git a/test/pending/run/reify_newimpl_34.scala b/test/pending/run/reify_newimpl_34.scala new file mode 100644 index 0000000000..a0a575ed7d --- /dev/null +++ b/test/pending/run/reify_newimpl_34.scala @@ -0,0 +1,18 @@ +import scala.reflect.runtime.universe._ +import scala.tools.reflect.ToolBox +import scala.tools.reflect.Eval + +object Test extends App { + { + object C { + type T = Int + lazy val c = C + val code = reify { + List[c.T](2) + } + println(code.eval) + } + + C + } +} \ No newline at end of file -- cgit v1.2.3