diff options
author | Iulian Dragos <jaguarul@gmail.com> | 2007-07-03 15:55:20 +0000 |
---|---|---|
committer | Iulian Dragos <jaguarul@gmail.com> | 2007-07-03 15:55:20 +0000 |
commit | 72597908f803fbf709bf8af8379ca10c7cfd7639 (patch) | |
tree | 201dc7851aa150f9854dafaf8a190bde52ce9d9a /src | |
parent | 5eb0d12474176dfa4c4ccca6e5f1221493c96387 (diff) | |
download | scala-72597908f803fbf709bf8af8379ca10c7cfd7639.tar.gz scala-72597908f803fbf709bf8af8379ca10c7cfd7639.tar.bz2 scala-72597908f803fbf709bf8af8379ca10c7cfd7639.zip |
Fixed lazy vals to allow for patterns.
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/scala/tools/nsc/ast/parser/TreeBuilder.scala | 2 | ||||
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/RefChecks.scala | 9 |
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 { |