summaryrefslogtreecommitdiff
path: root/sources/scalac/backend
diff options
context:
space:
mode:
authorpaltherr <paltherr@epfl.ch>2004-02-12 15:10:40 +0000
committerpaltherr <paltherr@epfl.ch>2004-02-12 15:10:40 +0000
commit2014d1feeefd1bc6bcfee0cee347c4a77db05253 (patch)
treedeffe18f0bf6527171d655885445abc8bb17023b /sources/scalac/backend
parentb62de8dc4f94efa47bf6714865b8bbf4df700046 (diff)
downloadscala-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.java15
-rw-r--r--sources/scalac/backend/msil/GenMSIL.java29
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));