summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLukas Rytz <lukas.rytz@epfl.ch>2009-09-11 08:18:50 +0000
committerLukas Rytz <lukas.rytz@epfl.ch>2009-09-11 08:18:50 +0000
commit10cf73815b04d3d3d214adc1d5176daa81916e8f (patch)
treec8f9316bba98f33ed288a0b9b534e128e4e6e2b4 /src
parent0250956d2dab3df8d8c72a94fbc886bf655dc690 (diff)
downloadscala-10cf73815b04d3d3d214adc1d5176daa81916e8f.tar.gz
scala-10cf73815b04d3d3d214adc1d5176daa81916e8f.tar.bz2
scala-10cf73815b04d3d3d214adc1d5176daa81916e8f.zip
fix #2268
Diffstat (limited to 'src')
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Namers.scala6
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Typers.scala6
2 files changed, 10 insertions, 2 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Namers.scala b/src/compiler/scala/tools/nsc/typechecker/Namers.scala
index 8f91c823aa..d7c5ed2b33 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Namers.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Namers.scala
@@ -1007,7 +1007,11 @@ trait Namers { self: Analyzer =>
}
}
- val defTpt = subst(copyUntyped(vparam.tpt))
+ val defTpt = subst(copyUntyped(vparam.tpt match {
+ // default getter for by-name params
+ case AppliedTypeTree(_, List(arg)) if sym.hasFlag(BYNAMEPARAM) => arg
+ case t => t
+ }))
val defRhs = copyUntyped(vparam.rhs)
val defaultTree = atPos(vparam.pos.focus) {
diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
index fef0dd0282..d9471c6008 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
@@ -1412,7 +1412,11 @@ trait Typers { self: Analyzer =>
else if (sym1.isSkolem) matches(sym, sym1.deSkolemize)
else super[SubstTypeMap].matches(sym, sym1)
}
- subst(tpt1.tpe)
+ // allow defaults on by-name parameters
+ if (sym hasFlag BYNAMEPARAM)
+ if (tpt1.tpe.typeArgs.isEmpty) WildcardType // during erasure tpt1 is Funciton0
+ else subst(tpt1.tpe.typeArgs(0))
+ else subst(tpt1.tpe)
} else tpt1.tpe
newTyper(typer1.context.make(vdef, sym)).transformedOrTyped(vdef.rhs, tpt2)
}