]> gitweb.factorcode.org Git - factor.git/blob - basis/stack-checker/known-words/known-words.factor
VM: let's merge (save-image) and (save-image-and-exit) into one 3
[factor.git] / basis / stack-checker / known-words / known-words.factor
1 ! Copyright (C) 2004, 2011 Slava Pestov, Daniel Ehrenberg.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: fry accessors alien alien.accessors alien.private arrays
4 byte-arrays classes continuations.private effects generic
5 hashtables hashtables.private io io.backend io.files
6 io.files.private io.streams.c kernel kernel.private math
7 math.private math.parser.private memory memory.private
8 namespaces namespaces.private parser quotations
9 quotations.private sbufs sbufs.private sequences
10 sequences.private slots.private strings strings.private system
11 threads.private classes.tuple classes.tuple.private vectors
12 vectors.private words words.private definitions assocs summary
13 compiler.units system.private combinators tools.memory.private
14 combinators.short-circuit locals locals.backend locals.types
15 combinators.private stack-checker.values generic.single
16 generic.single.private alien.libraries tools.dispatch.private
17 macros tools.profiler.sampling.private classes.algebra
18 stack-checker.alien
19 stack-checker.state
20 stack-checker.errors
21 stack-checker.visitor
22 stack-checker.backend
23 stack-checker.branches
24 stack-checker.transforms
25 stack-checker.dependencies
26 stack-checker.recursive-state
27 stack-checker.row-polymorphism ;
28 QUALIFIED-WITH: generic.single.private gsp
29 IN: stack-checker.known-words
30
31 : infer-special ( word -- )
32     [ current-word set ] [ "special" word-prop call( -- ) ] bi ;
33
34 : infer-shuffle ( shuffle -- )
35     [ in>> length consume-d ] keep ! inputs shuffle
36     [ drop ] [ shuffle dup copy-values dup output-d ] 2bi ! inputs outputs copies
37     [ nip f f ] [ swap zip ] 2bi ! in-d out-d in-r out-r mapping
38     #shuffle, ;
39
40 : infer-shuffle-word ( word -- )
41     "shuffle" word-prop infer-shuffle ;
42
43 : infer-local-reader ( word -- )
44     ( -- value ) apply-word/effect ;
45
46 : infer-local-writer ( word -- )
47     ( value -- ) apply-word/effect ;
48
49 : non-inline-word ( word -- )
50     dup add-depends-on-effect
51     {
52         { [ dup "shuffle" word-prop ] [ infer-shuffle-word ] }
53         { [ dup "special" word-prop ] [ infer-special ] }
54         { [ dup "transform-quot" word-prop ] [ apply-transform ] }
55         { [ dup macro? ] [ apply-macro ] }
56         { [ dup local? ] [ infer-local-reader ] }
57         { [ dup local-reader? ] [ infer-local-reader ] }
58         { [ dup local-writer? ] [ infer-local-writer ] }
59         { [ dup "no-compile" word-prop ] [ do-not-compile ] }
60         [ dup required-stack-effect apply-word/effect ]
61     } cond ;
62
63 {
64     { drop  ( x       --                 ) }
65     { 2drop ( x y     --                 ) }
66     { 3drop ( x y z   --                 ) }
67     { 4drop ( w x y z --                 ) }
68     { dup   ( x       -- x x             ) }
69     { 2dup  ( x y     -- x y x y         ) }
70     { 3dup  ( x y z   -- x y z x y z     ) }
71     { 4dup  ( w x y z -- w x y z w x y z ) }
72     { rot   ( x y z   -- y z x           ) }
73     { -rot  ( x y z   -- z x y           ) }
74     { dupd  ( x y     -- x x y           ) }
75     { swapd ( x y z   -- y x z           ) }
76     { nip   ( x y     -- y               ) }
77     { 2nip  ( x y z   -- z               ) }
78     { over  ( x y     -- x y x           ) }
79     { pick  ( x y z   -- x y z x         ) }
80     { swap  ( x y     -- y x             ) }
81 } [ "shuffle" set-word-prop ] assoc-each
82
83 : check-declaration ( declaration -- declaration )
84     dup { [ array? ] [ [ classoid? ] all? ] } 1&&
85     [ bad-declaration-error ] unless ;
86
87 : infer-declare ( -- )
88     pop-literal nip check-declaration
89     [ length ensure-d ] keep zip
90     #declare, ;
91
92 \ declare [ infer-declare ] "special" set-word-prop
93
94 ! Call
95 GENERIC: infer-call* ( value known -- )
96
97 : (infer-call) ( value -- ) dup known infer-call* ;
98
99 : infer-call ( -- ) pop-d (infer-call) ;
100
101 \ call [ infer-call ] "special" set-word-prop
102
103 \ (call) [ infer-call ] "special" set-word-prop
104
105 M: literal-tuple infer-call*
106     [ 1array #drop, ] [ infer-literal-quot ] bi* ;
107
108 M: curried infer-call*
109     swap push-d
110     [ uncurry ] infer-quot-here
111     [ quot>> known pop-d [ set-known ] keep ]
112     [ obj>> known pop-d [ set-known ] keep ] bi
113     push-d (infer-call) ;
114
115 M: composed infer-call*
116     swap push-d
117     [ uncompose ] infer-quot-here
118     [ quot2>> known pop-d [ set-known ] keep ]
119     [ quot1>> known pop-d [ set-known ] keep ] bi
120     push-d push-d
121     1 infer->r infer-call
122     terminated? get [ 1 infer-r> infer-call ] unless ;
123
124 M: declared-effect infer-call*
125     [ [ known>> infer-call* ] keep ] with-effect-here check-declared-effect ;
126
127 M: input-parameter infer-call* \ call unknown-macro-input ;
128 M: object infer-call* \ call bad-macro-input ;
129
130 : infer-ndip ( word n -- )
131     [ literals get ] 2dip
132     [ '[ _ def>> infer-quot-here ] ]
133     [ '[ _ [ pop ] dip [ infer->r infer-quot-here ] [ infer-r> ] bi ] ] bi*
134     if-empty ;
135
136 : infer-dip ( -- ) \ dip 1 infer-ndip ;
137
138 \ dip [ infer-dip ] "special" set-word-prop
139
140 : infer-2dip ( -- ) \ 2dip 2 infer-ndip ;
141
142 \ 2dip [ infer-2dip ] "special" set-word-prop
143
144 : infer-3dip ( -- ) \ 3dip 3 infer-ndip ;
145
146 \ 3dip [ infer-3dip ] "special" set-word-prop
147
148 : infer-builder ( quot word -- )
149     [
150         [ 2 consume-d ] dip
151         [ dup first2 ] dip call make-known
152         [ push-d ] [ 1array ] bi
153     ] dip #call, ; inline
154
155 : infer-curry ( -- ) [ <curried> ] \ curry infer-builder ;
156
157 \ curry [ infer-curry ] "special" set-word-prop
158
159 : infer-compose ( -- ) [ <composed> ] \ compose infer-builder ;
160
161 \ compose [ infer-compose ] "special" set-word-prop
162
163 : infer-execute ( -- )
164     pop-literal nip
165     dup word? [
166         apply-object
167     ] [
168         \ execute time-bomb
169     ] if ;
170
171 \ execute [ infer-execute ] "special" set-word-prop
172
173 \ (execute) [ infer-execute ] "special" set-word-prop
174
175 : infer-<tuple-boa> ( -- )
176     \ <tuple-boa>
177     peek-d literal value>> second 1 + "obj" <array> { tuple } <effect>
178     apply-word/effect ;
179
180 \ <tuple-boa> [ infer-<tuple-boa> ] "special" set-word-prop
181
182 \ <tuple-boa> t "flushable" set-word-prop
183
184 : infer-effect-unsafe ( word -- )
185     pop-literal nip
186     add-effect-input
187     apply-word/effect ;
188
189 : infer-execute-effect-unsafe ( -- )
190     \ (execute) infer-effect-unsafe ;
191
192 \ execute-effect-unsafe [ infer-execute-effect-unsafe ] "special" set-word-prop
193
194 : infer-call-effect-unsafe ( -- )
195     \ call infer-effect-unsafe ;
196
197 \ call-effect-unsafe [ infer-call-effect-unsafe ] "special" set-word-prop
198
199 : infer-load-locals ( -- )
200     pop-literal nip
201     consume-d dup copy-values dup output-r
202     [ [ f f ] dip ] [ swap zip ] 2bi #shuffle, ;
203
204 \ load-locals [ infer-load-locals ] "special" set-word-prop
205
206 : infer-load-local ( -- )
207     1 infer->r ;
208
209 \ load-local [ infer-load-local ] "special" set-word-prop
210
211 :: infer-get-local ( -- )
212     pop-literal nip 1 swap - :> n
213     n consume-r :> in-r
214     in-r first copy-value 1array :> out-d
215     in-r copy-values :> out-r
216
217     out-d output-d
218     out-r output-r
219     f out-d in-r out-r
220     out-r in-r zip out-d first in-r first 2array suffix
221     #shuffle, ;
222
223 \ get-local [ infer-get-local ] "special" set-word-prop
224
225 : infer-drop-locals ( -- )
226     f f pop-literal nip consume-r f f #shuffle, ;
227
228 \ drop-locals [ infer-drop-locals ] "special" set-word-prop
229
230 : infer-call-effect ( word -- )
231     1 ensure-d first literal value>>
232     add-effect-input add-effect-input
233     apply-word/effect ;
234
235 { call-effect execute-effect } [
236     dup t "no-compile" set-word-prop
237     dup '[ _ infer-call-effect ] "special" set-word-prop
238 ] each
239
240 \ if [ infer-if ] "special" set-word-prop
241 \ dispatch [ infer-dispatch ] "special" set-word-prop
242
243 \ alien-invoke [ infer-alien-invoke ] "special" set-word-prop
244 \ alien-indirect [ infer-alien-indirect ] "special" set-word-prop
245 \ alien-assembly [ infer-alien-assembly ] "special" set-word-prop
246 \ alien-callback [ infer-alien-callback ] "special" set-word-prop
247
248 {
249     c-to-factor
250     do-primitive
251     mega-cache-lookup
252     mega-cache-miss
253     inline-cache-miss
254     inline-cache-miss-tail
255     lazy-jit-compile
256     set-callstack
257     set-datastack
258     set-retainstack
259     unwind-native-frames
260 } [ dup '[ _ do-not-compile ] "special" set-word-prop ] each
261
262 {
263     declare call (call) dip 2dip 3dip curry compose
264     execute (execute) call-effect-unsafe execute-effect-unsafe
265     if dispatch <tuple-boa> do-primitive
266     load-local load-locals get-local drop-locals
267     alien-invoke alien-indirect alien-callback alien-assembly
268 } [ t "no-compile" set-word-prop ] each
269
270 ! Exceptions to the above
271 \ curry f "no-compile" set-word-prop
272 \ compose f "no-compile" set-word-prop
273
274 ! More words not to compile
275 \ clear t "no-compile" set-word-prop
276
277 : define-primitive ( word inputs outputs -- )
278     [ "input-classes" set-word-prop ]
279     [ "default-output-classes" set-word-prop ]
280     bi-curry* bi ;
281
282 ! Stack effects for all primitives
283 \ (byte-array) { integer } { byte-array } define-primitive \ (byte-array) make-flushable
284 \ (clone) { object } { object } define-primitive \ (clone) make-flushable
285 \ (code-blocks) { } { array } define-primitive \ (code-blocks)  make-flushable
286 \ (dlopen) { byte-array } { dll } define-primitive
287 \ (dlsym) { byte-array object } { c-ptr } define-primitive
288 \ (dlsym-raw) { byte-array object } { c-ptr } define-primitive
289 \ (exists?) { string } { object } define-primitive
290 \ (exit) { integer } { } define-primitive
291 \ (format-float) { float byte-array } { byte-array } define-primitive \ (format-float) make-foldable
292 \ (fopen) { byte-array byte-array } { alien } define-primitive
293 \ (identity-hashcode) { object } { fixnum } define-primitive
294 \ (save-image) { byte-array byte-array object } { } define-primitive
295 \ (set-context) { object alien } { object } define-primitive
296 \ (set-context-and-delete) { object alien } { } define-primitive
297 \ (sleep) { integer } { } define-primitive
298 \ (start-context) { object quotation } { object } define-primitive
299 \ (start-context-and-delete) { object quotation } { } define-primitive
300 \ (word) { object object object } { word } define-primitive \ (word) make-flushable
301 \ <array> { integer object } { array } define-primitive \ <array> make-flushable
302 \ <byte-array> { integer } { byte-array } define-primitive \ <byte-array> make-flushable
303 \ <callback> { word integer } { alien } define-primitive
304 \ <displaced-alien> { integer c-ptr } { c-ptr } define-primitive \ <displaced-alien> make-flushable
305 \ <string> { integer integer } { string } define-primitive \ <string> make-flushable
306 \ <tuple> { array } { tuple } define-primitive \ <tuple> make-flushable
307 \ <wrapper> { object } { wrapper } define-primitive \ <wrapper> make-foldable
308 \ alien-address { alien } { integer } define-primitive \ alien-address make-flushable
309 \ alien-cell { c-ptr integer } { pinned-c-ptr } define-primitive \ alien-cell make-flushable
310 \ alien-double { c-ptr integer } { float } define-primitive \ alien-double make-flushable
311 \ alien-float { c-ptr integer } { float } define-primitive \ alien-float make-flushable
312 \ alien-signed-1 { c-ptr integer } { fixnum } define-primitive \ alien-signed-1 make-flushable
313 \ alien-signed-2 { c-ptr integer } { fixnum } define-primitive \ alien-signed-2 make-flushable
314 \ alien-signed-4 { c-ptr integer } { integer } define-primitive \ alien-signed-4 make-flushable
315 \ alien-signed-8 { c-ptr integer } { integer } define-primitive \ alien-signed-8 make-flushable
316 \ alien-signed-cell { c-ptr integer } { integer } define-primitive \ alien-signed-cell make-flushable
317 \ alien-unsigned-1 { c-ptr integer } { fixnum } define-primitive \ alien-unsigned-1 make-flushable
318 \ alien-unsigned-2 { c-ptr integer } { fixnum } define-primitive \ alien-unsigned-2 make-flushable
319 \ alien-unsigned-4 { c-ptr integer } { integer } define-primitive \ alien-unsigned-4 make-flushable
320 \ alien-unsigned-8 { c-ptr integer } { integer } define-primitive \ alien-unsigned-8 make-flushable
321 \ alien-unsigned-cell { c-ptr integer } { integer } define-primitive \ alien-unsigned-cell make-flushable
322 \ all-instances { } { array } define-primitive
323 \ array>quotation { array } { quotation } define-primitive \ array>quotation make-foldable
324 \ become { array array } { } define-primitive
325 \ bignum* { bignum bignum } { bignum } define-primitive \ bignum* make-foldable
326 \ bignum+ { bignum bignum } { bignum } define-primitive \ bignum+ make-foldable
327 \ bignum- { bignum bignum } { bignum } define-primitive \ bignum- make-foldable
328 \ bignum-bit? { bignum integer } { object } define-primitive \ bignum-bit? make-foldable
329 \ bignum-bitand { bignum bignum } { bignum } define-primitive \ bignum-bitand make-foldable
330 \ bignum-bitnot { bignum } { bignum } define-primitive \ bignum-bitnot make-foldable
331 \ bignum-bitor { bignum bignum } { bignum } define-primitive \ bignum-bitor make-foldable
332 \ bignum-bitxor { bignum bignum } { bignum } define-primitive \ bignum-bitxor make-foldable
333 \ bignum-log2 { bignum } { bignum } define-primitive \ bignum-log2 make-foldable
334 \ bignum-mod { bignum bignum } { integer } define-primitive \ bignum-mod make-foldable
335 \ bignum-gcd { bignum bignum } { bignum } define-primitive \ bignum-gcd make-foldable
336 \ bignum-shift { bignum fixnum } { bignum } define-primitive \ bignum-shift make-foldable
337 \ bignum/i { bignum bignum } { bignum } define-primitive \ bignum/i make-foldable
338 \ bignum/mod { bignum bignum } { bignum integer } define-primitive \ bignum/mod make-foldable
339 \ bignum< { bignum bignum } { object } define-primitive \ bignum< make-foldable
340 \ bignum<= { bignum bignum } { object } define-primitive \ bignum<= make-foldable
341 \ bignum= { bignum bignum } { object } define-primitive \ bignum= make-foldable
342 \ bignum> { bignum bignum } { object } define-primitive \ bignum> make-foldable
343 \ bignum>= { bignum bignum } { object } define-primitive \ bignum>= make-foldable
344 \ bignum>fixnum { bignum } { fixnum } define-primitive \ bignum>fixnum make-foldable
345 \ bignum>fixnum-strict { bignum } { fixnum } define-primitive \ bignum>fixnum-strict make-foldable
346 \ bits>double { integer } { float } define-primitive \ bits>double make-foldable
347 \ bits>float { integer } { float } define-primitive \ bits>float make-foldable
348 \ both-fixnums? { object object } { object } define-primitive
349 \ callstack { } { callstack } define-primitive \ callstack make-flushable
350 \ callstack-bounds { } { alien alien } define-primitive \ callstack-bounds make-flushable
351 \ callstack-for { c-ptr } { callstack } define-primitive \ callstack make-flushable
352 \ callstack>array { callstack } { array } define-primitive \ callstack>array make-flushable
353 \ check-datastack { array integer integer } { object } define-primitive \ check-datastack make-flushable
354 \ (code-room) { } { byte-array } define-primitive \ (code-room)  make-flushable
355 \ compact-gc { } { } define-primitive
356 \ compute-identity-hashcode { object } { } define-primitive
357 \ context-object { fixnum } { object } define-primitive \ context-object make-flushable
358 \ context-object-for { fixnum c-ptr } { object } define-primitive \ context-object-for make-flushable
359 \ current-callback { } { fixnum } define-primitive \ current-callback make-flushable
360 \ (callback-room) { } { byte-array } define-primitive \ (callback-room) make-flushable
361 \ (data-room) { } { byte-array } define-primitive \ (data-room) make-flushable
362 \ datastack { } { array } define-primitive \ datastack make-flushable
363 \ datastack-for { c-ptr } { array } define-primitive \ datastack-for make-flushable
364 \ die { } { } define-primitive
365 \ disable-gc-events { } { object } define-primitive
366 \ dispatch-stats { } { byte-array } define-primitive
367 \ dlclose { dll } { } define-primitive
368 \ dll-valid? { object } { object } define-primitive
369 \ double>bits { real } { integer } define-primitive \ double>bits make-foldable
370 \ enable-gc-events { } { } define-primitive
371 \ eq? { object object } { object } define-primitive \ eq? make-foldable
372 \ fclose { alien } { } define-primitive
373 \ ffi-signal-handler { } { } define-primitive
374 \ ffi-leaf-signal-handler { } { } define-primitive
375 \ fflush { alien } { } define-primitive
376 \ fgetc { alien } { object } define-primitive
377 \ fixnum* { fixnum fixnum } { integer } define-primitive \ fixnum* make-foldable
378 \ fixnum*fast { fixnum fixnum } { fixnum } define-primitive \ fixnum*fast make-foldable
379 \ fixnum+ { fixnum fixnum } { integer } define-primitive \ fixnum+ make-foldable
380 \ fixnum+fast { fixnum fixnum } { fixnum } define-primitive \ fixnum+fast make-foldable
381 \ fixnum- { fixnum fixnum } { integer } define-primitive \ fixnum- make-foldable
382 \ fixnum-bitand { fixnum fixnum } { fixnum } define-primitive \ fixnum-bitand make-foldable
383 \ fixnum-bitnot { fixnum } { fixnum } define-primitive \ fixnum-bitnot make-foldable
384 \ fixnum-bitor { fixnum fixnum } { fixnum } define-primitive \ fixnum-bitor make-foldable
385 \ fixnum-bitxor { fixnum fixnum } { fixnum } define-primitive \ fixnum-bitxor make-foldable
386 \ fixnum-fast { fixnum fixnum } { fixnum } define-primitive \ fixnum-fast make-foldable
387 \ fixnum-mod { fixnum fixnum } { fixnum } define-primitive \ fixnum-mod make-foldable
388 \ fixnum-shift { fixnum fixnum } { integer } define-primitive \ fixnum-shift make-foldable
389 \ fixnum-shift-fast { fixnum fixnum } { fixnum } define-primitive \ fixnum-shift-fast make-foldable
390 \ fixnum/i { fixnum fixnum } { integer } define-primitive \ fixnum/i make-foldable
391 \ fixnum/i-fast { fixnum fixnum } { fixnum } define-primitive \ fixnum/i-fast make-foldable
392 \ fixnum/mod { fixnum fixnum } { integer fixnum } define-primitive \ fixnum/mod make-foldable
393 \ fixnum/mod-fast { fixnum fixnum } { fixnum fixnum } define-primitive \ fixnum/mod-fast make-foldable
394 \ fixnum< { fixnum fixnum } { object } define-primitive \ fixnum< make-foldable
395 \ fixnum<= { fixnum fixnum } { object } define-primitive \ fixnum<= make-foldable
396 \ fixnum> { fixnum fixnum } { object } define-primitive \ fixnum> make-foldable
397 \ fixnum>= { fixnum fixnum } { object } define-primitive \ fixnum>= make-foldable
398 \ fixnum>bignum { fixnum } { bignum } define-primitive \ fixnum>bignum make-foldable
399 \ fixnum>float { fixnum } { float } define-primitive \ fixnum>float make-foldable
400 \ float* { float float } { float } define-primitive \ float* make-foldable
401 \ float+ { float float } { float } define-primitive \ float+ make-foldable
402 \ float- { float float } { float } define-primitive \ float- make-foldable
403 \ float-u< { float float } { object } define-primitive \ float-u< make-foldable
404 \ float-u<= { float float } { object } define-primitive \ float-u<= make-foldable
405 \ float-u> { float float } { object } define-primitive \ float-u> make-foldable
406 \ float-u>= { float float } { object } define-primitive \ float-u>= make-foldable
407 \ float/f { float float } { float } define-primitive \ float/f make-foldable
408 \ float< { float float } { object } define-primitive \ float< make-foldable
409 \ float<= { float float } { object } define-primitive \ float<= make-foldable
410 \ float= { float float } { object } define-primitive \ float= make-foldable
411 \ float> { float float } { object } define-primitive \ float> make-foldable
412 \ float>= { float float } { object } define-primitive \ float>= make-foldable
413 \ float>bignum { float } { bignum } define-primitive \ float>bignum make-foldable
414 \ float>bits { real } { integer } define-primitive \ float>bits make-foldable
415 \ float>fixnum { float } { fixnum } define-primitive \ bignum>fixnum make-foldable
416 \ fpu-state { } { } define-primitive
417 \ fputc { object alien } { } define-primitive
418 \ fread-unsafe { integer c-ptr alien } { integer } define-primitive
419 \ free-callback { alien } { } define-primitive
420 \ fseek { integer integer alien } { } define-primitive
421 \ ftell { alien } { integer } define-primitive
422 \ fwrite { c-ptr integer alien } { } define-primitive
423 \ gc { } { } define-primitive
424 \ innermost-frame-executing { callstack } { object } define-primitive
425 \ innermost-frame-scan { callstack } { fixnum } define-primitive
426 \ jit-compile { quotation } { } define-primitive
427 \ leaf-signal-handler { } { } define-primitive
428 \ gsp:lookup-method { object array } { word } define-primitive
429 \ minor-gc { } { } define-primitive
430 \ modify-code-heap { array object object } { } define-primitive
431 \ nano-count { } { integer } define-primitive \ nano-count make-flushable
432 \ optimized? { word } { object } define-primitive
433 \ profiling { object } { } define-primitive
434 \ (get-samples) { } { object } define-primitive
435 \ (clear-samples) { } { } define-primitive
436 \ quot-compiled? { quotation } { object } define-primitive
437 \ quotation-code { quotation } { integer integer } define-primitive \ quotation-code make-flushable
438 \ reset-dispatch-stats { } { } define-primitive
439 \ resize-array { integer array } { array } define-primitive
440 \ resize-byte-array { integer byte-array } { byte-array } define-primitive
441 \ resize-string { integer string } { string } define-primitive
442 \ retainstack { } { array } define-primitive \ retainstack make-flushable
443 \ retainstack-for { c-ptr } { array } define-primitive \ retainstack-for make-flushable
444 \ set-alien-cell { c-ptr c-ptr integer } { } define-primitive
445 \ set-alien-double { float c-ptr integer } { } define-primitive
446 \ set-alien-float { float c-ptr integer } { } define-primitive
447 \ set-alien-signed-1 { integer c-ptr integer } { } define-primitive
448 \ set-alien-signed-2 { integer c-ptr integer } { } define-primitive
449 \ set-alien-signed-4 { integer c-ptr integer } { } define-primitive
450 \ set-alien-signed-8 { integer c-ptr integer } { } define-primitive
451 \ set-alien-signed-cell { integer c-ptr integer } { } define-primitive
452 \ set-alien-unsigned-1 { integer c-ptr integer } { } define-primitive
453 \ set-alien-unsigned-2 { integer c-ptr integer } { } define-primitive
454 \ set-alien-unsigned-4 { integer c-ptr integer } { } define-primitive
455 \ set-alien-unsigned-8 { integer c-ptr integer } { } define-primitive
456 \ set-alien-unsigned-cell { integer c-ptr integer } { } define-primitive
457 \ set-context-object { object fixnum } { } define-primitive
458 \ set-fpu-state { } { } define-primitive
459 \ set-innermost-frame-quot { quotation callstack } { } define-primitive
460 \ set-slot { object object fixnum } { } define-primitive
461 \ set-special-object { object fixnum } { } define-primitive
462 \ set-string-nth-fast { fixnum fixnum string } { } define-primitive
463 \ signal-handler { } { } define-primitive
464 \ size { object } { fixnum } define-primitive \ size make-flushable
465 \ slot { object fixnum } { object } define-primitive \ slot make-flushable
466 \ special-object { fixnum } { object } define-primitive \ special-object make-flushable
467 \ string-nth-fast { fixnum string } { fixnum } define-primitive \ string-nth-fast make-flushable
468 \ strip-stack-traces { } { } define-primitive
469 \ tag { object } { fixnum } define-primitive \ tag make-foldable
470 \ unimplemented { } { } define-primitive
471 \ word-code { word } { integer integer } define-primitive \ word-code make-flushable