(define-library (csc ir2) (export %apply %branch %closure %fix %globals %label %primitive %variable *globals* apply-arguments apply-procedure apply? branch-atom branch-false branch-true branch? call-closure-args call-closure-closure call-closure? closure-arguments closure-body closure-name closure-rest closure? fix-body fix-functions fix? globals? label-gensym label? make-apply make-branch make-call-closure make-closure make-fix make-label make-primitive make-variable primitive-arguments primitive-continuation primitive-operation primitive-results primitive? variable-gensym variable? ; Re-exports from IR1. %constant %library-ref constant-expression constant? lexical-ref-gensym lexical-ref-name lexical-ref? lexical-set-expression lexical-set-ref lexical-set? library-ref-library library-ref-name library-ref? make-constant make-lexical-ref make-lexical-set make-library-ref) (import (scheme base) (only (csc ir1) %constant %library-ref constant-expression constant? lexical-ref-gensym lexical-ref-name lexical-ref? lexical-set-expression lexical-set-ref lexical-set? library-ref-library library-ref-name library-ref? make-constant make-lexical-ref make-lexical-set make-library-ref) (only (csc list) all) (only (csc loop) loop return) (only (csc match) define-match-record-type match)) (begin ; This library defines the intermediate representation IR2. ; It's CPS time bitch. ; CPS atom: ; An atom is a value that can be computed immediately without ; any subexpressions. ; Atoms consist of ; - constant, ; - lexical-ref, ; - library-ref, ; - or globals. ; After closure conversion, there are no more lexical refs. ; Each lexical ref will be converted to a . ; A function argument or local variable. (define-match-record-type (make-variable gensym) variable? %variable (gensym variable-gensym)) ; The globals array. This will eventually be stored in register 0. (define-match-record-type (make-globals) globals? %globals) ; A global instance of . ; Considered equal to calling (make-globals). (define *globals* (make-globals)) ; A label, used for function names and will compile to a constant. (define-match-record-type