aboutsummaryrefslogtreecommitdiff
path: root/src/share/classes/com/sun/tools/javac/jvm/Gen.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/share/classes/com/sun/tools/javac/jvm/Gen.java')
-rw-r--r--src/share/classes/com/sun/tools/javac/jvm/Gen.java62
1 files changed, 16 insertions, 46 deletions
diff --git a/src/share/classes/com/sun/tools/javac/jvm/Gen.java b/src/share/classes/com/sun/tools/javac/jvm/Gen.java
index 0bf2b9e9..74a9fa82 100644
--- a/src/share/classes/com/sun/tools/javac/jvm/Gen.java
+++ b/src/share/classes/com/sun/tools/javac/jvm/Gen.java
@@ -74,6 +74,7 @@ public class Gen extends JCTree.Visitor {
private Name accessDollar;
private final Types types;
private final Lower lower;
+ private final Flow flow;
/** Switch: GJ mode?
*/
@@ -125,6 +126,7 @@ public class Gen extends JCTree.Visitor {
stringBufferAppend = new HashMap<Type,Symbol>();
accessDollar = names.
fromString("access" + target.syntheticNameChar());
+ flow = Flow.instance(context);
lower = Lower.instance(context);
Options options = Options.instance(context);
@@ -2516,9 +2518,7 @@ public class Gen extends JCTree.Visitor {
*/
if (varDebugInfo && (cdef.sym.flags() & SYNTHETIC) == 0) {
try {
- LVTAssignAnalyzer lvtAssignAnalyzer = LVTAssignAnalyzer.make(
- lvtRanges, syms, names);
- lvtAssignAnalyzer.analyzeTree(localEnv);
+ new LVTAssignAnalyzer().analyzeTree(localEnv);
} catch (Throwable e) {
throw e;
}
@@ -2609,11 +2609,10 @@ public class Gen extends JCTree.Visitor {
}
}
- static class LVTAssignAnalyzer
+ class LVTAssignAnalyzer
extends Flow.AbstractAssignAnalyzer<LVTAssignAnalyzer.LVTAssignPendingExit> {
final LVTBits lvtInits;
- final LVTRanges lvtRanges;
/* This class is anchored to a context dependent tree. The tree can
* vary inside the same instruction for example in the switch instruction
@@ -2621,35 +2620,12 @@ public class Gen extends JCTree.Visitor {
* to a given case. The aim is to always anchor the bits to the tree
* capable of closing a DA range.
*/
- static class LVTBits extends Bits {
-
- enum BitsOpKind {
- INIT,
- CLEAR,
- INCL_BIT,
- EXCL_BIT,
- ASSIGN,
- AND_SET,
- OR_SET,
- DIFF_SET,
- XOR_SET,
- INCL_RANGE,
- EXCL_RANGE,
- }
+ class LVTBits extends Bits {
JCTree currentTree;
- LVTAssignAnalyzer analyzer;
private int[] oldBits = null;
BitsState stateBeforeOp;
- LVTBits() {
- super(false);
- }
-
- LVTBits(int[] bits, BitsState initState) {
- super(bits, initState);
- }
-
@Override
public void clear() {
generalOp(null, -1, BitsOpKind.CLEAR);
@@ -2757,12 +2733,11 @@ public class Gen extends JCTree.Visitor {
if (currentTree != null &&
stateBeforeOp != BitsState.UNKNOWN &&
trackTree(currentTree)) {
- List<VarSymbol> locals =
- analyzer.lvtRanges
- .getVars(analyzer.currentMethod, currentTree);
+ List<VarSymbol> locals = lvtRanges
+ .getVars(currentMethod, currentTree);
locals = locals != null ?
locals : List.<VarSymbol>nil();
- for (JCVariableDecl vardecl : analyzer.vardecls) {
+ for (JCVariableDecl vardecl : vardecls) {
//once the first is null, the rest will be so.
if (vardecl == null) {
break;
@@ -2772,7 +2747,7 @@ public class Gen extends JCTree.Visitor {
}
}
if (!locals.isEmpty()) {
- analyzer.lvtRanges.setEntry(analyzer.currentMethod,
+ lvtRanges.setEntry(currentMethod,
currentTree, locals);
}
}
@@ -2790,7 +2765,7 @@ public class Gen extends JCTree.Visitor {
boolean trackVar(VarSymbol var) {
return (var.owner.kind == MTH &&
(var.flags() & PARAMETER) == 0 &&
- analyzer.trackable(var));
+ trackable(var));
}
boolean trackTree(JCTree tree) {
@@ -2806,7 +2781,8 @@ public class Gen extends JCTree.Visitor {
}
- public class LVTAssignPendingExit extends Flow.AssignAnalyzer.AssignPendingExit {
+ public class LVTAssignPendingExit extends
+ Flow.AbstractAssignAnalyzer<LVTAssignPendingExit>.AbstractAssignPendingExit {
LVTAssignPendingExit(JCTree tree, final Bits inits, final Bits uninits) {
super(tree, inits, uninits);
@@ -2819,16 +2795,10 @@ public class Gen extends JCTree.Visitor {
}
}
- private LVTAssignAnalyzer(LVTRanges lvtRanges, Symtab syms, Names names) {
- super(new LVTBits(), syms, names, false);
- lvtInits = (LVTBits)inits;
- this.lvtRanges = lvtRanges;
- }
-
- public static LVTAssignAnalyzer make(LVTRanges lvtRanges, Symtab syms, Names names) {
- LVTAssignAnalyzer result = new LVTAssignAnalyzer(lvtRanges, syms, names);
- result.lvtInits.analyzer = result;
- return result;
+ private LVTAssignAnalyzer() {
+ flow.super();
+ lvtInits = new LVTBits();
+ inits = lvtInits;
}
@Override