removed cached data for each instruction

This commit is contained in:
Svetlana Isakova
2012-12-18 15:40:20 +04:00
parent 207e161bfc
commit 57518c1200
@@ -48,9 +48,6 @@ public class PseudocodeVariablesData {
private final Map<Pseudocode, Set<VariableDescriptor>> declaredVariablesForDeclaration = Maps.newHashMap(); private final Map<Pseudocode, Set<VariableDescriptor>> declaredVariablesForDeclaration = Maps.newHashMap();
private final Map<Pseudocode, Set<VariableDescriptor>> usedVariablesForDeclaration = Maps.newHashMap(); private final Map<Pseudocode, Set<VariableDescriptor>> usedVariablesForDeclaration = Maps.newHashMap();
private Map<Instruction, Edges<Map<VariableDescriptor, VariableInitState>>> variableInitializersMap;
private Map<Instruction, Edges<Map<VariableDescriptor, VariableUseState>>> variableStatusMap;
public PseudocodeVariablesData(@NotNull Pseudocode pseudocode, @NotNull BindingContext bindingContext) { public PseudocodeVariablesData(@NotNull Pseudocode pseudocode, @NotNull BindingContext bindingContext) {
this.pseudocode = pseudocode; this.pseudocode = pseudocode;
this.bindingContext = bindingContext; this.bindingContext = bindingContext;
@@ -127,10 +124,7 @@ public class PseudocodeVariablesData {
@NotNull @NotNull
public Map<Instruction, Edges<Map<VariableDescriptor, VariableInitState>>> getVariableInitializers() { public Map<Instruction, Edges<Map<VariableDescriptor, VariableInitState>>> getVariableInitializers() {
if (variableInitializersMap == null) { return getVariableInitializers(pseudocode);
variableInitializersMap = getVariableInitializers(pseudocode);
}
return variableInitializersMap;
} }
@NotNull @NotNull
@@ -248,15 +242,17 @@ public class PseudocodeVariablesData {
@NotNull @NotNull
public Map<Instruction, Edges<Map<VariableDescriptor, VariableUseState>>> getVariableUseStatusData() { public Map<Instruction, Edges<Map<VariableDescriptor, VariableUseState>>> getVariableUseStatusData() {
if (variableStatusMap == null) {
Map<VariableDescriptor, VariableUseState> sinkInstructionData = Maps.newHashMap(); Map<VariableDescriptor, VariableUseState> sinkInstructionData = Maps.newHashMap();
for (VariableDescriptor usedVariable : usedVariablesForDeclaration.get(pseudocode)) { for (VariableDescriptor usedVariable : getUsedVariables(pseudocode)) {
sinkInstructionData.put(usedVariable, VariableUseState.UNUSED); sinkInstructionData.put(usedVariable, VariableUseState.UNUSED);
} }
InstructionDataMergeStrategy<Map<VariableDescriptor, VariableUseState>> collectVariableUseStatusStrategy = new InstructionDataMergeStrategy<Map<VariableDescriptor, VariableUseState>>() { InstructionDataMergeStrategy<Map<VariableDescriptor, VariableUseState>> collectVariableUseStatusStrategy =
new InstructionDataMergeStrategy<Map<VariableDescriptor, VariableUseState>>() {
@Override @Override
public Edges<Map<VariableDescriptor, VariableUseState>> execute(@NotNull Instruction instruction, public Edges<Map<VariableDescriptor, VariableUseState>> execute(
@NotNull Collection<Map<VariableDescriptor, VariableUseState>> incomingEdgesData) { @NotNull Instruction instruction,
@NotNull Collection<Map<VariableDescriptor, VariableUseState>> incomingEdgesData
) {
Map<VariableDescriptor, VariableUseState> enterResult = Maps.newHashMap(); Map<VariableDescriptor, VariableUseState> enterResult = Maps.newHashMap();
for (Map<VariableDescriptor, VariableUseState> edgeData : incomingEdgesData) { for (Map<VariableDescriptor, VariableUseState> edgeData : incomingEdgesData) {
@@ -294,12 +290,10 @@ public class PseudocodeVariablesData {
return Edges.create(enterResult, exitResult); return Edges.create(enterResult, exitResult);
} }
}; };
variableStatusMap = PseudocodeTraverser.collectData(pseudocode, BACKWARD, ANALYSE_LOCAL_DECLARATIONS, return PseudocodeTraverser.collectData(pseudocode, BACKWARD, ANALYSE_LOCAL_DECLARATIONS,
Collections.<VariableDescriptor, VariableUseState>emptyMap(), Collections.<VariableDescriptor, VariableUseState>emptyMap(),
sinkInstructionData, collectVariableUseStatusStrategy); sinkInstructionData, collectVariableUseStatusStrategy);
} }
return variableStatusMap;
}
public static class VariableInitState { public static class VariableInitState {
public final boolean isInitialized; public final boolean isInitialized;