" Generate NOT code. This is done in a variety of ways. 1) If NOTs arg is a predicate itself and this is a predicate usage (flagged by BRANCH arg), just pass through setting the NOTF arg. 2) If NOTs arg is a predicate but a value is needed, set up a predicate like situation and return NOT of the normal value. 3) Else just compile and complement result." ) (BRANCH <>) (DIR T) "AUX" (P <1 >) (RW .WHERE) (PF >) T1 T2 TT (FLG <>)) #DECL ((NOD P) NODE (TT) DATUM) > > > .P FLUSHED) (ELSE .WHERE)> .NOTF .BRANCH .DIR>>) (> >> > > >) (.BRANCH > > > > .WHERE>> ) (<==? .RW FLUSHED> >) (> FALSE>> FALSE>>> > .WHERE>>) (.PF > > > .P FLUSHED .NOTF .T1 .DIR> > .WHERE> .WHERE> ) (ELSE > > > > > .WHERE> > .WHERE> )> > >> " Generate code for ==?. If types are the same then just compare values, otherwise generate a full comparison." ) (BRANCH <>) (DIR <>) "AUX" (K ) REG REG2 B2 T2OK T2 T1 (T1OK >>) (TYPSAM >>>> .T1OK>) (RW .WHERE) (SDIR .DIR) (FLS <==? .RW FLUSHED>) INA) #DECL ((NOD) NODE (K) ) ,N==?> >)> .T1OK .T2OK " " .NOD>> >> ,QUOTE-CODE> > >> ,QUOTE-CODE> ,SNODES> ,LVAL-CODE> ,LVAL-CODE> >> AC>>>>> > )> > ) (ELSE )>> >> <2 .K> .T1OK .T2OK )> .TYPSAM >)>> .WHERE> .RW>> .RW)>) (ELSE > <2 .K> .T1OK .T2OK .NOTF .TYPSAM .BRANCH> .WHERE> >> > .WHERE> )>> ) AC R1 R2) #DECL ((N1 N2) NODE (R1 R2) DATUM (AC) AC) > > > AC>) ( AC> )> AC> > ,ACPROT T>> ,ACPROT T> > >) (ELSE >>) (.T1 >>) (ELSE >> >>> !>>)> > > ) (.T2
) (ELSE ())>>> >>)> >>> " Generate TYPE? code for all various cases." ) (BRANCH <>) (DIR <>) "AUX" B2 REG (RW .WHERE) (K ) (SDIR .DIR) (FLS <==? .RW FLUSHED>) B3 (TEST? T)) #DECL ((NOD) NODE (K) (REG) DATUM (WHERE BRANCH B2 B3) ANY) FALSE> ) ( FALSE>> )> ;"Type of false indicates always true or false" .FLS> FLUSHED) (ELSE DONT-CARE)>>> >> > > >> <==? <1 .TEST?> 2>>> >>)> ;"In a COND, OR or AND?" >> >> > >)> 2>> <==? <1 .TEST?> 1>>> )> > ) (ELSE <1 .K>> > >)> >> .TEST?> 2>> <==? <1 .TEST?> 1>>>>> )> )>)>>) ( >) ( >>> > > > > ) (ELSE .DIR)> <1 .K>> ) (ELSE <1 .K>> > >> .DIR> >> )>)> .B2>>> .WHERE> ) (ELSE )>) (ELSE 2>> <==? <1 .TEST?> 1>>> .WHERE> )>) (ELSE 2> .WHERE>)>)>) (ELSE > > > 2> <==? <1 .TEST?> 2>>> )) >>> .TY> >>)> > .REG> > > ) (ELSE >> > .WHERE> )>) (ELSE )>> .K>) (ELSE 2>> <==? <1 .TEST?> 1>>> >>> .WHERE> )>) (ELSE >>> .WHERE>)>)>)> > >>>>