diff options
Diffstat (limited to 'csc/ir1.csc')
| -rw-r--r-- | csc/ir1.csc | 69 |
1 files changed, 45 insertions, 24 deletions
diff --git a/csc/ir1.csc b/csc/ir1.csc index 59911ab..e5fc2dd 100644 --- a/csc/ir1.csc +++ b/csc/ir1.csc @@ -5,6 +5,9 @@ call? constant-expression constant? + define-syntax-name + define-syntax-transformer + define-syntax? if-alternate if-consequent if-test @@ -32,26 +35,29 @@ lexical-set-gensym lexical-set-name lexical-set? + library-define-expression + library-define-library + library-define-name + library-define? + library-ref-library + library-ref-name + library-ref? make-call make-constant + make-define-syntax make-if make-lambda make-lambda-case make-letrec make-lexical-ref make-lexical-set + make-library-define + make-library-ref make-sequence - make-toplevel-define - make-toplevel-ref make-void sequence-head sequence-tail sequence? - toplevel-define-expression - toplevel-define-name - toplevel-define? - toplevel-ref-name - toplevel-ref? void?) (import (scheme base) (only (csc loop) loop return)) @@ -87,12 +93,14 @@ (gensym lexical-ref-gensym)) - ; <toplevel-ref> name - ; A free reference to a top level variable. - (define-record-type <toplevel-ref> - (make-toplevel-ref name) - toplevel-ref? - (name toplevel-ref-name)) + ; <library-ref> name + ; A free reference to a variable in a library. If the library is 'main, + ; then it is a top-level global variable. + (define-record-type <library-ref> + (make-library-ref name library) + library-ref? + (name library-ref-name) + (library library-ref-library)) ; <lexical-set> name gensym expression @@ -105,13 +113,24 @@ (expression lexical-set-expression)) - ; <toplevel-define> name expression + ; <library-define> name expression ; Defines a new variable in the current library. - (define-record-type <toplevel-define> - (make-toplevel-define name expression) - toplevel-define? - (name toplevel-define-name) - (expression toplevel-define-expression)) + (define-record-type <library-define> + (make-library-define name expression library) + library-define? + (name library-define-name) + (expression library-define-expression) + (library library-define-library)) + + + ; <define-syntax> name transformer + ; Defines a new macro in the current environment. name is the name of the + ; macro. transformer is a macro transformer. + (define-record-type <define-syntax> + (make-define-syntax name transformer) + define-syntax? + (name define-syntax-name) + (transformer define-syntax-transformer)) ; <if> test consequent alternate @@ -198,16 +217,18 @@ (equal? (constant-expression x) (constant-expression y))) ((and (lexical-ref? x) (lexical-ref? y)) (symbol=? (lexical-ref-name x) (lexical-ref-name y))) - ((and (toplevel-ref? x) (toplevel-ref? y)) - (symbol=? (toplevel-ref-name x) (toplevel-ref-name y))) + ((and (library-ref? x) (library-ref? y)) + (symbol=? (library-ref-name x) (library-ref-name y)) + (equal? (library-ref-library x) (library-ref-library y))) ((and (lexical-set? x) (lexical-set? y)) (and (symbol=? (lexical-set-name x) (lexical-set-name y)) (ir1=? (lexical-set-expression x) (lexical-set-expression y)))) - ((and (toplevel-define? x) (toplevel-define? y)) + ((and (library-define? x) (library-define? y)) (and - (symbol=? (toplevel-define-name x) (toplevel-define-name y)) - (ir1=? (toplevel-define-expression x) (toplevel-define-expression y)))) + (symbol=? (library-define-name x) (library-define-name y)) + (ir1=? (library-define-expression x) (library-define-expression y)) + (equal? (library-define-library x) (library-define-library y)))) ((and (if? x) (if? y)) (and (ir1=? (if-test x) (if-test y)) |
