+: if-executor ( env pproc cproc aproc -- res )
+ 2rot 3 2pick 2swap ( env cproc aproc env pproc )
+ evaluate-eproc
+ true? if
+ 2drop evaluate-eproc
+ else
+ 2swap 2drop evaluate-eproc
+ then
+;
+
+: analyze-if ( exp -- eproc )
+ 2dup if-predicate analyze
+ 2swap 2dup if-consequent analyze
+ 2swap if-alternative analyze
+
+ ['] if-executor primitive-proc-type
+ nil cons cons cons cons
+;
+