--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Gen.java Tue Sep 09 12:16:25 2014 -0400
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Gen.java Tue Sep 09 10:43:06 2014 -0700
@@ -74,6 +74,7 @@
private Name accessDollar;
private final Types types;
private final Lower lower;
+ private final Flow flow;
/** Format of stackmap tables to be generated. */
private final Code.StackMapFormat stackMap;
@@ -113,6 +114,7 @@
stringBufferAppend = new HashMap<>();
accessDollar = names.
fromString("access" + target.syntheticNameChar());
+ flow = Flow.instance(context);
lower = Lower.instance(context);
Options options = Options.instance(context);
@@ -2383,9 +2385,7 @@
*/
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;
}
@@ -2476,11 +2476,10 @@
}
}
- 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
@@ -2488,35 +2487,12 @@
* 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);
@@ -2624,12 +2600,11 @@
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;
@@ -2639,7 +2614,7 @@
}
}
if (!locals.isEmpty()) {
- analyzer.lvtRanges.setEntry(analyzer.currentMethod,
+ lvtRanges.setEntry(currentMethod,
currentTree, locals);
}
}
@@ -2657,7 +2632,7 @@
boolean trackVar(VarSymbol var) {
return (var.owner.kind == MTH &&
(var.flags() & PARAMETER) == 0 &&
- analyzer.trackable(var));
+ trackable(var));
}
boolean trackTree(JCTree tree) {
@@ -2673,7 +2648,8 @@
}
- 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);
@@ -2686,16 +2662,10 @@
}
}
- 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