summaryrefslogtreecommitdiff
path: root/sources/scalac
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2003-03-05 13:27:12 +0000
committerMartin Odersky <odersky@gmail.com>2003-03-05 13:27:12 +0000
commita0058802194eb743f9413cc3abfa60c5bedb58e5 (patch)
treeb5f5f462048064b7315d9ae3c54264fc6e398ba5 /sources/scalac
parent3d7e4fa518125107d00ff75132cb106f002443d0 (diff)
downloadscala-a0058802194eb743f9413cc3abfa60c5bedb58e5.tar.gz
scala-a0058802194eb743f9413cc3abfa60c5bedb58e5.tar.bz2
scala-a0058802194eb743f9413cc3abfa60c5bedb58e5.zip
*** empty log message ***
Diffstat (limited to 'sources/scalac')
-rw-r--r--sources/scalac/ast/Tree.java11
-rw-r--r--sources/scalac/ast/parser/Parser.java8
-rw-r--r--sources/scalac/typechecker/Analyzer.java5
-rw-r--r--sources/scalac/typechecker/DeSugarize.java13
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));
}
}