summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpaltherr <paltherr@epfl.ch>2004-05-17 15:13:04 +0000
committerpaltherr <paltherr@epfl.ch>2004-05-17 15:13:04 +0000
commit6e8fe0a8c73606122fcfdb9557eaa1ea34d03eb5 (patch)
tree797ffd1e32aece329a3a99049aca3457a9e2d9b5
parent4db594575a43d855364ec22b3244a11b0b2ccb21 (diff)
downloadscala-6e8fe0a8c73606122fcfdb9557eaa1ea34d03eb5.tar.gz
scala-6e8fe0a8c73606122fcfdb9557eaa1ea34d03eb5.tar.bz2
scala-6e8fe0a8c73606122fcfdb9557eaa1ea34d03eb5.zip
- Added optimization/hack in case If and Switch...
- Added optimization/hack in case If and Switch to compute type of new tree
-rw-r--r--sources/scalac/ast/Transformer.java.tmpl16
1 files changed, 14 insertions, 2 deletions
diff --git a/sources/scalac/ast/Transformer.java.tmpl b/sources/scalac/ast/Transformer.java.tmpl
index ff70a542be..d38847dfcd 100644
--- a/sources/scalac/ast/Transformer.java.tmpl
+++ b/sources/scalac/ast/Transformer.java.tmpl
@@ -222,13 +222,25 @@ public class GenTransformer {
cond = transform(cond);
thenp = transform(thenp);
elsep = transform(elsep);
- return gen.If(tree.pos, cond, thenp, elsep);
+ Type type = tree.type();
+ global.nextPhase();
+ boolean reuse = type.isSameAs(global.definitions.ANY_TYPE());
+ global.prevPhase();
+ return reuse
+ ? gen.If(tree.pos, cond, thenp, elsep, type)
+ : gen.If(tree.pos, cond, thenp, elsep);
case Switch(Tree test, int[] tags, Tree[] bodies, Tree otherwise):
test = transform(test);
bodies = transform(bodies);
otherwise = transform(otherwise);
- return gen.Switch(tree.pos, test, tags, bodies, otherwise);
+ Type type = tree.type();
+ global.nextPhase();
+ boolean reuse = type.isSameAs(global.definitions.ANY_TYPE());
+ global.prevPhase();
+ return reuse
+ ? gen.Switch(tree.pos, test, tags, bodies, otherwise, type)
+ : gen.Switch(tree.pos, test, tags, bodies, otherwise);
case Return(Tree expr):
Symbol symbol = getSymbolFor(tree);