File: interfaces.scm

package info (click to toggle)
scheme48 1.8%2Bdfsg-1%2Bdeb7u1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 14,984 kB
file content (260 lines) | stat: -rw-r--r-- 6,998 bytes parent folder | download | duplicates (4)
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
; Copyright (c) 1993-2008 by Richard Kelsey.  See file COPYING.


(define-interface utilities-interface
  (export bug
          user-error
          user-warning
          true false
          or-map
          remove-similar-elts
          select-from-table
          table->list table->entry-list
          table-push table-pop
          merge-lists
          vector-every?
          make-ignorable
          sub-vector->list
          flag-assq

          enforce
          writec
          mem?
          walk-vector
          vector-replace
          copy-list
          copy-vector
          symbol-hash
          string-hash
          char->ascii
          object-hash
          union intersection set-difference

          make-xvector xvector-length xvector-ref xvector-set! xvector->vector

          (define-subrecord :syntax)
          ;(define-simple-record-type :syntax)
          (define-local-syntax :syntax)
          ))

(define-interface primop-interface
  (export primop? make-primop make-proc-primop make-conditional-primop
          all-primops get-primop

          primop-id primop-trivial? primop-side-effects
          primop-cost
          simplify-call
          primop-procedure? primop-call-index
          primop-conditional?
          expand-to-conditional
          simplify-conditional?
          primop-code-data set-primop-code-data!
	  trivial-call-return-type

	  (primop :syntax)
          ))

(define-interface variable-interface
  (export variable? make-variable
          global-variable? make-global-variable
          variable-name set-variable-name!
          variable-id
          variable-type   set-variable-type!
          variable-binder set-variable-binder!
          variable-refs   set-variable-refs!
          variable-flag   set-variable-flag!
          variable-flags  set-variable-flags!
	  variable-generate set-variable-generate!
          erase-variable
          variable-index copy-variable used? unused?
          variable-known-value
	  add-variable-known-value!
	  remove-variable-known-value!
          variable-simplifier
	  add-variable-simplifier!
	  remove-variable-simplifier!
	  note-known-global-lambda!
	  variable-known-lambda
          ))

(define-interface node-interface
  (compound-interface
   primop-interface
   variable-interface
   (export reset-node-id node-hash node-unhash

           node? node-variant
           node-parent set-node-parent!
           node-index set-node-index!
           node-simplified? set-node-simplified?!
           node-flag set-node-flag!

           empty empty? proclaim-empty

           erase

           detach detach-body
           attach attach-body
           move move-body
           insert-body
           replace replace-body
	   connect-sequence

           mark-changed

           leaf-node?
          
           literal-node? make-literal-node
           literal-value set-literal-value!
           literal-type  set-literal-type!
           copy-literal-node

           reference-node? make-reference-node
           reference-variable set-reference-variable!

           call-node? make-call-node
           call-primop set-call-primop!
           call-args set-call-args!
           call-exits set-call-exits!
           call-source set-call-source!
           call-arg call-arg-count

           lambda-node? make-lambda-node
           lambda-body set-lambda-body!
           lambda-variables set-lambda-variables!
           lambda-name set-lambda-name!
           lambda-id
           lambda-type
           lambda-block set-lambda-block!
	   lambda-env set-lambda-env!
           lambda-protocol set-lambda-protocol!
           lambda-source set-lambda-source!
           lambda-variable-count
           calls-known? set-calls-known?!
	   proc-lambda?

           initialize-lambdas add-lambda add-lambdas
           change-lambda-type
           walk-lambdas make-lambda-list
          
           loc/owner loc/type loc/rep
           set/owner set/type set/rep set/value

           node-base containing-procedure
           trivial? nontrivial?
           nontrivial-ancestor
           calls-this-primop?
           bound-to-variable
           walk-refs-safely
           small-node?
           side-effects?
           called-node? called-node
           called-lambda
           get-lambda-value
           ;set-reference?

           attach-call-args remove-call-args replace-call-args
           remove-null-arguments
           shorten-call-args insert-call-arg remove-call-arg
           append-call-arg

           remove-body

	   put-in-letrec make-letrec

           remove-lambda-variable remove-variable remove-unused-variables

           substitute substitute-vars-in-node-tree
           replace-call-with-value

           copy-node-tree

           mark-ancestors marked-ancestor? unmarked-ancestor?
           node-ancestor? marked-ancestor least-common-ancestor
           proc-ancestor

           hoistable-node?

           find-scoping

           ((let-nodes new-lambda new-call) :syntax)

           node-equal?

           no-free-references?

	   find-calls

	   node-type

           the-undefined-value
           undefined-value?
           undefined-value-node?
           make-undefined-literal
           )))

(define-interface simplify-internal-interface
  (export simplify-node
          default-simplifier
	  simplify-arg
          simplify-args
          simplify-lambda-body
	  simplify-known-lambda
          
          (pattern-simplifier :syntax)

          simplify-allocation
          simplify-known-call
          simplify-known-tail-call
          simplify-unknown-call
          simplify-return
          simplify-jump
          ; simplify-undefined-value
          simplify-test expand-test simplify-test?
          ))

(define-interface front-debug-interface
  (export debug-breakpoint
          add-checks add-check clear-checks clear-check
          add-procs add-proc clear-procs clear-proc))

(define-interface front-interface
  (export simplify-all
          integrate-jump-procs!  ; for debugging
          ))

(define-interface annotated-read-interface
  (export read-and-annotate
          pair-annotation
          annotated-cons
          annotation?
          annotation-file
          annotation-form
          annotation-row
          annotation-column
          ))

(define-interface compiler-byte-vector-interface
  (export make-byte-vector byte-vector? byte-vector-length
          byte-vector-ref  byte-vector-word-ref  byte-vector-half-word-ref
          byte-vector-set! byte-vector-word-set! byte-vector-half-word-set!
          byte-vector-endianess set-byte-vector-endianess!
          ))

(define-interface parameter-interface
  (export lookup-primop
	  lookup-imported-variable
          
          type/unknown
	  type-eq?

          lambda-node-type

          true-value
          false-value

	  determine-lambda-protocol
	  determine-continuation-protocol
          ))