summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDen Shabalin <den.shabalin@gmail.com>2013-12-02 15:30:22 +0100
committerDen Shabalin <den.shabalin@gmail.com>2013-12-10 16:02:44 +0100
commit26a33482718dc165ed5f9c4703205c94b9d0c058 (patch)
tree307f784b261ff32d1aff44d6a26796aa163e9599 /src
parent0ccd4bcac64efe72d9758fbfb6a6dbce44cf308e (diff)
downloadscala-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.scala12
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)
}
}
}