diff options
author | Paul Phillips <paulp@improving.org> | 2013-05-11 13:02:54 -0700 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2013-05-11 13:02:54 -0700 |
commit | 433880e91cba9e1e926e9fcbf04ecd4aeb1d73eb (patch) | |
tree | cc12050e025e2fe0b38fa1cea9e9d64d784f5131 /src/compiler/scala/tools/nsc/typechecker/Macros.scala | |
parent | 24cad039b309cf3ccd79aca8f3bae398a42ab66b (diff) | |
download | scala-433880e91cba9e1e926e9fcbf04ecd4aeb1d73eb.tar.gz scala-433880e91cba9e1e926e9fcbf04ecd4aeb1d73eb.tar.bz2 scala-433880e91cba9e1e926e9fcbf04ecd4aeb1d73eb.zip |
Refactored stabilize.
Mode elimination ramps up in difficulty now, so I pursued
other forms of code hygiene.
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/Macros.scala')
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/Macros.scala | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Macros.scala b/src/compiler/scala/tools/nsc/typechecker/Macros.scala index d07297bb35..31cc8bd93c 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Macros.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Macros.scala @@ -362,6 +362,8 @@ trait Macros extends scala.tools.reflect.FastTrack with Traces { catch { case MacroBodyTypecheckException => EmptyTree } class MacroTyper(val typer: Typer, val macroDdef: DefDef) extends MacroErrors { + private def typed1Expr(tree: Tree) = typer.typed1(tree, EXPRmode, WildcardType) + // Phase I: sanity checks val macroDef = macroDdef.symbol macroLogVerbose("typechecking macro def %s at %s".format(macroDef, macroDdef.pos)) @@ -379,20 +381,20 @@ trait Macros extends scala.tools.reflect.FastTrack with Traces { // e.g. a "type arguments [U] do not conform to method foo's type parameter bounds" error // doesn't manifest itself as an error in the resulting tree val prevNumErrors = reporter.ERROR.count - var rhs1 = typer.typed1(rhs, EXPRmode, WildcardType) + var rhs1 = typed1Expr(rhs) def rhsNeedsMacroExpansion = rhs1.symbol != null && rhs1.symbol.isMacro && !rhs1.symbol.isErroneous while (rhsNeedsMacroExpansion) { rhs1 = macroExpand1(typer, rhs1) match { case Success(expanded) => try { - val typechecked = typer.typed1(expanded, EXPRmode, WildcardType) + val typechecked = typed1Expr(expanded) macroLogVerbose("typechecked1:%n%s%n%s".format(typechecked, showRaw(typechecked))) typechecked } finally { popMacroContext() } case Fallback(fallback) => - typer.typed1(fallback, EXPRmode, WildcardType) + typed1Expr(fallback) case Delayed(delayed) => delayed case Skipped(skipped) => |