+ case XPR_CAST:
+ {
+ t2 = exprData_getCastNode (data);
+ DPRINTF (( message ("Examining cast (%q)%s",
+ qtype_unparse (exprData_getCastType (data)),
+ exprNode_unparse (t2) )
+ ));
+ exprNode_exprTraverse (t2, definatelv, definaterv, sequencePoint );
+ }
+ break;
+
+ case XPR_COND:
+ {
+ exprNode pred, trueBranch, falseBranch;
+ llassert(FALSE);
+ pred = exprData_getTriplePred (data);
+ trueBranch = exprData_getTripleTrue (data);
+ falseBranch = exprData_getTripleFalse (data);
+
+ exprNode_exprTraverse (pred, FALSE, TRUE, sequencePoint );
+
+ temp = pred->ensuresConstraints;
+ pred->ensuresConstraints = exprNode_traversEnsuresConstraints(pred);
+ constraintList_free(temp);
+
+ temp = pred->requiresConstraints;
+ pred->requiresConstraints = exprNode_traversRequiresConstraints(pred);
+ constraintList_free(temp);
+
+ temp = pred->trueEnsuresConstraints;
+ pred->trueEnsuresConstraints = exprNode_traversTrueEnsuresConstraints(pred);
+ constraintList_free(temp);
+
+ temp = pred->falseEnsuresConstraints;
+ pred->falseEnsuresConstraints = exprNode_traversFalseEnsuresConstraints(pred);
+ constraintList_free(temp);
+
+
+ exprNode_exprTraverse (trueBranch, FALSE, TRUE, sequencePoint );
+
+ temp = trueBranch->ensuresConstraints;
+ trueBranch->ensuresConstraints = exprNode_traversEnsuresConstraints(trueBranch);
+ constraintList_free(temp);
+
+
+ temp = trueBranch->requiresConstraints;
+ trueBranch->requiresConstraints = exprNode_traversRequiresConstraints(trueBranch);
+ constraintList_free(temp);
+
+
+ temp = trueBranch->trueEnsuresConstraints;
+ trueBranch->trueEnsuresConstraints = exprNode_traversTrueEnsuresConstraints(trueBranch);
+ constraintList_free(temp);
+
+ temp = trueBranch->falseEnsuresConstraints;
+ trueBranch->falseEnsuresConstraints = exprNode_traversFalseEnsuresConstraints(trueBranch);
+ constraintList_free(temp);
+
+ //dfdf
+ exprNode_exprTraverse (falseBranch, FALSE, TRUE, sequencePoint );
+
+ temp = falseBranch->ensuresConstraints;
+ falseBranch->ensuresConstraints = exprNode_traversEnsuresConstraints(falseBranch);
+ constraintList_free(temp);
+
+
+ temp = falseBranch->requiresConstraints;
+ falseBranch->requiresConstraints = exprNode_traversRequiresConstraints(falseBranch);
+ constraintList_free(temp);
+
+
+ temp = falseBranch->trueEnsuresConstraints;
+ falseBranch->trueEnsuresConstraints = exprNode_traversTrueEnsuresConstraints(falseBranch);
+ constraintList_free(temp);
+
+ temp = falseBranch->falseEnsuresConstraints;
+ falseBranch->falseEnsuresConstraints = exprNode_traversFalseEnsuresConstraints(falseBranch);
+ constraintList_free(temp);
+
+ /* if pred is true e equals true otherwise pred equals false */
+
+ cons = constraint_makeEnsureEqual (e, trueBranch, sequencePoint);
+ trueBranch->ensuresConstraints = constraintList_add(trueBranch->ensuresConstraints, cons);
+
+ cons = constraint_makeEnsureEqual (e, trueBranch, sequencePoint);
+ falseBranch->ensuresConstraints = constraintList_add(falseBranch->ensuresConstraints, cons);
+
+ e = doIfElse (e, pred, trueBranch, falseBranch);
+
+ }
+ break;
+ case XPR_COMMA:
+ llassert(FALSE);
+ t1 = exprData_getPairA (data);
+ t2 = exprData_getPairB (data);
+ /* we essiantially treat this like expr1; expr2
+ of course sequencePoint isn't adjusted so this isn't completely accurate
+ problems../ */
+ exprNode_exprTraverse (t1, FALSE, FALSE, sequencePoint );
+ exprNode_exprTraverse (t2, definatelv, definaterv, sequencePoint );
+ exprNode_mergeResolve (e, t1, t2);
+ break;
+