diff options
author | Eugene Burmako <xeno.by@gmail.com> | 2013-12-10 14:38:13 +0100 |
---|---|---|
committer | Eugene Burmako <xeno.by@gmail.com> | 2013-12-10 23:13:01 +0100 |
commit | ca2dbe55eb55ec0d5461a62f5783ab1f1ebb4818 (patch) | |
tree | d92858a02a6092a49d0c352a5f7215eb5def76e0 /test/files/neg/t4440.scala | |
parent | a3b33419b02cafb7e2c6fed6dd96151859fc7d77 (diff) | |
download | scala-ca2dbe55eb55ec0d5461a62f5783ab1f1ebb4818.tar.gz scala-ca2dbe55eb55ec0d5461a62f5783ab1f1ebb4818.tar.bz2 scala-ca2dbe55eb55ec0d5461a62f5783ab1f1ebb4818.zip |
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.
Diffstat (limited to 'test/files/neg/t4440.scala')
0 files changed, 0 insertions, 0 deletions