diff options
author | Lukas Rytz <lukas.rytz@epfl.ch> | 2009-09-11 08:18:50 +0000 |
---|---|---|
committer | Lukas Rytz <lukas.rytz@epfl.ch> | 2009-09-11 08:18:50 +0000 |
commit | 10cf73815b04d3d3d214adc1d5176daa81916e8f (patch) | |
tree | c8f9316bba98f33ed288a0b9b534e128e4e6e2b4 /src | |
parent | 0250956d2dab3df8d8c72a94fbc886bf655dc690 (diff) | |
download | scala-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.scala | 6 | ||||
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/Typers.scala | 6 |
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) } |