summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sources/scala/tools/scalac/typechecker/Analyzer.scala6
-rw-r--r--sources/scala/tools/scalac/typechecker/DeSugarize.scala18
-rw-r--r--sources/scalac/Global.java5
-rw-r--r--sources/scalac/Unit.java6
-rw-r--r--sources/scalac/ast/TreeGen.java2
-rw-r--r--sources/scalac/transformer/LambdaLift.java2
-rw-r--r--sources/scalac/transformer/matching/PatternTool.java2
7 files changed, 20 insertions, 21 deletions
diff --git a/sources/scala/tools/scalac/typechecker/Analyzer.scala b/sources/scala/tools/scalac/typechecker/Analyzer.scala
index e1e878fb8b..95cf3f1140 100644
--- a/sources/scala/tools/scalac/typechecker/Analyzer.scala
+++ b/sources/scala/tools/scalac/typechecker/Analyzer.scala
@@ -1184,7 +1184,7 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
// enter all members
pushContext(templ, clazz, members);
- templ.body = desugarize.Statements(templ.body, false);
+ templ.body = desugarize.Statements(unit, templ.body, false);
enterSyms(templ.body);
popContext();
templ.setType(Type.compoundType(parents, members, clazz));
@@ -2154,7 +2154,7 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
tree match {
case Tree$Block(stats, value) =>
pushContext(tree, context.owner, new Scope(context.scope));
- val stats1 = desugarize.Statements(stats, true);
+ val stats1 = desugarize.Statements(unit, stats, true);
enterSyms(stats1);
context.imports = context.outer.imports;
val curmode: int = mode;
@@ -2245,7 +2245,7 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
error(tree.pos, "expected pattern type of cases could not be determined");
}
} else {
- transform(desugarize.Visitor(tree))
+ transform(desugarize.Visitor(unit, tree))
}
case Tree$Assign(Tree$Apply(_, _), _) =>
diff --git a/sources/scala/tools/scalac/typechecker/DeSugarize.scala b/sources/scala/tools/scalac/typechecker/DeSugarize.scala
index 6f0e93e9a3..d4a5c84297 100644
--- a/sources/scala/tools/scalac/typechecker/DeSugarize.scala
+++ b/sources/scala/tools/scalac/typechecker/DeSugarize.scala
@@ -14,7 +14,7 @@ import scalac.util._;
import scalac.symtab._;
import scalac.ast._;
import scalac.typechecker.Infer;
-import scalac.{Global => scalac_Global}
+import scalac.{Global => scalac_Global, Unit => scalac_Unit}
import scala.tools.scalac.ast.printer.TextTreePrinter;
import scala.tools.scalac.util.NewArray;
@@ -32,8 +32,6 @@ class DeSugarize(make: TreeFactory, copy: TreeCopier, gen: TreeGen, infer: scala
import Kinds._, Modifiers._;
import scalac.ast.TreeList;
- protected final val freshNameCreator = global.freshNameCreator;
-
def this(analyzer: Analyzer, global: scalac_Global) =
this(analyzer.make, analyzer.copy, analyzer.gen, analyzer.infer, global);
@@ -41,7 +39,7 @@ class DeSugarize(make: TreeFactory, copy: TreeCopier, gen: TreeGen, infer: scala
/** introduce fresh variable of the form "ds$56"
*/
- def getvar(): Name = freshNameCreator.newName("ds", '$');
+ def getvar(unit: scalac_Unit): Name = unit.fresh.newName("ds", '$');
def setterName(name: Name): Name = Name.fromString(name.toString() + Names._EQ);
@@ -201,9 +199,9 @@ class DeSugarize(make: TreeFactory, copy: TreeCopier, gen: TreeGen, infer: scala
* only called when match has to be added
* no type for parameter x
*/
- def Visitor(tree: Tree): Tree = tree match {
+ def Visitor(unit: scalac_Unit, tree: Tree): Tree = tree match {
case Tree$Visitor(cases) =>
- val x: Name = getvar();
+ val x: Name = getvar(unit);
val param: Tree$ValDef = make.ValDef(
tree.pos, PARAM, x, Tree.Empty, Tree.Empty);
val xuse: Tree = make.Ident(tree.pos, x);
@@ -260,7 +258,7 @@ class DeSugarize(make: TreeFactory, copy: TreeCopier, gen: TreeGen, infer: scala
/** expand pattern definitions and variable definitions in templates.
*/
- def Statements(stats: Array[Tree], isLocal: boolean): Array[Tree] = {
+ def Statements(unit: scalac_Unit, stats: Array[Tree], isLocal: boolean): Array[Tree] = {
var change: boolean = false;
var i = 0;
while (i < stats.length && !change) {
@@ -279,7 +277,7 @@ class DeSugarize(make: TreeFactory, copy: TreeCopier, gen: TreeGen, infer: scala
val stat = unboxDocDef(stats(i));
stat match {
case Tree$PatDef(_, _, _) =>
- ts.append(boxDocDef(Statements(this.PatDef(stat), isLocal), stats(i)));
+ ts.append(boxDocDef(Statements(unit, this.PatDef(unit, stat), isLocal), stats(i)));
case Tree$ValDef(_, _, _, _) =>
if (isLocal) ts.append(stats(i))
else ts.append(boxDocDef(this.ValDef(stat), stats(i)));
@@ -355,7 +353,7 @@ class DeSugarize(make: TreeFactory, copy: TreeCopier, gen: TreeGen, infer: scala
* val x_N = t$._N
*
*/
- def PatDef(tree: Tree): Array[Tree] = tree match {
+ def PatDef(unit: scalac_Unit, tree: Tree): Array[Tree] = tree match {
case Tree$PatDef(mods, Tree$Ident(name), rhs) =>
// val x = e ==> val x = e
NewArray.Tree(make.ValDef(tree.pos, mods, name, Tree.Empty, rhs))
@@ -397,7 +395,7 @@ class DeSugarize(make: TreeFactory, copy: TreeCopier, gen: TreeGen, infer: scala
NewArray.Tree(valdef)
} else {
// t$
- val vble: Name = getvar();
+ val vble: Name = getvar(unit);
// private synthetic val t$ = e.match (case p => (x_1, ..., x_N))
val res = new Array[Tree](vars.length + 1);
diff --git a/sources/scalac/Global.java b/sources/scalac/Global.java
index a45a1aeac8..156a475fbc 100644
--- a/sources/scalac/Global.java
+++ b/sources/scalac/Global.java
@@ -101,10 +101,6 @@ public abstract class Global {
*/
public final TreeFactory make;
- /** the fresh name creator
- */
- public final FreshNameCreator freshNameCreator;
-
/** the tree generator
*/
public final TreeGen treeGen;
@@ -264,7 +260,6 @@ public abstract class Global {
error("unknown printer kind: " + args.printer.value);
this.treePrinter = newTextTreePrinter(writer);
}
- this.freshNameCreator = new FreshNameCreator();
this.make = new DefaultTreeFactory();
this.PHASE = args.phases;
// if (!optimize) PHASE.remove(args.phases.OPTIMIZE);
diff --git a/sources/scalac/Unit.java b/sources/scalac/Unit.java
index 5dc7f85089..fd3c77a086 100644
--- a/sources/scalac/Unit.java
+++ b/sources/scalac/Unit.java
@@ -13,6 +13,7 @@ import scala.tools.util.SourceFile;
import scalac.ast.Tree;
import scalac.atree.ARepository;
+import scalac.util.FreshNameCreator;
import java.util.HashMap;
@@ -39,6 +40,10 @@ public class Unit {
*/
public final boolean mixinOnly;
+ /** the fresh name creator
+ */
+ public final FreshNameCreator fresh;
+
/** the content of the compilation unit in tree form
*/
public Tree[] body;
@@ -50,6 +55,7 @@ public class Unit {
this.source = source;
this.console = console;
this.mixinOnly = mixinOnly;
+ this.fresh = new FreshNameCreator();
}
public Unit(Global global, SourceFile source, boolean console) {
diff --git a/sources/scalac/ast/TreeGen.java b/sources/scalac/ast/TreeGen.java
index 33774c5fe3..fced52680f 100644
--- a/sources/scalac/ast/TreeGen.java
+++ b/sources/scalac/ast/TreeGen.java
@@ -1050,7 +1050,7 @@ public class TreeGen implements Kinds, Modifiers, TypeTags {
private Symbol newLocal(Symbol owner, int pos, int flags, String prefix,
Type type)
{
- Name name = global.freshNameCreator.newName(prefix);
+ Name name = Names.LOCAL(owner); // !!! create unique names ?
flags |= Modifiers.SYNTHETIC;
Symbol local = owner.newVariable(pos, flags, name);
global.nextPhase();
diff --git a/sources/scalac/transformer/LambdaLift.java b/sources/scalac/transformer/LambdaLift.java
index 352ec48d62..ea4080a0ef 100644
--- a/sources/scalac/transformer/LambdaLift.java
+++ b/sources/scalac/transformer/LambdaLift.java
@@ -196,7 +196,7 @@ public class LambdaLift extends OwnerTransformer
* If symbol is a class assign same name to its primary constructor.
*/
private void makeUnique(Symbol sym) {
- sym.name = global.freshNameCreator.newName(sym.name);
+ sym.name = unit.fresh.newName(sym.name);
}
private Type.Map traverseTypeMap = new Type.Map() {
diff --git a/sources/scalac/transformer/matching/PatternTool.java b/sources/scalac/transformer/matching/PatternTool.java
index c1e3c73483..91772a0332 100644
--- a/sources/scalac/transformer/matching/PatternTool.java
+++ b/sources/scalac/transformer/matching/PatternTool.java
@@ -40,7 +40,7 @@ abstract class PatternTool {
// constructor
public PatternTool( Unit unit ) {
this.unit = unit;
- this.fresh = unit.global.freshNameCreator;
+ this.fresh = unit.fresh;
this.gen = unit.global.treeGen;
this.defs = unit.global.definitions;
}