aboutsummaryrefslogtreecommitdiff
path: root/src/interp/c-util.boot
diff options
context:
space:
mode:
Diffstat (limited to 'src/interp/c-util.boot')
-rw-r--r--src/interp/c-util.boot4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/interp/c-util.boot b/src/interp/c-util.boot
index 6d770390..05915075 100644
--- a/src/interp/c-util.boot
+++ b/src/interp/c-util.boot
@@ -437,6 +437,8 @@ getSuccessEnvironment(a,e) ==
e := getSuccessEnvironment(form,e)
e
a is ["not",a'] => getInverseEnvironment(a',e)
+ -- Follow temporaries in complex conditionals
+ symbol? a and (T := get(a,"value",e)) => getSuccessEnvironment(T.expr,e)
e
getInverseEnvironment(a,e) ==
@@ -453,6 +455,8 @@ getInverseEnvironment(a,e) ==
put(x,"condition",[newpred,:get(x,"condition",e)],e)
e
a is ["not",a'] => getSuccessEnvironment(a',e)
+ -- Follow temporaries in complex conditionals
+ symbol? a and (T := get(a,"value",e)) => getInverseEnvironment(T.expr,e)
e
++ Give some abstract value to the variable `v' of mode `m' in `e'.