diff options
author | Den Shabalin <den.shabalin@gmail.com> | 2013-12-02 15:30:22 +0100 |
---|---|---|
committer | Den Shabalin <den.shabalin@gmail.com> | 2013-12-10 16:02:44 +0100 |
commit | 26a33482718dc165ed5f9c4703205c94b9d0c058 (patch) | |
tree | 307f784b261ff32d1aff44d6a26796aa163e9599 /src | |
parent | 0ccd4bcac64efe72d9758fbfb6a6dbce44cf308e (diff) | |
download | scala-26a33482718dc165ed5f9c4703205c94b9d0c058.tar.gz scala-26a33482718dc165ed5f9c4703205c94b9d0c058.tar.bz2 scala-26a33482718dc165ed5f9c4703205c94b9d0c058.zip |
SI-7979 Fix quasiquotes crash on mismatch between fields and constructor
Diffstat (limited to 'src')
-rw-r--r-- | src/reflect/scala/reflect/internal/BuildUtils.scala | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/reflect/scala/reflect/internal/BuildUtils.scala b/src/reflect/scala/reflect/internal/BuildUtils.scala index 22e2bf4cad..357109ac2c 100644 --- a/src/reflect/scala/reflect/internal/BuildUtils.scala +++ b/src/reflect/scala/reflect/internal/BuildUtils.scala @@ -212,11 +212,15 @@ trait BuildUtils { self: SymbolTable => } // undo flag modifications by mergeing flag info from constructor args and fieldDefs val modsMap = fieldDefs.map { case ValDef(mods, name, _, _) => name -> mods }.toMap - val vparamss = mmap(vparamssRestoredImplicits) { vd => - val originalMods = modsMap(vd.name) | (vd.mods.flags & DEFAULTPARAM) - atPos(vd.pos)(ValDef(originalMods, vd.name, vd.tpt, vd.rhs)) + def ctorArgsCorrespondToFields = vparamssRestoredImplicits.flatten.forall { vd => modsMap.contains(vd.name) } + if (!ctorArgsCorrespondToFields) None + else { + val vparamss = mmap(vparamssRestoredImplicits) { vd => + val originalMods = modsMap(vd.name) | (vd.mods.flags & DEFAULTPARAM) + atPos(vd.pos)(ValDef(originalMods, vd.name, vd.tpt, vd.rhs)) + } + result(ctorMods, vparamss, edefs, body) } - result(ctorMods, vparamss, edefs, body) } } } |