diff options
author | paltherr <paltherr@epfl.ch> | 2004-02-12 15:10:40 +0000 |
---|---|---|
committer | paltherr <paltherr@epfl.ch> | 2004-02-12 15:10:40 +0000 |
commit | 2014d1feeefd1bc6bcfee0cee347c4a77db05253 (patch) | |
tree | deffe18f0bf6527171d655885445abc8bb17023b /sources/scalac/backend | |
parent | b62de8dc4f94efa47bf6714865b8bbf4df700046 (diff) | |
download | scala-2014d1feeefd1bc6bcfee0cee347c4a77db05253.tar.gz scala-2014d1feeefd1bc6bcfee0cee347c4a77db05253.tar.bz2 scala-2014d1feeefd1bc6bcfee0cee347c4a77db05253.zip |
- Changed Tree.Block(Tree[]) to Tree.Block(Tree...
- Changed Tree.Block(Tree[]) to Tree.Block(Tree[],Tree)
Diffstat (limited to 'sources/scalac/backend')
-rw-r--r-- | sources/scalac/backend/jvm/GenJVM.java | 15 | ||||
-rw-r--r-- | sources/scalac/backend/msil/GenMSIL.java | 29 |
2 files changed, 13 insertions, 31 deletions
diff --git a/sources/scalac/backend/jvm/GenJVM.java b/sources/scalac/backend/jvm/GenJVM.java index a4a134654e..d808131b36 100644 --- a/sources/scalac/backend/jvm/GenJVM.java +++ b/sources/scalac/backend/jvm/GenJVM.java @@ -234,14 +234,11 @@ class GenJVM { ctx.labels.remove(sym); } break; - case Block(Tree[] stats): { + case Block(Tree[] stats, Tree value): { int statsNum = stats.length; - for (int i = 0; i < statsNum - 1; ++i) + for (int i = 0; i < stats.length; ++i) gen(ctx, stats[i]); - if (statsNum == 0) - maybeGenLoadUnit(ctx, expectedType); - else - genLoad(ctx, stats[stats.length - 1], expectedType); + genLoad(ctx, value, expectedType); generatedType = expectedType; } break; @@ -1276,12 +1273,6 @@ class GenJVM { return args[0]; } else return tree; - case Block(Tree[] stats): - if (stats.length == 2 - && prims.getPrimitive(stats[1].symbol()) == Primitive.BOX) { - return stats[0]; - } else - return tree; default: return tree; } diff --git a/sources/scalac/backend/msil/GenMSIL.java b/sources/scalac/backend/msil/GenMSIL.java index c12cfea8ea..417c4e2592 100644 --- a/sources/scalac/backend/msil/GenMSIL.java +++ b/sources/scalac/backend/msil/GenMSIL.java @@ -326,7 +326,7 @@ public final class GenMSIL { // emit the call to the superconstructor switch (rhs) { - case Block(Tree[] stats): + case Block(Tree[] stats, _): // this is the call to the super constructor drop(gen(stats[0], MSILType.VOID)); break; @@ -346,11 +346,12 @@ public final class GenMSIL { code.Emit(OpCodes.Newobj, ctor); code.Emit(OpCodes.Stsfld, moduleField); switch (rhs) { - case Block(Tree[] stats): + case Block(Tree[] stats, Tree value): int n = stats.length; assert n > 0; for (int i = 1; i < n; i++) drop(gen(stats[i], MSILType.VOID)); + drop(gen(value, MSILType.VOID)); break; } code.Emit(OpCodes.Ret); @@ -396,21 +397,6 @@ public final class GenMSIL { } - /** Generate code for array of trees - */ - Item gen(Tree[] trees) { - int n = trees.length; - if (n == 0) - return items.VoidItem(); - boolean tmpLastStatement = lastStatement; lastStatement = false; - for (int i = 0; i < n-1; i++) { - drop(gen(trees[i], MSILType.VOID)); - } - lastStatement = tmpLastStatement; - return gen(trees[n-1], type2MSILType(trees[n-1].type)); - } - - Item gen(Tree tree) { return gen(tree, type2MSILType(tree.type)); } @@ -452,8 +438,13 @@ public final class GenMSIL { case Empty: return items.VoidItem(); - case Block(Tree[] stats): - return gen(stats); + case Block(Tree[] stats, Tree value): + boolean tmpLastStatement = lastStatement; lastStatement = false; + for (int i = 0; i < stats.length; i++) { + drop(gen(stats[i], MSILType.VOID)); + } + lastStatement = tmpLastStatement; + return gen(value, type2MSILType(value.type)); case ValDef(_, Name name, Tree tpe, Tree rhs): LocalBuilder local = code.DeclareLocal(tc.getType(sym)); |