All pastes #465255 Raw Edit

Mine

public text v1 · immutable
#465255 ·published 2007-04-30 01:20 UTC
rendered paste body
Effect:

        [(if ,test ,[c-code*] (nop)) ; one-armed if pattern
         (let ([join-label (unique-label 'join)])
           (let ([t-code* (Pred test #f altern-label)])
             `(,t-code* ...
               ,c-code* ...
               ,join-label)))]
          
        [(if ,test ,[c-code*] ,[a-code*])
         (let ([altern-label (unique-label 'altern)]
               [join-label (unique-label 'join)])
           (let ([t-code* (Pred test #f altern-label)])
             `(,t-code* ...
               ,c-code* ...
               (jump (label ,join-label))
               ,altern-label
               ,a-code* ...
               ,join-label)))]

Pred:

        [(true) 
         (if true-label
             `((jump (label ,true-label)))
             '())]
        [(false) 
         (if false-label
             `((jump (label ,false-label)))
             '())]

[(if ,test ,conseq ,[a-code*]) 
         (let ([altern-label (unique-label 'altern)]
               [join-label (unique-label 'join)])           
           (let ([t-code* (Pred test #f altern-label)]
                 [c-code* (Pred conseq true-label false-label)])
             `(,t-code* ...
               ,c-code* ...
               (jump (label ,join-label))
               ,altern-label
               ,a-code* ...
               ,join-label)))]  




Tail: 

[(if ,test ,[c-code*] ,[a-code*])         
         (let ([altern-label (unique-label 'altern)])
           (let ([t-code* (Pred test #f altern-label)])
             `(,t-code* ...
               ,c-code* ...
               ,altern-label
               ,a-code* ...)))]