diff options
author | Eugene Burmako <xeno.by@gmail.com> | 2014-01-31 15:47:56 +0100 |
---|---|---|
committer | Eugene Burmako <xeno.by@gmail.com> | 2014-02-14 23:51:23 +0100 |
commit | 483bd3cacb34df3b3c2cc205338cb8e12cb89838 (patch) | |
tree | fb3986311fe90c2960405c05de4378138f258281 /src/compiler/scala/reflect/macros | |
parent | d7dd68faa4cd279714c32965ebf83e118c915e0a (diff) | |
download | scala-483bd3cacb34df3b3c2cc205338cb8e12cb89838.tar.gz scala-483bd3cacb34df3b3c2cc205338cb8e12cb89838.tar.bz2 scala-483bd3cacb34df3b3c2cc205338cb8e12cb89838.zip |
adds Context.enclosingOwner
As per discussion at https://groups.google.com/forum/#!topic/scala-internals/nf_ooEBn6-k,
this commit introduces the new c.enclosingOwner API that is going to serve
two purposes: 1) provide a better controlled alternative to c.enclosingTree,
2) enable low-level tinkering with owner chains without having to cast
to compiler internals.
This solution is not ideal, because: 1) symbols are much more than
I would like to expose about enclosing lexical contexts (after the
aforementioned discussion I’m no longer completely sure whether exposing
nothing is the right thing to do, but exposing symbol completers is definitely
something that should be avoided), 2) we shouldn’t have to do that
low-level stuff in the first place.
However, let’s face the facts. This change represents both an improvement
over the state of the art wrt #1 and a long-awaited capability wrt #2.
I think this pretty much warrants its place in trunk in the spirit of
gradual, evolutionary development of reflection API.
Diffstat (limited to 'src/compiler/scala/reflect/macros')
-rw-r--r-- | src/compiler/scala/reflect/macros/contexts/Enclosures.scala | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/src/compiler/scala/reflect/macros/contexts/Enclosures.scala b/src/compiler/scala/reflect/macros/contexts/Enclosures.scala index 5e931817b5..0b4aad85a3 100644 --- a/src/compiler/scala/reflect/macros/contexts/Enclosures.scala +++ b/src/compiler/scala/reflect/macros/contexts/Enclosures.scala @@ -18,6 +18,7 @@ trait Enclosures { // vals are eager to simplify debugging // after all we wouldn't save that much time by making them lazy val macroApplication: Tree = expandee + val enclosingOwner = site.owner def enclosingPackage: PackageDef = strictEnclosure[PackageDef] val enclosingClass: Tree = lenientEnclosure[ImplDef] def enclosingImpl: ImplDef = strictEnclosure[ImplDef] |