summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/compiler/scala/tools/nsc/ast/parser/TreeBuilder.scala2
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/RefChecks.scala9
2 files changed, 6 insertions, 5 deletions
diff --git a/src/compiler/scala/tools/nsc/ast/parser/TreeBuilder.scala b/src/compiler/scala/tools/nsc/ast/parser/TreeBuilder.scala
index f8efc95c74..fcee9c4d0e 100644
--- a/src/compiler/scala/tools/nsc/ast/parser/TreeBuilder.scala
+++ b/src/compiler/scala/tools/nsc/ast/parser/TreeBuilder.scala
@@ -420,7 +420,7 @@ abstract class TreeBuilder {
List(ValDef(mods, vname, tpt, matchExpr))
case _ =>
val tmp = freshName(pat1.pos)
- val firstDef = ValDef(Modifiers(PRIVATE | LOCAL | SYNTHETIC), tmp, TypeTree(), matchExpr)
+ val firstDef = ValDef(Modifiers(PRIVATE | LOCAL | SYNTHETIC | (mods.flags & LAZY)), tmp, TypeTree(), matchExpr)
var cnt = 0
val restDefs = for (val (vname, tpt) <- vars) yield {
cnt = cnt + 1
diff --git a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
index 9880f88ff3..620c10cdc5 100644
--- a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
@@ -650,12 +650,13 @@ abstract class RefChecks extends InfoTransform {
val vsym = tree.symbol
val lazyDefSym = vsym.lazyAccessor
assert(lazyDefSym != NoSymbol, vsym)
+ val ownerTransformer = new ChangeOwnerTraverser(vsym, lazyDefSym)
val lazyDef = atPos(tree.pos)(
- DefDef(lazyDefSym, vparamss =>
- if (tree.symbol.owner.isTrait) rhs // for traits, this is further tranformed in mixins
+ DefDef(lazyDefSym, vparamss => ownerTransformer(
+ if (tree.symbol.owner.isTrait) transform(rhs) // for traits, this is further tranformed in mixins
else Block(List(
- Assign(gen.mkAttributedRef(vsym), rhs)),
- gen.mkAttributedRef(vsym))))
+ Assign(gen.mkAttributedRef(vsym), transform(rhs))),
+ gen.mkAttributedRef(vsym)))))
log("Made lazy def: " + lazyDef)
typed(ValDef(vsym, EmptyTree)) :: typed(lazyDef) :: Nil
} else {