summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLukas Rytz <lukas.rytz@epfl.ch>2011-01-18 15:57:47 +0000
committerLukas Rytz <lukas.rytz@epfl.ch>2011-01-18 15:57:47 +0000
commitbdd7487b066109bc3dc740b3e14ce2adb0113620 (patch)
tree526a1220701b3029e2430ef1a78008eda3bdc00e /src
parentb500a5c78d87052b8eff12f6e3eac472b257d635 (diff)
downloadscala-bdd7487b066109bc3dc740b3e14ce2adb0113620.tar.gz
scala-bdd7487b066109bc3dc740b3e14ce2adb0113620.tar.bz2
scala-bdd7487b066109bc3dc740b3e14ce2adb0113620.zip
second version of close #3649. no review
Diffstat (limited to 'src')
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/NamesDefaults.scala28
1 files changed, 16 insertions, 12 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/NamesDefaults.scala b/src/compiler/scala/tools/nsc/typechecker/NamesDefaults.scala
index 468e2a6b20..b082cd78f5 100644
--- a/src/compiler/scala/tools/nsc/typechecker/NamesDefaults.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/NamesDefaults.scala
@@ -369,19 +369,23 @@ trait NamesDefaults { self: Analyzer =>
if (givenArgs.length < params.length) {
val (missing, positional) = missingParams(givenArgs, params)
if (missing forall (_.hasDefaultFlag)) {
- val defaultArgs = missing map (p => {
- var default1 = qual match {
- case Some(q) => gen.mkAttributedSelect(q.duplicate, defaultGetter(p, context))
- case None => gen.mkAttributedRef(defaultGetter(p, context))
+ val defaultArgs = missing flatMap (p => {
+ val defGetter = defaultGetter(p, context)
+ if (defGetter == NoSymbol) None // prevent crash in erroneous trees, #3649
+ else {
+ var default1 = qual match {
+ case Some(q) => gen.mkAttributedSelect(q.duplicate, defGetter)
+ case None => gen.mkAttributedRef(defGetter)
- }
- default1 = if (targs.isEmpty) default1
- else TypeApply(default1, targs.map(_.duplicate))
- val default2 = (default1 /: previousArgss)((tree, args) =>
- Apply(tree, args.map(_.duplicate)))
- atPos(pos) {
- if (positional) default2
- else AssignOrNamedArg(Ident(p.name), default2)
+ }
+ default1 = if (targs.isEmpty) default1
+ else TypeApply(default1, targs.map(_.duplicate))
+ val default2 = (default1 /: previousArgss)((tree, args) =>
+ Apply(tree, args.map(_.duplicate)))
+ Some(atPos(pos) {
+ if (positional) default2
+ else AssignOrNamedArg(Ident(p.name), default2)
+ })
}
})
(givenArgs ::: defaultArgs, Nil)