Permalink
Browse files

drops the redundant typecheck of blackbox expansions

While fixing the problem with the order of typechecks for whitebox expansions,
I realized that we’re doing redundant work when expanding blackbox macros.
Concretely, typechecking blackbox expansions looked as follows:

  val expanded1 = atPos(enclosingMacroPosition.focus)(Typed(expanded0, TypeTree(innerPt)))
  val expanded2 = typecheck("blackbox typecheck #1", expanded1, innerPt)
  typecheck("blackbox typecheck #2", expanded1, outerPt)

Or, if we reformulate it using quasiquotes (temporarily not taking
positions into account, since they aren’t important here):

  val expanded2 = typed(q”$expanded: $innerPt”, innerPt)
  typed(expanded2, outerPt)

In this formulation, it becomes apparent that the first typecheck is
redundant. If something is ascribed with some type, then typechecking
the ascription against that type does nothing useful.

This is also highlights one of the reasons why it would be really nice
to have quasiquotes used in the compiler. With them, it’s easy to notice
things that would otherwise remain buried behind swaths of boilerplate.
  • Loading branch information...
1 parent a3b3341 commit ca2dbe55eb55ec0d5461a62f5783ab1f1ebb4818 @xeno-by xeno-by committed Dec 10, 2013
Showing with 1 addition and 2 deletions.
  1. +1 −2 src/compiler/scala/tools/nsc/typechecker/Macros.scala
@@ -635,8 +635,7 @@ trait Macros extends FastTrack with MacroRuntimes with Traces with Helpers {
if (isBlackbox(expandee)) {
val expanded1 = atPos(enclosingMacroPosition.focus)(Typed(expanded0, TypeTree(innerPt)))
- val expanded2 = typecheck("blackbox typecheck #1", expanded1, innerPt)
- typecheck("blackbox typecheck #2", expanded1, outerPt)
+ typecheck("blackbox typecheck", expanded1, outerPt)
} else {
val expanded1 = expanded0
val expanded2 = typecheck("whitebox typecheck #1", expanded1, outerPt)

2 comments on commit ca2dbe5

Owner

adriaanm commented on ca2dbe5 Dec 18, 2013

actually, this seems to have cause regression https://issues.scala-lang.org/browse/SI-8091

Member

xeno-by replied Dec 18, 2013

I see.

Please sign in to comment.