summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEugene Burmako <xeno.by@gmail.com>2014-02-14 23:39:47 +0100
committerEugene Burmako <xeno.by@gmail.com>2014-02-15 09:32:27 +0100
commit2608db67db46bcbcd5c235b38801a8d863def637 (patch)
tree0a94e550412677ae774a8c3d7f81ab65b9a8c710 /src
parent3bfacda9773901df8f05f0c3d1234fb083b18cc7 (diff)
downloadscala-2608db67db46bcbcd5c235b38801a8d863def637.tar.gz
scala-2608db67db46bcbcd5c235b38801a8d863def637.tar.bz2
scala-2608db67db46bcbcd5c235b38801a8d863def637.zip
exposes additional TreeGen methods
Agains, this is something that's needed for async.
Diffstat (limited to 'src')
-rw-r--r--src/compiler/scala/tools/nsc/ast/TreeGen.scala2
-rw-r--r--src/reflect/scala/reflect/internal/Internals.scala5
-rw-r--r--src/reflect/scala/reflect/internal/TreeGen.scala3
-rw-r--r--src/reflect/scala/reflect/macros/Universe.scala10
4 files changed, 19 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/ast/TreeGen.scala b/src/compiler/scala/tools/nsc/ast/TreeGen.scala
index a87a04472a..0575b9703e 100644
--- a/src/compiler/scala/tools/nsc/ast/TreeGen.scala
+++ b/src/compiler/scala/tools/nsc/ast/TreeGen.scala
@@ -142,7 +142,7 @@ abstract class TreeGen extends scala.reflect.internal.TreeGen with TreeDSL {
* x.asInstanceOf[`pt`]() if after uncurry but before erasure
* x.$asInstanceOf[`pt`]() if at or after erasure
*/
- def mkCast(tree: Tree, pt: Type): Tree = {
+ override def mkCast(tree: Tree, pt: Type): Tree = {
debuglog("casting " + tree + ":" + tree.tpe + " to " + pt + " at phase: " + phase)
assert(!tree.tpe.isInstanceOf[MethodType], tree)
assert(pt eq pt.normalize, tree +" : "+ debugString(pt) +" ~>"+ debugString(pt.normalize))
diff --git a/src/reflect/scala/reflect/internal/Internals.scala b/src/reflect/scala/reflect/internal/Internals.scala
index 974578240e..6308a97dbc 100644
--- a/src/reflect/scala/reflect/internal/Internals.scala
+++ b/src/reflect/scala/reflect/internal/Internals.scala
@@ -139,6 +139,9 @@ trait Internals extends api.Internals {
def mkAttributedQualifier(tpe: Type, termSym: Symbol): Tree = self.gen.mkAttributedQualifier(tpe, termSym)
def mkAttributedRef(pre: Type, sym: Symbol): RefTree = self.gen.mkAttributedRef(pre, sym)
def mkAttributedRef(sym: Symbol): RefTree = self.gen.mkAttributedRef(sym)
+ def stabilize(tree: Tree): Tree = self.gen.stabilize(tree)
+ def mkAttributedStableRef(pre: Type, sym: Symbol): Tree = self.gen.mkAttributedStableRef(pre, sym)
+ def mkAttributedStableRef(sym: Symbol): Tree = self.gen.mkAttributedStableRef(sym)
def mkUnattributedRef(sym: Symbol): RefTree = self.gen.mkUnattributedRef(sym)
def mkUnattributedRef(fullName: Name): RefTree = self.gen.mkUnattributedRef(fullName)
def mkAttributedThis(sym: Symbol): This = self.gen.mkAttributedThis(sym)
@@ -153,5 +156,7 @@ trait Internals extends api.Internals {
def mkMethodCall(target: Tree, targs: List[Type], args: List[Tree]): Tree = self.gen.mkMethodCall(target, targs, args)
def mkNullaryCall(method: Symbol, targs: List[Type]): Tree = self.gen.mkNullaryCall(method, targs)
def mkRuntimeUniverseRef: Tree = self.gen.mkRuntimeUniverseRef
+ def mkZero(tp: Type): Tree = self.gen.mkZero(tp)
+ def mkCast(tree: Tree, pt: Type): Tree = self.gen.mkCast(tree, pt)
}
} \ No newline at end of file
diff --git a/src/reflect/scala/reflect/internal/TreeGen.scala b/src/reflect/scala/reflect/internal/TreeGen.scala
index e8e57f9eb3..7ed808a7fb 100644
--- a/src/reflect/scala/reflect/internal/TreeGen.scala
+++ b/src/reflect/scala/reflect/internal/TreeGen.scala
@@ -893,4 +893,7 @@ abstract class TreeGen {
def mkSyntheticParam(pname: TermName) =
ValDef(Modifiers(PARAM | SYNTHETIC), pname, TypeTree(), EmptyTree)
+
+ def mkCast(tree: Tree, pt: Type): Tree =
+ atPos(tree.pos)(mkAsInstanceOf(tree, pt, any = true, wrapInApply = false))
}
diff --git a/src/reflect/scala/reflect/macros/Universe.scala b/src/reflect/scala/reflect/macros/Universe.scala
index 3319965844..11281551f1 100644
--- a/src/reflect/scala/reflect/macros/Universe.scala
+++ b/src/reflect/scala/reflect/macros/Universe.scala
@@ -223,6 +223,12 @@ abstract class Universe extends scala.reflect.api.Universe {
/** Builds a typed reference to given symbol. */
def mkAttributedRef(sym: Symbol): RefTree
+ def stabilize(tree: Tree): Tree
+
+ def mkAttributedStableRef(pre: Type, sym: Symbol): Tree
+
+ def mkAttributedStableRef(sym: Symbol): Tree
+
/** Builds an untyped reference to given symbol. Requires the symbol to be static. */
def mkUnattributedRef(sym: Symbol): RefTree
@@ -265,6 +271,10 @@ abstract class Universe extends scala.reflect.api.Universe {
/** A tree that refers to the runtime reflexive universe, `scala.reflect.runtime.universe`. */
def mkRuntimeUniverseRef: Tree
+
+ def mkZero(tp: Type): Tree
+
+ def mkCast(tree: Tree, pt: Type): Tree
}
/** @see [[internal.gen]] */