summaryrefslogtreecommitdiff
path: root/src/reflect/scala/reflect/macros/Universe.scala
diff options
context:
space:
mode:
authorEugene Burmako <xeno.by@gmail.com>2014-02-15 01:58:45 +0100
committerEugene Burmako <xeno.by@gmail.com>2014-02-15 09:32:29 +0100
commit8801d2937c45681bd58252ce3390a80754da6d6b (patch)
tree54bfe72f6d17c3442af8e20d04bf6653cec8e872 /src/reflect/scala/reflect/macros/Universe.scala
parentc9ca7370575ef2245b03ead50ec86fad99c3cce9 (diff)
downloadscala-8801d2937c45681bd58252ce3390a80754da6d6b.tar.gz
scala-8801d2937c45681bd58252ce3390a80754da6d6b.tar.bz2
scala-8801d2937c45681bd58252ce3390a80754da6d6b.zip
exposes scope mutation APIs
Also needed for async.
Diffstat (limited to 'src/reflect/scala/reflect/macros/Universe.scala')
-rw-r--r--src/reflect/scala/reflect/macros/Universe.scala23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/reflect/scala/reflect/macros/Universe.scala b/src/reflect/scala/reflect/macros/Universe.scala
index 039dcc7331..d368cc6c96 100644
--- a/src/reflect/scala/reflect/macros/Universe.scala
+++ b/src/reflect/scala/reflect/macros/Universe.scala
@@ -26,6 +26,14 @@ abstract class Universe extends scala.reflect.api.Universe {
/** @inheritdoc */
trait MacroInternalApi extends InternalApi { internal =>
+ /** Adds a given symbol to the given scope.
+ */
+ def enter(scope: Scope, sym: Symbol): scope.type
+
+ /** Removes a given symbol to the given scope.
+ */
+ def unlink(scope: Scope, sym: Symbol): scope.type
+
/** Collects all the symbols defined by subtrees of `tree` that are owned by `prev`,
* and then changes their owner to point to `next`.
*
@@ -152,6 +160,21 @@ abstract class Universe extends scala.reflect.api.Universe {
/** @inheritdoc */
trait MacroDecoratorApi extends DecoratorApi {
+ /** Extension methods for scopes */
+ type ScopeDecorator[T <: Scope] <: MacroScopeDecoratorApi[T]
+
+ /** @see [[ScopeDecorator]] */
+ implicit def scopeDecorator[T <: Scope](tree: T): ScopeDecorator[T]
+
+ /** @see [[ScopeDecorator]] */
+ class MacroScopeDecoratorApi[T <: Scope](val scope: T) {
+ /** @see [[internal.enter]] */
+ def enter(sym: Symbol): T = internal.enter(scope, sym)
+
+ /** @see [[internal.unlink]] */
+ def unlink(sym: Symbol): T = internal.unlink(scope, sym)
+ }
+
/** @inheritdoc */
override type TreeDecorator[T <: Tree] <: MacroTreeDecoratorApi[T]