aboutsummaryrefslogtreecommitdiffstats
path: root/csc/ir2.csc
blob: 1542f1e5f6cdb40a305d1216ded9e3afd3abc744 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
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