diff options
-rw-r--r-- | src/interp/compiler.boot | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/interp/compiler.boot b/src/interp/compiler.boot index 7c07df36..ae68d089 100644 --- a/src/interp/compiler.boot +++ b/src/interp/compiler.boot @@ -1208,6 +1208,14 @@ compPredicate(p,E) == [p',m,getSuccessEnvironment(p,E),getInverseEnvironment(p,E)] getSuccessEnvironment(a,e) == + a is ["is",id,m] => + IDENTP id and isDomainForm(m,$EmptyEnvironment) => + e:=put(id,"specialCase",m,e) + currentProplist:= getProplist(id,e) + [.,.,e] := T := comp(m,$EmptyMode,e) or return nil -- duplicates compIs + newProplist:= consProplistOf(id,currentProplist,"value",[m,:rest removeEnv T]) + addBinding(id,newProplist,e) + e a is ["case",x,m] and IDENTP x => put(x,"condition",[a,:get(x,"condition",e)],e) e |