Skip to content

Commit cda1d1d

Browse files
committed
Only Flatten Same Instance Variables
1 parent c8201e2 commit cda1d1d

File tree

2 files changed

+9
-3
lines changed

2 files changed

+9
-3
lines changed

liquidjava-verifier/src/main/java/liquidjava/rj_language/opt/ConstantPropagation.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import liquidjava.rj_language.opt.derivation_node.UnaryDerivationNode;
1010
import liquidjava.rj_language.opt.derivation_node.ValDerivationNode;
1111
import liquidjava.rj_language.opt.derivation_node.VarDerivationNode;
12+
import liquidjava.utils.Utils;
1213

1314
import java.util.HashMap;
1415
import java.util.Map;
@@ -139,11 +140,10 @@ private static void extractVarOrigins(ValDerivationNode node, Map<String, Deriva
139140
}
140141

141142
/**
142-
* Flattens variable derivations to avoid redundancy by collapsing var -> var chains If the origin is a
143-
* VarDerivationNode, we use its variable name and origin instead
143+
* Flattens same instance variable derivations to avoid redundancy by collapsing var -> var chains
144144
*/
145145
private static VarDerivationNode flattenVarOrigin(String varName, DerivationNode origin) {
146-
if (origin instanceof VarDerivationNode varOrigin) {
146+
if (origin instanceof VarDerivationNode varOrigin && Utils.isSameVariable(varOrigin.getVar(), varName)) {
147147
return flattenVarOrigin(varOrigin.getVar(), varOrigin.getOrigin()); // recursively flatten
148148
}
149149
return origin != null ? new VarDerivationNode(varName, origin) : new VarDerivationNode(varName);

liquidjava-verifier/src/main/java/liquidjava/utils/Utils.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,10 @@ public static SourcePosition getRefinementAnnotationPosition(CtElement element,
4242
return unquoted.equals(refinement);
4343
}).findFirst().map(CtElement::getPosition).orElse(element.getPosition());
4444
}
45+
46+
public static boolean isSameVariable(String var1, String var2) {
47+
String name1 = var1.substring(0, var1.lastIndexOf('_'));
48+
String name2 = var2.substring(0, var2.lastIndexOf('_'));
49+
return name1.equals(name2);
50+
}
4551
}

0 commit comments

Comments
 (0)