diff options
author | Martin Odersky <odersky@gmail.com> | 2007-04-12 18:23:58 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2007-04-12 18:23:58 +0000 |
commit | eecb5e5c4cdc96c2ea4e58a0c4b735eeffbee043 (patch) | |
tree | d6e914ff40d9b3499ac64856e6f37b7c394298c9 /src/compiler/scala/tools/nsc/transform/Constructors.scala | |
parent | 5d449bfbc1a39aaf2cb78f04241990c8c6c37d5f (diff) | |
download | scala-eecb5e5c4cdc96c2ea4e58a0c4b735eeffbee043.tar.gz scala-eecb5e5c4cdc96c2ea4e58a0c4b735eeffbee043.tar.bz2 scala-eecb5e5c4cdc96c2ea4e58a0c4b735eeffbee043.zip |
added early field initialization.
Diffstat (limited to 'src/compiler/scala/tools/nsc/transform/Constructors.scala')
-rw-r--r-- | src/compiler/scala/tools/nsc/transform/Constructors.scala | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/Constructors.scala b/src/compiler/scala/tools/nsc/transform/Constructors.scala index d9355bf24e..71f9c9d828 100644 --- a/src/compiler/scala/tools/nsc/transform/Constructors.scala +++ b/src/compiler/scala/tools/nsc/transform/Constructors.scala @@ -120,7 +120,25 @@ abstract class Constructors extends Transform { val defBuf = new ListBuffer[Tree] val constrStatBuf = new ListBuffer[Tree] val constrPrefixBuf = new ListBuffer[Tree] - constrBody.stats foreach (constrStatBuf +=) + val presupers = treeInfo.preSuperFields(stats) + for (val stat <- constrBody.stats) { + constrStatBuf += stat + stat match { + case ValDef(mods, name, _, _) if (mods hasFlag PRESUPER) => + constrStatBuf += + localTyper.typed { + atPos(stat.pos) { + val fields = presupers filter ( + vdef => nme.localToGetter(vdef.name) == name) + assert(fields.length == 1) + Assign( + gen.mkAttributedRef(clazz.thisType, fields.head.symbol), + Ident(stat.symbol)) + } + } + case _ => + } + } for (val stat <- stats) stat match { case DefDef(mods, name, tparams, vparamss, tpt, rhs) => |