diff options
author | Martin Odersky <odersky@gmail.com> | 2014-02-14 18:10:42 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2014-02-14 18:10:57 +0100 |
commit | b68e11d61984b8216d90cd07323055fd5a76a3c5 (patch) | |
tree | 46572e42e437ec888264aad0b72c6463d476b0fa /test/x/xplore2.sc | |
parent | 6f49c27280dc853c67720cf4d539f74b1e65c824 (diff) | |
download | dotty-b68e11d61984b8216d90cd07323055fd5a76a3c5.tar.gz dotty-b68e11d61984b8216d90cd07323055fd5a76a3c5.tar.bz2 dotty-b68e11d61984b8216d90cd07323055fd5a76a3c5.zip |
New worksheet highlighting some symbol and tree constructions
Diffstat (limited to 'test/x/xplore2.sc')
-rw-r--r-- | test/x/xplore2.sc | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/test/x/xplore2.sc b/test/x/xplore2.sc new file mode 100644 index 000000000..5a33b2519 --- /dev/null +++ b/test/x/xplore2.sc @@ -0,0 +1,104 @@ +package x +import dotty.tools.dotc._ +import core._ +import Contexts._ +import Symbols._ +import Decorators._ // should always import to get useful implicit decorators. +import Flags._ +import Types._ +import ast.Trees._ +import ast.tpd +import ast.untpd +import Constants._ + +object xplore2 { + import ast.tpd._ + println("Welcome to the Scala worksheet") //> Welcome to the Scala worksheet + val c = Main.newCompiler //> c : dotty.tools.dotc.Compiler = dotty.tools.dotc.Compiler@d8d9850 + val base = new ContextBase //> base : dotty.tools.dotc.core.Contexts.ContextBase = dotty.tools.dotc.core.C + //| ontexts$ContextBase@31ad98ef + implicit val ctx = c.rootContext(base.initialCtx) + //> ctx : dotty.tools.dotc.core.Contexts.Context = Context( + //| owner = module class <root>, scope = Scopes() + //| owner = module class <root>, scope = Scopes() + //| owner = module class <root>, scope = Scopes() + //| owner = module class <root>, scope = Scopes() + //| owner = module class <root>, scope = Scopes() + //| owner = val <none>, scope = null + + val SerializableClass = ctx.requiredClass("scala.Serializable") + //> SerializableClass : dotty.tools.dotc.core.Symbols.ClassSymbol = class Seria + //| lizable + val SystemModule = ctx.requiredModule("java.lang.System") + //> SystemModule : dotty.tools.dotc.core.Symbols.TermSymbol = module System + + val scope = new Scopes.MutableScope //> scope : dotty.tools.dotc.core.Scopes.MutableScope = Scopes() + val bla = ctx.newClassSymbol( // suggestion: Use newCompleteClassSymbol instead! + owner = defn.EmptyPackageClass, + name = "Bia".toTypeName, + flags = EmptyFlags, + infoFn = cls => ClassInfo( + prefix = defn.EmptyPackageClass.thisType, + cls = cls, + classParents = List(defn.ObjectClass.typeRef, SerializableClass.typeRef), + decls = scope, + selfInfo = NoType)).entered //> bla : dotty.tools.dotc.core.Symbols.ClassSymbol = class Bia + val constr = ctx.newConstructor(bla, EmptyFlags, List("p".toTermName, "r".toTermName), List(defn.AnyRefType, defn.IntType)).entered + //> constr : dotty.tools.dotc.core.Symbols.Symbol{type ThisName = dotty.tools. + //| dotc.core.Names.TermName} = method <init> + val foo = ctx.newSymbol( + owner = bla, + name = "foo".toTermName, + flags = Final, + info = MethodType(List("s".toTermName), List(defn.IntType), defn.UnitType)).entered + //> foo : dotty.tools.dotc.core.Symbols.Symbol{type ThisName = dotty.tools.dot + //| c.core.Names.TermName} = val foo + val rep = ctx.newSymbol(bla, "rep".toTermName, flags = Lazy, info = defn.IntType).entered + //> rep : dotty.tools.dotc.core.Symbols.Symbol{type ThisName = dotty.tools.dot + //| c.core.Names.TermName} = val rep + val tostr = ctx.newSymbol(bla, "toString".toTermName, flags = Override, info = defn.UnitType).entered + //> tostr : dotty.tools.dotc.core.Symbols.Symbol{type ThisName = dotty.tools.d + //| otc.core.Names.TermName} = val toString +// val repTree = ValDef(rep, Literal(Constant(3))) + "==".toTermName.encode //> res0: dotty.tools.dotc.core.Names.Name = $eq$eq + val b = ctx.newSymbol(tostr, "b".toTermName, EmptyFlags, bla.typeRef) + //> b : dotty.tools.dotc.core.Symbols.Symbol{type ThisName = dotty.tools.dotc. + //| core.Names.TermName} = val b + + val bTree = ValDef(b, New(bla.typeRef, List(This(bla), Literal(Constant(3))))) + //> bTree : dotty.tools.dotc.ast.tpd.ValDef = ValDef(Modifiers(,,List()),b,Typ + //| eTree[TypeRef(ThisType(module class <empty>),Bia)],Apply(Select(New(TypeTre + //| e[TypeRef(ThisType(module class <empty>),Bia)]),<init>),List(This(Bia), Lit + //| eral(Constant(3))))) + val system = tpd.Ident(SystemModule.termRef) //> system : dotty.tools.dotc.ast.tpd.Ident = Ident(System) + + val ref @ TermRef(_, _) = system.tpe //> ref : dotty.tools.dotc.core.Types.TermRef = TermRef(ThisType(module class + //| lang),System) + ref.symbol //> res1: dotty.tools.dotc.core.Symbols.Symbol = module System + val idHash = Select(system, "identityHashCode".toTermName) + //> idHash : dotty.tools.dotc.ast.tpd.Select = Select(Ident(System),identityHa + //| shCode) + val idHashApp = Apply(idHash, Ident(b.termRef) :: Nil) + //> idHashApp : dotty.tools.dotc.ast.tpd.Apply = Apply(Select(Ident(System),id + //| entityHashCode),List(Ident(b))) + val eqlref = defn.IntType.member("==".toTermName) + //> eqlref : dotty.tools.dotc.core.Denotations.Denotation = val <none> + + /* + val tostrTree = { + Block( + List( + ValDef(b, New(bla.typeRef, List(This(bla), Literal(Constant(3))))), + If( + Apply( + Select( + Apply( + Select(Ident(SystemModule.termRef), "identityHashCode".toTermName), + Ident(b.termRef) :: Nil), + "==".toTermName.encode), + Literal(Constant(0)) :: Nil), + Apply(Select(Ident(b.termRef), foo.termRef), Literal(Constant(3)) :: Nil), + EmptyTree)), + Literal(Constant(()))) + }*/ +}
\ No newline at end of file |