diff options
author | paltherr <paltherr@epfl.ch> | 2004-05-17 15:13:04 +0000 |
---|---|---|
committer | paltherr <paltherr@epfl.ch> | 2004-05-17 15:13:04 +0000 |
commit | 6e8fe0a8c73606122fcfdb9557eaa1ea34d03eb5 (patch) | |
tree | 797ffd1e32aece329a3a99049aca3457a9e2d9b5 /sources | |
parent | 4db594575a43d855364ec22b3244a11b0b2ccb21 (diff) | |
download | scala-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
Diffstat (limited to 'sources')
-rw-r--r-- | sources/scalac/ast/Transformer.java.tmpl | 16 |
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); |