summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/typechecker/Macros.scala
diff options
context:
space:
mode:
authorUladzimir Abramchuk <u.abramchuk@gmail.com>2013-02-05 20:17:23 +0300
committerUladzimir Abramchuk <u.abramchuk@gmail.com>2013-02-16 17:00:46 +0300
commit9d5d55bdf4e36489c249fe9736d53c8d12a9d7e5 (patch)
treeb26f68cefe1a119bc5898d09eda7a39bbba31a43 /src/compiler/scala/tools/nsc/typechecker/Macros.scala
parent466fc670a38836dfb81d75f72d46ddcaa12bc3bb (diff)
downloadscala-9d5d55bdf4e36489c249fe9736d53c8d12a9d7e5.tar.gz
scala-9d5d55bdf4e36489c249fe9736d53c8d12a9d7e5.tar.bz2
scala-9d5d55bdf4e36489c249fe9736d53c8d12a9d7e5.zip
SI-5744 evidence params are now SYNTHETIC
The macro def <-> macro impl correspondence check compares names of the corresponding parameters in def and impl and reports an error if they don't match. This was originally designed to avoid confusion w.r.t named arguments (which ended up being never implemented as described in SI-5920). Sometimes parameter names are generated by the compiler, which puts the user in a tough position. Luckily, there's an escape hatch built it, which omits the name correspondence check if one of the parameters is SYNTHETIC. Everything went well until we realized that evidences generated by context bounds aren't SYNTHETIC, which led to the bug at hand. Marking auto-generated evidence parameters SYNTHETIC was only the first step, as the correspondence checker uses parameter symbols, not parameter trees. Why's that a problem? Because SYNTHETIC doesn't get propagated from def trees to their underlying symbols (see ValueParameterFlags). Unfortunately one cannot just change ValueParameterFlags, because that would break printouts generated in TypeDiagnostics, which is designed to not print synthetic symbols. Thus we modify methodTypeErrorString in TypeDiagnostics to always print synthetic symbols. Therefore now we propagate all paramSym.flags when doing correspondent sweeps to keep them in sync between def trees and their underlying symbols. This fixes the problem.
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/Macros.scala')
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Macros.scala4
1 files changed, 1 insertions, 3 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Macros.scala b/src/compiler/scala/tools/nsc/typechecker/Macros.scala
index 245656e2d7..0ba30ffa73 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Macros.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Macros.scala
@@ -333,9 +333,7 @@ trait Macros extends scala.tools.reflect.FastTrack with Traces {
def param(tree: Tree): Symbol =
paramCache.getOrElseUpdate(tree.symbol, {
val sym = tree.symbol
- val sigParam = makeParam(sym.name, sym.pos, implType(sym.isType, sym.tpe))
- if (sym.isSynthetic) sigParam.flags |= SYNTHETIC
- sigParam
+ makeParam(sym.name, sym.pos, implType(sym.isType, sym.tpe), sym.flags)
})
val paramss = List(ctxParam) :: mmap(vparamss)(param)