summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2006-08-18 17:09:14 +0000
committerMartin Odersky <odersky@gmail.com>2006-08-18 17:09:14 +0000
commitd283455a24148f43d33f69f4be1b627705d35ab6 (patch)
tree91d5b9c6025077a542c0e3517a00927d86c241bb /src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
parentd5aee9e7a1dde5fd3215f8ee6c8a811745535a16 (diff)
downloadscala-d283455a24148f43d33f69f4be1b627705d35ab6.tar.gz
scala-d283455a24148f43d33f69f4be1b627705d35ab6.tar.bz2
scala-d283455a24148f43d33f69f4be1b627705d35ab6.zip
fixed bug 704
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/RefChecks.scala')
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/RefChecks.scala30
1 files changed, 3 insertions, 27 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
index c745290cc9..5a2d7f8b7b 100644
--- a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
@@ -46,30 +46,6 @@ abstract class RefChecks extends InfoTransform {
} else tp
}
- // var m$: T = null; or, if class member: local var m$: T = _;
- def newModuleVarDef(accessor: Symbol) = {
- val mvar = accessor.owner.newVariable(accessor.pos, nme.moduleVarName(accessor.name))
- .setInfo(accessor.tpe.finalResultType)
- .setFlag(MODULEVAR);
- if (mvar.owner.isClass) {
- mvar setFlag (PRIVATE | LOCAL | SYNTHETIC);
- mvar.owner.info.decls.enter(mvar);
- }
- ValDef(mvar, if (mvar.owner.isClass) EmptyTree else Literal(Constant(null)))
- }
-
- // def m: T = { if (m$ == null) m$ = new m$class; m$ }
- def newModuleAccessDef(accessor: Symbol, mvar: Symbol) =
- DefDef(accessor, vparamss =>
- gen.mkCached(mvar,
- New(TypeTree(mvar.tpe),
- List(for (val pt <- mvar.tpe.symbol.primaryConstructor.info.paramTypes)
- yield This(accessor.owner.enclClass)))))
-
- // def m: T;
- def newModuleAccessDcl(accessor: Symbol) =
- DefDef(accessor setFlag lateDEFERRED, vparamss => EmptyTree);
-
class RefCheckTransformer(unit: CompilationUnit) extends Transformer {
var localTyper: analyzer.Typer = typer;
@@ -458,15 +434,15 @@ abstract class RefChecks extends InfoTransform {
val vdef =
localTyper.typed {
atPos(tree.pos) {
- newModuleVarDef(sym)
+ gen.mkModuleVarDef(sym)
}
}
val ddef =
atPhase(phase.next) {
localTyper.typed {
- if (sym.owner.isTrait) newModuleAccessDcl(sym)
- else newModuleAccessDef(sym, vdef.symbol)
+ if (sym.owner.isTrait) gen.mkModuleAccessDcl(sym)
+ else gen.mkModuleAccessDef(sym, vdef.symbol)
}
}