diff options
author | Miguel Garcia <magarcia@epfl.ch> | 2011-03-25 14:40:35 +0000 |
---|---|---|
committer | Miguel Garcia <magarcia@epfl.ch> | 2011-03-25 14:40:35 +0000 |
commit | 70e6dc980f923501733ec1617964f66fcfbceee4 (patch) | |
tree | c35b7eac65e8346251a9fbaea4ff1df36ec7de4c /src | |
parent | 88fd5b92799fb26b12001c84b17781610b1dd59b (diff) | |
download | scala-70e6dc980f923501733ec1617964f66fcfbceee4.tar.gz scala-70e6dc980f923501733ec1617964f66fcfbceee4.tar.bz2 scala-70e6dc980f923501733ec1617964f66fcfbceee4.zip |
for Scala.NET bootstrapping.
forJVM behavior remains unchanged.
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/scala/tools/nsc/transform/CleanUp.scala | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/CleanUp.scala b/src/compiler/scala/tools/nsc/transform/CleanUp.scala index 8d0ecd247b..9980db6ff5 100644 --- a/src/compiler/scala/tools/nsc/transform/CleanUp.scala +++ b/src/compiler/scala/tools/nsc/transform/CleanUp.scala @@ -512,17 +512,31 @@ abstract class CleanUp extends Transform with ast.TreeDSL { * constructor. */ case Template(parents, self, body) => localTyper = typer.atOwner(tree, currentClass) + var savedNewStaticMembers : mutable.Buffer[Tree] = null + var savedNewStaticInits : mutable.Buffer[Tree] = null + var savedSymbolsStoredAsStatic : mutable.Map[String, Symbol] = null + if(forMSIL) { + savedNewStaticMembers = newStaticMembers.clone + savedNewStaticInits = newStaticInits.clone + savedSymbolsStoredAsStatic = symbolsStoredAsStatic.clone + } newStaticMembers.clear newStaticInits.clear symbolsStoredAsStatic.clear - val transformedTemplate: Template = - if (!forMSIL || forMSIL) { - var newBody = - transformTrees(body) - treeCopy.Template(tree, parents, self, transformTrees(newStaticMembers.toList) ::: newBody) - } - else super.transform(tree).asInstanceOf[Template] - addStaticInits(transformedTemplate) // postprocess to include static ctors + val transformedTemplate: Template = { + var newBody = transformTrees(body) + treeCopy.Template(tree, parents, self, transformTrees(newStaticMembers.toList) ::: newBody) + } + val res = addStaticInits(transformedTemplate) // postprocess to include static ctors + newStaticMembers.clear + newStaticInits.clear + symbolsStoredAsStatic.clear + if(forMSIL) { + newStaticMembers ++= savedNewStaticMembers + newStaticInits ++= savedNewStaticInits + symbolsStoredAsStatic ++= savedSymbolsStoredAsStatic + } + res case Literal(c) if (c.tag == ClassTag) && !forMSIL=> val tpe = c.typeValue |