aboutsummaryrefslogtreecommitdiffstats
path: root/csc/ir2.csc
diff options
context:
space:
mode:
Diffstat (limited to 'csc/ir2.csc')
-rw-r--r--csc/ir2.csc99
1 files changed, 99 insertions, 0 deletions
diff --git a/csc/ir2.csc b/csc/ir2.csc
new file mode 100644
index 0000000..1542f1e
--- /dev/null
+++ b/csc/ir2.csc
@@ -0,0 +1,99 @@
+(define-library (csc ir2)
+ (export
+ lambda-body
+ lambda-case-alternate
+ lambda-case-arguments
+ lambda-case-body
+ lambda-case-gensyms
+ lambda-case-rest
+ lambda-case?
+ make-lambda-case
+
+ ; Re-exports from IR1.
+ lambda?
+ make-lambda
+ call-arguments
+ call-procedure
+ call?
+ constant-expression
+ constant?
+ if-alternate
+ if-consequent
+ if-test
+ if?
+ library-ref-library
+ library-ref-name
+ library-ref-public?
+ library-ref?
+ library-set-expression
+ library-set-library
+ library-set-name
+ library-set-public?
+ library-set?
+ make-call
+ make-constant
+ make-if
+ make-library-ref
+ make-library-set
+ make-sequence
+ make-toplevel-define
+ make-void
+ sequence-head
+ sequence-tail
+ sequence?
+ toplevel-define-expression
+ toplevel-define-name
+ toplevel-define?
+ void?)
+ (import (scheme base)
+ (only (csc ir1)
+ call-arguments
+ call-procedure
+ call?
+ constant-expression
+ constant?
+ if-alternate
+ if-consequent
+ if-test
+ if?
+ lambda-body
+ lambda?
+ library-ref-library
+ library-ref-name
+ library-ref-public?
+ library-ref?
+ library-set-expression
+ library-set-library
+ library-set-name
+ library-set-public?
+ library-set?
+ make-call
+ make-constant
+ make-if
+ make-lambda
+ make-library-ref
+ make-library-set
+ make-sequence
+ make-toplevel-define
+ make-void
+ sequence-head
+ sequence-tail
+ sequence?
+ toplevel-define-expression
+ toplevel-define-name
+ toplevel-define?
+ void?))
+ (begin
+ ; This library defines the intermediate representation IR2.
+ ; It's CPS time bitch.
+
+
+ ; <closure-ref> idx
+ ; Reference to a variable by index in the closure.
+ (define-record-type <closure-ref>
+ (make-closure-ref idx)
+ closure-ref?
+ (idx closure-ref-index))
+
+
+ ; <lambda-case> arguments rest