diff options
author | Eugene Burmako <xeno.by@gmail.com> | 2014-02-06 19:01:49 +0100 |
---|---|---|
committer | Eugene Burmako <xeno.by@gmail.com> | 2014-02-15 09:23:57 +0100 |
commit | 24780095d14938e60e28c710c47ed69629b7afc7 (patch) | |
tree | 7be93fa0110afd06c76a158a378d098d39908399 /src/compiler | |
parent | fa8f4022754356859f3af1c4ffbac02ab3dc3e7c (diff) | |
download | scala-24780095d14938e60e28c710c47ed69629b7afc7.tar.gz scala-24780095d14938e60e28c710c47ed69629b7afc7.tar.bz2 scala-24780095d14938e60e28c710c47ed69629b7afc7.zip |
addresses pull request feedback
Diffstat (limited to 'src/compiler')
6 files changed, 10 insertions, 3 deletions
diff --git a/src/compiler/scala/reflect/macros/contexts/Enclosures.scala b/src/compiler/scala/reflect/macros/contexts/Enclosures.scala index 0b4aad85a3..5e931817b5 100644 --- a/src/compiler/scala/reflect/macros/contexts/Enclosures.scala +++ b/src/compiler/scala/reflect/macros/contexts/Enclosures.scala @@ -18,7 +18,6 @@ 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] diff --git a/src/compiler/scala/reflect/macros/contexts/Internals.scala b/src/compiler/scala/reflect/macros/contexts/Internals.scala index e35a8ae034..cca6d957da 100644 --- a/src/compiler/scala/reflect/macros/contexts/Internals.scala +++ b/src/compiler/scala/reflect/macros/contexts/Internals.scala @@ -7,6 +7,8 @@ trait Internals extends scala.tools.nsc.transform.TypingTransformers { import global._ lazy val internal: ContextInternalApi = new global.SymbolTableInternal with ContextInternalApi { + val enclosingOwner = callsiteTyper.context.owner + class HofTransformer(hof: (Tree, TransformApi) => Tree) extends Transformer { val api = new TransformApi { def recur(tree: Tree): Tree = hof(tree, this) diff --git a/src/compiler/scala/reflect/macros/contexts/Typers.scala b/src/compiler/scala/reflect/macros/contexts/Typers.scala index 0c3881fdcf..f1620b764b 100644 --- a/src/compiler/scala/reflect/macros/contexts/Typers.scala +++ b/src/compiler/scala/reflect/macros/contexts/Typers.scala @@ -12,6 +12,7 @@ trait Typers { val TypecheckMode = scala.reflect.internal.Mode val TERMmode = TypecheckMode.EXPRmode val TYPEmode = TypecheckMode.TYPEmode | TypecheckMode.FUNmode + val PATTERNmode = TypecheckMode.PATTERNmode /** * @see [[scala.tools.reflect.ToolBox.typeCheck]] diff --git a/src/compiler/scala/tools/reflect/ToolBox.scala b/src/compiler/scala/tools/reflect/ToolBox.scala index f47db49718..dfe53be6c9 100644 --- a/src/compiler/scala/tools/reflect/ToolBox.scala +++ b/src/compiler/scala/tools/reflect/ToolBox.scala @@ -23,7 +23,7 @@ trait ToolBox[U <: scala.reflect.api.Universe] { /** Represents mode of operations of the typechecker underlying `c.typecheck` calls. * Is necessary since the shape of the typechecked tree alone is not enough to guess how it should be typechecked. - * Can be EXPRmode (typecheck as a term) or TYPEmode (typecheck as a type). + * Can be EXPRmode (typecheck as a term), TYPEmode (typecheck as a type) or PATTERNmode (typecheck as a pattern). */ type TypecheckMode @@ -36,6 +36,10 @@ trait ToolBox[U <: scala.reflect.api.Universe] { */ val TYPEmode: TypecheckMode + /** Indicates that an argument to `c.typecheck` should be typechecked as a pattern. + */ + val PATTERNmode: TypecheckMode + /** @see `Typers.typecheck` */ @deprecated("Use `tb.typecheck` instead", "2.11.0") diff --git a/src/compiler/scala/tools/reflect/ToolBoxFactory.scala b/src/compiler/scala/tools/reflect/ToolBoxFactory.scala index 3cae6fa8a8..3a40b44c74 100644 --- a/src/compiler/scala/tools/reflect/ToolBoxFactory.scala +++ b/src/compiler/scala/tools/reflect/ToolBoxFactory.scala @@ -365,6 +365,7 @@ abstract class ToolBoxFactory[U <: JavaUniverse](val u: U) { factorySelf => val TypecheckMode = scala.reflect.internal.Mode val TERMmode = TypecheckMode.EXPRmode val TYPEmode = TypecheckMode.TYPEmode | TypecheckMode.FUNmode + val PATTERNmode = TypecheckMode.PATTERNmode def typecheck(tree: u.Tree, mode: TypecheckMode = TERMmode, expectedType: u.Type, silent: Boolean = false, withImplicitViewsDisabled: Boolean = false, withMacrosDisabled: Boolean = false): u.Tree = withCompilerApi { compilerApi => import compilerApi._ diff --git a/src/compiler/scala/tools/reflect/quasiquotes/Placeholders.scala b/src/compiler/scala/tools/reflect/quasiquotes/Placeholders.scala index f50d699e22..29df0ae670 100644 --- a/src/compiler/scala/tools/reflect/quasiquotes/Placeholders.scala +++ b/src/compiler/scala/tools/reflect/quasiquotes/Placeholders.scala @@ -42,7 +42,7 @@ trait Placeholders { self: Quasiquotes => case nme.apply => args case nme.unapply => val (dummy @ Ident(nme.SELECTOR_DUMMY)) :: Nil = args - internal.subpatterns(dummy) + internal.subpatterns(dummy).get case _ => global.abort("unreachable") } |