Skip to content

Commit 135d7d6

Browse files
author
1475505
committed
A2: solve transferNode logic. 51/52
1 parent 0284a85 commit 135d7d6

File tree

1 file changed

+8
-7
lines changed

1 file changed

+8
-7
lines changed

A2/tai-e/src/main/java/pascal/taie/analysis/dataflow/analysis/constprop/ConstantPropagation.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,6 @@ public CPFact newInitialFact() {
8181
@Override
8282
public void meetInto(CPFact fact, CPFact target) {
8383
// TODO - finish me
84-
target.forEach((Var var, Value value) -> {
85-
target.update(var, meetValue(fact.get(var), value));
86-
});
8784
fact.forEach((Var var, Value value) -> {
8885
target.update(var, meetValue(target.get(var), value));
8986
});
@@ -112,12 +109,16 @@ public boolean transferNode(Stmt stmt, CPFact in, CPFact out) {
112109
var gen = stmt.getDef();
113110
CPFact old_out = out.copy();
114111
out.copyFrom(in);
115-
if (gen.isPresent() && gen.get() instanceof Var) {
116-
if (canHoldInt((Var) gen.get()) && ((DefinitionStmt<?, ?>) stmt).getRValue() != null) {
117-
out.update((Var) gen.get(), evaluate(((DefinitionStmt<?, ?>) stmt).getRValue(), in));
112+
if (gen.isPresent() && gen.get() instanceof Var def) {
113+
if (!(stmt instanceof DefinitionStmt<?,?> definitionStmt) || !canHoldInt(def)){
114+
return true;
115+
}
116+
var rValue = definitionStmt.getRValue();
117+
if (rValue != null) {
118+
out.update(def, evaluate(rValue, in));
118119
System.out.println((((DefinitionStmt<?, ?>) stmt).getRValue()).toString());
119120
} else {
120-
out.update((Var) gen.get(), Value.getNAC());
121+
out.update(def, Value.getNAC());
121122
}
122123
System.out.println(stmt.getLineNumber() + " | transferred (old_out:" + old_out.toString() + ")"+ stmt.toString() + " from" + in.toString() + "->" + out.toString());
123124
}

0 commit comments

Comments
 (0)