diff options
author | Martin Odersky <odersky@gmail.com> | 2003-03-05 13:27:12 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2003-03-05 13:27:12 +0000 |
commit | a0058802194eb743f9413cc3abfa60c5bedb58e5 (patch) | |
tree | b5f5f462048064b7315d9ae3c54264fc6e398ba5 | |
parent | 3d7e4fa518125107d00ff75132cb106f002443d0 (diff) | |
download | scala-a0058802194eb743f9413cc3abfa60c5bedb58e5.tar.gz scala-a0058802194eb743f9413cc3abfa60c5bedb58e5.tar.bz2 scala-a0058802194eb743f9413cc3abfa60c5bedb58e5.zip |
*** empty log message ***
-rw-r--r-- | sources/scalac/ast/Tree.java | 11 | ||||
-rw-r--r-- | sources/scalac/ast/parser/Parser.java | 8 | ||||
-rw-r--r-- | sources/scalac/typechecker/Analyzer.java | 5 | ||||
-rw-r--r-- | sources/scalac/typechecker/DeSugarize.java | 13 |
4 files changed, 18 insertions, 19 deletions
diff --git a/sources/scalac/ast/Tree.java b/sources/scalac/ast/Tree.java index a60f6fe8ed..d7e54dfc52 100644 --- a/sources/scalac/ast/Tree.java +++ b/sources/scalac/ast/Tree.java @@ -9,6 +9,7 @@ package scalac.ast; import scalac.ast.printer.*; +import scalac.Global; import scalac.util.Debug; import scalac.util.Name; import scalac.util.Position; @@ -888,4 +889,14 @@ public class Tree { } //######################################################################## + // duplication + + public static Transformer duplicator = + new Transformer( + Global.instance, null, Global.instance.make, + new StrictTreeFactory(Global.instance.make)); + + public Tree duplicate() { + return duplicator.transform(this); + } } diff --git a/sources/scalac/ast/parser/Parser.java b/sources/scalac/ast/parser/Parser.java index 6f2ddb5d0f..2dca2ce14e 100644 --- a/sources/scalac/ast/parser/Parser.java +++ b/sources/scalac/ast/parser/Parser.java @@ -32,13 +32,9 @@ public class Parser implements Tokens { */ TreeFactory make; - final Transformer duplicator; - public Parser(Unit unit) { s = new Scanner(unit); make = unit.global.make; - this.duplicator = new Transformer( - unit.global, null, make, new StrictTreeFactory(make)); } /** this is the general parse method @@ -216,7 +212,7 @@ public class Parser implements Tokens { System.arraycopy(enums, 2, newenums, 1, newenums.length - 1); newenums[0] = make.PatDef( enums[0].pos, mods, pat, - makeFor1(enums[1].pos, Names.filter, duplicator.transform(pat), rhs, enums[1])); + makeFor1(enums[1].pos, Names.filter, pat.duplicate(), rhs, enums[1])); return makeFor(pos, newenums, mapName, flatmapName, body); } default: @@ -946,7 +942,7 @@ public class Parser implements Tokens { rhs.pos, new Tree.CaseDef[]{ (CaseDef)make.CaseDef( - rhs.pos, duplicator.transform(pat), Tree.Empty, + rhs.pos, pat.duplicate(), Tree.Empty, make.Select(rhs.pos, scalaDot(rhs.pos, Names.Boolean), Names.True)), (CaseDef)make.CaseDef( diff --git a/sources/scalac/typechecker/Analyzer.java b/sources/scalac/typechecker/Analyzer.java index 1318cd0aac..99693848ca 100644 --- a/sources/scalac/typechecker/Analyzer.java +++ b/sources/scalac/typechecker/Analyzer.java @@ -27,12 +27,9 @@ public class Analyzer extends Transformer implements Modifiers, Kinds { private final DeSugarize desugarize; private final AnalyzerPhase descr; final Infer infer; - final Transformer duplicator; public Analyzer(Global global, AnalyzerPhase descr) { super(global, descr); - this.duplicator = new Transformer( - global, descr, make, new StrictTreeFactory(make)); this.definitions = global.definitions; this.descr = descr; this.infer = new Infer(this); @@ -1028,7 +1025,7 @@ public class Analyzer extends Transformer implements Modifiers, Kinds { } sym = sym1; sym.flags |= (ACCESSED | SELECTOR); - Tree qual = duplicator.transform(lastimports.importPrefix()); + Tree qual = lastimports.importPrefix().duplicate(); pre = qual.type; //new TextTreePrinter().print(name + " => ").print(lastimports.tree).print("." + name).println().end();//DEBUG tree = make.Select(tree.pos, qual, name); diff --git a/sources/scalac/typechecker/DeSugarize.java b/sources/scalac/typechecker/DeSugarize.java index ea74af72e4..8638e0c45b 100644 --- a/sources/scalac/typechecker/DeSugarize.java +++ b/sources/scalac/typechecker/DeSugarize.java @@ -48,10 +48,6 @@ public class DeSugarize implements Kinds, Modifiers { */ protected final FreshNameCreator freshNameCreator; - /** the tree duplicator - */ - final Transformer duplicator; - /** the constructor */ public DeSugarize(Analyzer analyzer, Global global) { @@ -61,7 +57,6 @@ public class DeSugarize implements Kinds, Modifiers { this.gen = analyzer.gen; this.infer = analyzer.infer; this.freshNameCreator = global.freshNameCreator; - this.duplicator = analyzer.duplicator; } // Auxiliary definitions and functions ------------------------------------------- @@ -260,7 +255,7 @@ public class DeSugarize implements Kinds, Modifiers { make.Ident(tree.pos, x), Names.match), new Tree[]{tree1}); Tree isDefinedAtDef = make.DefDef( tree.pos, 0, Names.isDefinedAt, Tree.ExtTypeDef.EMPTY_ARRAY, - duplicator.transform(vparams), + Tree.duplicator.transform(vparams), gen.mkType(tree.pos, global.definitions.BOOLEAN_TYPE), body1); Tree result = make.New(tree.pos, make.Template( @@ -284,7 +279,7 @@ public class DeSugarize implements Kinds, Modifiers { return make.Visitor(tree.pos, new CaseDef[]{ make.CaseDef(lastCase.pos, - duplicator.transform(lastCase.pat), + lastCase.pat.duplicate(), Tree.Empty, gen.mkBoolean(lastCase.body.pos, true))}); } @@ -294,8 +289,8 @@ public class DeSugarize implements Kinds, Modifiers { case CaseDef(Tree pat, Tree guard, _): cases1[i] = (CaseDef) make.CaseDef( cases[i].pos, - duplicator.transform(pat), - duplicator.transform(guard), + pat.duplicate(), + guard.duplicate(), gen.mkBoolean(tree.pos, true)); } } |