44import liquidjava .rj_language .ast .Enum ;
55import liquidjava .rj_language .ast .Expression ;
66import liquidjava .rj_language .ast .FunctionInvocation ;
7+ import liquidjava .rj_language .ast .GroupExpression ;
8+ import liquidjava .rj_language .ast .Ite ;
79import liquidjava .rj_language .ast .UnaryExpression ;
810import liquidjava .rj_language .ast .Var ;
911import liquidjava .rj_language .opt .derivation_node .BinaryDerivationNode ;
@@ -101,6 +103,28 @@ private static ValDerivationNode propagateRecursive(Expression exp, Map<String,
101103 : new ValDerivationNode (cloned , null );
102104 }
103105
106+ // lift ternary origin
107+ if (exp instanceof Ite ite ) {
108+ ValDerivationNode condition = propagateRecursive (ite .getCondition (), subs , varOrigins );
109+ ValDerivationNode thenBranch = propagateRecursive (ite .getThen (), subs , varOrigins );
110+ ValDerivationNode elseBranch = propagateRecursive (ite .getElse (), subs , varOrigins );
111+ Ite cloned = (Ite ) ite .clone ();
112+ cloned .setChild (0 , condition .getValue ());
113+ cloned .setChild (1 , thenBranch .getValue ());
114+ cloned .setChild (2 , elseBranch .getValue ());
115+
116+ return (condition .getOrigin () != null || thenBranch .getOrigin () != null || elseBranch .getOrigin () != null )
117+ ? new ValDerivationNode (cloned , new IteDerivationNode (condition , thenBranch , elseBranch ))
118+ : new ValDerivationNode (cloned , null );
119+ }
120+
121+ if (exp instanceof GroupExpression group && group .getChildren ().size () == 1 ) {
122+ ValDerivationNode child = propagateRecursive (group .getExpression (), subs , varOrigins );
123+ GroupExpression cloned = (GroupExpression ) group .clone ();
124+ cloned .setChild (0 , child .getValue ());
125+ return new ValDerivationNode (cloned , child .getOrigin ());
126+ }
127+
104128 // recursively propagate children
105129 if (exp .hasChildren ()) {
106130 Expression propagated = exp .clone ();
@@ -163,4 +187,4 @@ private static void extractVarOrigins(ValDerivationNode node, Map<String, Deriva
163187 extractVarOrigins (valOrigin , varOrigins );
164188 }
165189 }
166- }
190+ }
0 commit comments