]> gitweb.factorcode.org Git - factor.git/blob - basis/stack-checker/known-words/known-words.factor
8cddac5a752e52e8871da9048d071a166811d325
[factor.git] / basis / stack-checker / known-words / known-words.factor
1 ! Copyright (C) 2004, 2009 Slava Pestov, Daniel Ehrenberg.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: fry accessors alien alien.accessors arrays byte-arrays
4 classes continuations.private effects generic hashtables
5 hashtables.private io io.backend io.files io.files.private
6 io.streams.c kernel kernel.private math math.private
7 math.parser.private memory memory.private namespaces
8 namespaces.private parser quotations quotations.private sbufs
9 sbufs.private sequences sequences.private slots.private strings
10 strings.private system threads.private classes.tuple
11 classes.tuple.private vectors vectors.private words
12 words.private definitions assocs summary compiler.units
13 system.private combinators combinators.short-circuit locals
14 locals.backend locals.types combinators.private
15 stack-checker.values generic.single generic.single.private
16 alien.libraries
17 stack-checker.alien
18 stack-checker.state
19 stack-checker.errors
20 stack-checker.visitor
21 stack-checker.backend
22 stack-checker.branches
23 stack-checker.transforms
24 stack-checker.recursive-state ;
25 IN: stack-checker.known-words
26
27 : infer-primitive ( word -- )
28     dup
29     [ "input-classes" word-prop ]
30     [ "default-output-classes" word-prop ] bi <effect>
31     apply-word/effect ;
32
33 {
34     { drop  (( x     --             )) }
35     { 2drop (( x y   --             )) }
36     { 3drop (( x y z --             )) }
37     { dup   (( x     -- x x         )) }
38     { 2dup  (( x y   -- x y x y     )) }
39     { 3dup  (( x y z -- x y z x y z )) }
40     { rot   (( x y z -- y z x       )) }
41     { -rot  (( x y z -- z x y       )) }
42     { dupd  (( x y   -- x x y       )) }
43     { swapd (( x y z -- y x z       )) }
44     { nip   (( x y   -- y           )) }
45     { 2nip  (( x y z -- z           )) }
46     { tuck  (( x y   -- y x y       )) }
47     { over  (( x y   -- x y x       )) }
48     { pick  (( x y z -- x y z x     )) }
49     { swap  (( x y   -- y x         )) }
50 } [ "shuffle" set-word-prop ] assoc-each
51
52 : infer-shuffle ( shuffle -- )
53     [ in>> length consume-d ] keep ! inputs shuffle
54     [ drop ] [ shuffle dup copy-values dup output-d ] 2bi ! inputs outputs copies
55     [ nip f f ] [ swap zip ] 2bi ! in-d out-d in-r out-r mapping
56     #shuffle, ;
57
58 : infer-shuffle-word ( word -- )
59     "shuffle" word-prop infer-shuffle ;
60
61 : check-declaration ( declaration -- declaration )
62     dup { [ array? ] [ [ class? ] all? ] } 1&&
63     [ bad-declaration-error ] unless ;
64
65 : infer-declare ( -- )
66     pop-literal nip check-declaration
67     [ length ensure-d ] keep zip
68     #declare, ;
69
70 \ declare [ infer-declare ] "special" set-word-prop
71
72 GENERIC: infer-call* ( value known -- )
73
74 : (infer-call) ( value -- ) dup known infer-call* ;
75
76 : infer-call ( -- ) pop-d (infer-call) ;
77
78 \ call [ infer-call ] "special" set-word-prop
79
80 \ (call) [ infer-call ] "special" set-word-prop
81
82 M: literal infer-call*
83     [ 1array #drop, ] [ infer-literal-quot ] bi* ;
84
85 M: curried infer-call*
86     swap push-d
87     [ uncurry ] infer-quot-here
88     [ quot>> known pop-d [ set-known ] keep ]
89     [ obj>> known pop-d [ set-known ] keep ] bi
90     push-d (infer-call) ;
91
92 M: composed infer-call*
93     swap push-d
94     [ uncompose ] infer-quot-here
95     [ quot2>> known pop-d [ set-known ] keep ]
96     [ quot1>> known pop-d [ set-known ] keep ] bi
97     push-d push-d
98     1 infer->r infer-call
99     terminated? get [ 1 infer-r> infer-call ] unless ;
100
101 M: object infer-call*
102     "literal quotation" literal-expected ;
103
104 : infer-ndip ( word n -- )
105     [ literals get ] 2dip
106     [ '[ _ def>> infer-quot-here ] ]
107     [ '[ _ [ pop ] dip [ infer->r infer-quot-here ] [ infer-r> ] bi ] ] bi*
108     if-empty ;
109
110 : infer-dip ( -- ) \ dip 1 infer-ndip ;
111
112 \ dip [ infer-dip ] "special" set-word-prop
113
114 : infer-2dip ( -- ) \ 2dip 2 infer-ndip ;
115
116 \ 2dip [ infer-2dip ] "special" set-word-prop
117
118 : infer-3dip ( -- ) \ 3dip 3 infer-ndip ;
119
120 \ 3dip [ infer-3dip ] "special" set-word-prop
121
122 : infer-builder ( quot word -- )
123     [
124         [ 2 consume-d ] dip
125         [ dup first2 ] dip call make-known
126         [ push-d ] [ 1array ] bi
127     ] dip #call, ; inline
128
129 : infer-curry ( -- ) [ <curried> ] \ curry infer-builder ;
130
131 \ curry [ infer-curry ] "special" set-word-prop
132
133 : infer-compose ( -- ) [ <composed> ] \ compose infer-builder ;
134
135 \ compose [ infer-compose ] "special" set-word-prop
136
137 ERROR: bad-executable obj ;
138
139 M: bad-executable summary
140     drop "execute must be given a word" ;
141
142 : infer-execute ( -- )
143     pop-literal nip
144     dup word? [
145         apply-object
146     ] [
147         \ bad-executable boa time-bomb
148     ] if ;
149
150 \ execute [ infer-execute ] "special" set-word-prop
151
152 \ (execute) [ infer-execute ] "special" set-word-prop
153
154 : infer-<tuple-boa> ( -- )
155     \ <tuple-boa>
156     peek-d literal value>> second 1 + { tuple } <effect>
157     apply-word/effect ;
158
159 \ <tuple-boa> [ infer-<tuple-boa> ] "special" set-word-prop
160
161 \ <tuple-boa> t "flushable" set-word-prop
162
163 : infer-effect-unsafe ( word -- )
164     pop-literal nip
165     add-effect-input
166     apply-word/effect ;
167
168 : infer-execute-effect-unsafe ( -- )
169     \ (execute) infer-effect-unsafe ;
170
171 \ execute-effect-unsafe [ infer-execute-effect-unsafe ] "special" set-word-prop
172
173 : infer-call-effect-unsafe ( -- )
174     \ call infer-effect-unsafe ;
175
176 \ call-effect-unsafe [ infer-call-effect-unsafe ] "special" set-word-prop
177
178 : infer-exit ( -- )
179     \ exit (( n -- * )) apply-word/effect ;
180
181 \ exit [ infer-exit ] "special" set-word-prop
182
183 : infer-load-locals ( -- )
184     pop-literal nip
185     consume-d dup copy-values dup output-r
186     [ [ f f ] dip ] [ swap zip ] 2bi #shuffle, ;
187
188 \ load-locals [ infer-load-locals ] "special" set-word-prop
189
190 : infer-load-local ( -- )
191     1 infer->r ;
192
193 \ load-local [ infer-load-local ] "special" set-word-prop
194
195 : infer-get-local ( -- )
196     [let* | n [ pop-literal nip 1 swap - ]
197             in-r [ n consume-r ]
198             out-d [ in-r first copy-value 1array ]
199             out-r [ in-r copy-values ] |
200          out-d output-d
201          out-r output-r
202          f out-d in-r out-r
203          out-r in-r zip out-d first in-r first 2array suffix
204          #shuffle,
205     ] ;
206
207 \ get-local [ infer-get-local ] "special" set-word-prop
208
209 : infer-drop-locals ( -- )
210     f f pop-literal nip consume-r f f #shuffle, ;
211
212 \ drop-locals [ infer-drop-locals ] "special" set-word-prop
213
214 : infer-call-effect ( word -- )
215     1 ensure-d first literal value>>
216     add-effect-input add-effect-input
217     apply-word/effect ;
218
219 { call-effect execute-effect } [
220     dup t "no-compile" set-word-prop
221     dup '[ _ infer-call-effect ] "special" set-word-prop
222 ] each
223
224 \ do-primitive [ unknown-primitive-error ] "special" set-word-prop
225
226 \ if [ infer-if ] "special" set-word-prop
227 \ dispatch [ infer-dispatch ] "special" set-word-prop
228
229 \ alien-invoke [ infer-alien-invoke ] "special" set-word-prop
230 \ alien-indirect [ infer-alien-indirect ] "special" set-word-prop
231 \ alien-callback [ infer-alien-callback ] "special" set-word-prop
232
233 : infer-special ( word -- )
234     "special" word-prop call( -- ) ;
235
236 : infer-local-reader ( word -- )
237     (( -- value )) apply-word/effect ;
238
239 : infer-local-writer ( word -- )
240     (( value -- )) apply-word/effect ;
241
242 : infer-local-word ( word -- )
243     "local-word-def" word-prop infer-quot-here ;
244
245 {
246     declare call (call) dip 2dip 3dip curry compose
247     execute (execute) call-effect-unsafe execute-effect-unsafe if
248     dispatch <tuple-boa> exit load-local load-locals get-local
249     drop-locals do-primitive alien-invoke alien-indirect
250     alien-callback
251 } [ t "no-compile" set-word-prop ] each
252
253 ! Exceptions to the above
254 \ curry f "no-compile" set-word-prop
255 \ compose f "no-compile" set-word-prop
256
257 ! More words not to compile
258 \ clear t "no-compile" set-word-prop
259
260 : non-inline-word ( word -- )
261     dup called-dependency depends-on
262     {
263         { [ dup "shuffle" word-prop ] [ infer-shuffle-word ] }
264         { [ dup "special" word-prop ] [ infer-special ] }
265         { [ dup "primitive" word-prop ] [ infer-primitive ] }
266         { [ dup "transform-quot" word-prop ] [ apply-transform ] }
267         { [ dup "macro" word-prop ] [ apply-macro ] }
268         { [ dup local? ] [ infer-local-reader ] }
269         { [ dup local-reader? ] [ infer-local-reader ] }
270         { [ dup local-writer? ] [ infer-local-writer ] }
271         { [ dup local-word? ] [ infer-local-word ] }
272         [ infer-word ]
273     } cond ;
274
275 : define-primitive ( word inputs outputs -- )
276     [ 2drop t "primitive" set-word-prop ]
277     [ drop "input-classes" set-word-prop ]
278     [ nip "default-output-classes" set-word-prop ]
279     3tri ;
280
281 ! Stack effects for all primitives
282 \ fixnum< { fixnum fixnum } { object } define-primitive
283 \ fixnum< make-foldable
284
285 \ fixnum<= { fixnum fixnum } { object } define-primitive
286 \ fixnum<= make-foldable
287
288 \ fixnum> { fixnum fixnum } { object } define-primitive
289 \ fixnum> make-foldable
290
291 \ fixnum>= { fixnum fixnum } { object } define-primitive
292 \ fixnum>= make-foldable
293
294 \ eq? { object object } { object } define-primitive
295 \ eq? make-foldable
296
297 \ bignum>fixnum { bignum } { fixnum } define-primitive
298 \ bignum>fixnum make-foldable
299
300 \ float>fixnum { float } { fixnum } define-primitive
301 \ bignum>fixnum make-foldable
302
303 \ fixnum>bignum { fixnum } { bignum } define-primitive
304 \ fixnum>bignum make-foldable
305
306 \ float>bignum { float } { bignum } define-primitive
307 \ float>bignum make-foldable
308
309 \ fixnum>float { fixnum } { float } define-primitive
310 \ fixnum>float make-foldable
311
312 \ bignum>float { bignum } { float } define-primitive
313 \ bignum>float make-foldable
314
315 \ (string>float) { byte-array } { float } define-primitive
316 \ (string>float) make-foldable
317
318 \ (float>string) { float } { byte-array } define-primitive
319 \ (float>string) make-foldable
320
321 \ float>bits { real } { integer } define-primitive
322 \ float>bits make-foldable
323
324 \ double>bits { real } { integer } define-primitive
325 \ double>bits make-foldable
326
327 \ bits>float { integer } { float } define-primitive
328 \ bits>float make-foldable
329
330 \ bits>double { integer } { float } define-primitive
331 \ bits>double make-foldable
332
333 \ both-fixnums? { object object } { object } define-primitive
334
335 \ fixnum+ { fixnum fixnum } { integer } define-primitive
336 \ fixnum+ make-foldable
337
338 \ fixnum+fast { fixnum fixnum } { fixnum } define-primitive
339 \ fixnum+fast make-foldable
340
341 \ fixnum- { fixnum fixnum } { integer } define-primitive
342 \ fixnum- make-foldable
343
344 \ fixnum-fast { fixnum fixnum } { fixnum } define-primitive
345 \ fixnum-fast make-foldable
346
347 \ fixnum* { fixnum fixnum } { integer } define-primitive
348 \ fixnum* make-foldable
349
350 \ fixnum*fast { fixnum fixnum } { fixnum } define-primitive
351 \ fixnum*fast make-foldable
352
353 \ fixnum/i { fixnum fixnum } { integer } define-primitive
354 \ fixnum/i make-foldable
355
356 \ fixnum/i-fast { fixnum fixnum } { fixnum } define-primitive
357 \ fixnum/i-fast make-foldable
358
359 \ fixnum-mod { fixnum fixnum } { fixnum } define-primitive
360 \ fixnum-mod make-foldable
361
362 \ fixnum/mod { fixnum fixnum } { integer fixnum } define-primitive
363 \ fixnum/mod make-foldable
364
365 \ fixnum/mod-fast { fixnum fixnum } { fixnum fixnum } define-primitive
366 \ fixnum/mod-fast make-foldable
367
368 \ fixnum-bitand { fixnum fixnum } { fixnum } define-primitive
369 \ fixnum-bitand make-foldable
370
371 \ fixnum-bitor { fixnum fixnum } { fixnum } define-primitive
372 \ fixnum-bitor make-foldable
373
374 \ fixnum-bitxor { fixnum fixnum } { fixnum } define-primitive
375 \ fixnum-bitxor make-foldable
376
377 \ fixnum-bitnot { fixnum } { fixnum } define-primitive
378 \ fixnum-bitnot make-foldable
379
380 \ fixnum-shift { fixnum fixnum } { integer } define-primitive
381 \ fixnum-shift make-foldable
382
383 \ fixnum-shift-fast { fixnum fixnum } { fixnum } define-primitive
384 \ fixnum-shift-fast make-foldable
385
386 \ bignum= { bignum bignum } { object } define-primitive
387 \ bignum= make-foldable
388
389 \ bignum+ { bignum bignum } { bignum } define-primitive
390 \ bignum+ make-foldable
391
392 \ bignum- { bignum bignum } { bignum } define-primitive
393 \ bignum- make-foldable
394
395 \ bignum* { bignum bignum } { bignum } define-primitive
396 \ bignum* make-foldable
397
398 \ bignum/i { bignum bignum } { bignum } define-primitive
399 \ bignum/i make-foldable
400
401 \ bignum-mod { bignum bignum } { bignum } define-primitive
402 \ bignum-mod make-foldable
403
404 \ bignum/mod { bignum bignum } { bignum bignum } define-primitive
405 \ bignum/mod make-foldable
406
407 \ bignum-bitand { bignum bignum } { bignum } define-primitive
408 \ bignum-bitand make-foldable
409
410 \ bignum-bitor { bignum bignum } { bignum } define-primitive
411 \ bignum-bitor make-foldable
412
413 \ bignum-bitxor { bignum bignum } { bignum } define-primitive
414 \ bignum-bitxor make-foldable
415
416 \ bignum-bitnot { bignum } { bignum } define-primitive
417 \ bignum-bitnot make-foldable
418
419 \ bignum-shift { bignum fixnum } { bignum } define-primitive
420 \ bignum-shift make-foldable
421
422 \ bignum< { bignum bignum } { object } define-primitive
423 \ bignum< make-foldable
424
425 \ bignum<= { bignum bignum } { object } define-primitive
426 \ bignum<= make-foldable
427
428 \ bignum> { bignum bignum } { object } define-primitive
429 \ bignum> make-foldable
430
431 \ bignum>= { bignum bignum } { object } define-primitive
432 \ bignum>= make-foldable
433
434 \ bignum-bit? { bignum integer } { object } define-primitive
435 \ bignum-bit? make-foldable
436
437 \ bignum-log2 { bignum } { bignum } define-primitive
438 \ bignum-log2 make-foldable
439
440 \ byte-array>bignum { byte-array } { bignum } define-primitive
441 \ byte-array>bignum make-foldable
442
443 \ float= { float float } { object } define-primitive
444 \ float= make-foldable
445
446 \ float+ { float float } { float } define-primitive
447 \ float+ make-foldable
448
449 \ float- { float float } { float } define-primitive
450 \ float- make-foldable
451
452 \ float* { float float } { float } define-primitive
453 \ float* make-foldable
454
455 \ float/f { float float } { float } define-primitive
456 \ float/f make-foldable
457
458 \ float-mod { float float } { float } define-primitive
459 \ float-mod make-foldable
460
461 \ float< { float float } { object } define-primitive
462 \ float< make-foldable
463
464 \ float<= { float float } { object } define-primitive
465 \ float<= make-foldable
466
467 \ float> { float float } { object } define-primitive
468 \ float> make-foldable
469
470 \ float>= { float float } { object } define-primitive
471 \ float>= make-foldable
472
473 \ float-u< { float float } { object } define-primitive
474 \ float-u< make-foldable
475
476 \ float-u<= { float float } { object } define-primitive
477 \ float-u<= make-foldable
478
479 \ float-u> { float float } { object } define-primitive
480 \ float-u> make-foldable
481
482 \ float-u>= { float float } { object } define-primitive
483 \ float-u>= make-foldable
484
485 \ (word) { object object object } { word } define-primitive
486 \ (word) make-flushable
487
488 \ word-xt { word } { integer integer } define-primitive
489 \ word-xt make-flushable
490
491 \ getenv { fixnum } { object } define-primitive
492 \ getenv make-flushable
493
494 \ setenv { object fixnum } { } define-primitive
495
496 \ (exists?) { string } { object } define-primitive
497
498 \ minor-gc { } { } define-primitive
499
500 \ gc { } { } define-primitive
501
502 \ compact-gc { } { } define-primitive
503
504 \ gc-stats { } { array } define-primitive
505
506 \ (save-image) { byte-array } { } define-primitive
507
508 \ (save-image-and-exit) { byte-array } { } define-primitive
509
510 \ data-room { } { integer integer array } define-primitive
511 \ data-room make-flushable
512
513 \ code-room { } { integer integer integer integer } define-primitive
514 \ code-room  make-flushable
515
516 \ micros { } { integer } define-primitive
517 \ micros make-flushable
518
519 \ tag { object } { fixnum } define-primitive
520 \ tag make-foldable
521
522 \ (dlopen) { byte-array } { dll } define-primitive
523
524 \ (dlsym) { byte-array object } { c-ptr } define-primitive
525
526 \ dlclose { dll } { } define-primitive
527
528 \ <byte-array> { integer } { byte-array } define-primitive
529 \ <byte-array> make-flushable
530
531 \ (byte-array) { integer } { byte-array } define-primitive
532 \ (byte-array) make-flushable
533
534 \ <displaced-alien> { integer c-ptr } { c-ptr } define-primitive
535 \ <displaced-alien> make-flushable
536
537 \ alien-signed-cell { c-ptr integer } { integer } define-primitive
538 \ alien-signed-cell make-flushable
539
540 \ set-alien-signed-cell { integer c-ptr integer } { } define-primitive
541
542 \ alien-unsigned-cell { c-ptr integer } { integer } define-primitive
543 \ alien-unsigned-cell make-flushable
544
545 \ set-alien-unsigned-cell { integer c-ptr integer } { } define-primitive
546
547 \ alien-signed-8 { c-ptr integer } { integer } define-primitive
548 \ alien-signed-8 make-flushable
549
550 \ set-alien-signed-8 { integer c-ptr integer } { } define-primitive
551
552 \ alien-unsigned-8 { c-ptr integer } { integer } define-primitive
553 \ alien-unsigned-8 make-flushable
554
555 \ set-alien-unsigned-8 { integer c-ptr integer } { } define-primitive
556
557 \ alien-signed-4 { c-ptr integer } { integer } define-primitive
558 \ alien-signed-4 make-flushable
559
560 \ set-alien-signed-4 { integer c-ptr integer } { } define-primitive
561
562 \ alien-unsigned-4 { c-ptr integer } { integer } define-primitive
563 \ alien-unsigned-4 make-flushable
564
565 \ set-alien-unsigned-4 { integer c-ptr integer } { } define-primitive
566
567 \ alien-signed-2 { c-ptr integer } { fixnum } define-primitive
568 \ alien-signed-2 make-flushable
569
570 \ set-alien-signed-2 { integer c-ptr integer } { } define-primitive
571
572 \ alien-unsigned-2 { c-ptr integer } { fixnum } define-primitive
573 \ alien-unsigned-2 make-flushable
574
575 \ set-alien-unsigned-2 { integer c-ptr integer } { } define-primitive
576
577 \ alien-signed-1 { c-ptr integer } { fixnum } define-primitive
578 \ alien-signed-1 make-flushable
579
580 \ set-alien-signed-1 { integer c-ptr integer } { } define-primitive
581
582 \ alien-unsigned-1 { c-ptr integer } { fixnum } define-primitive
583 \ alien-unsigned-1 make-flushable
584
585 \ set-alien-unsigned-1 { integer c-ptr integer } { } define-primitive
586
587 \ alien-float { c-ptr integer } { float } define-primitive
588 \ alien-float make-flushable
589
590 \ set-alien-float { float c-ptr integer } { } define-primitive
591
592 \ alien-double { c-ptr integer } { float } define-primitive
593 \ alien-double make-flushable
594
595 \ set-alien-double { float c-ptr integer } { } define-primitive
596
597 \ alien-cell { c-ptr integer } { simple-c-ptr } define-primitive
598 \ alien-cell make-flushable
599
600 \ set-alien-cell { c-ptr c-ptr integer } { } define-primitive
601
602 \ alien-address { alien } { integer } define-primitive
603 \ alien-address make-flushable
604
605 \ slot { object fixnum } { object } define-primitive
606 \ slot make-flushable
607
608 \ set-slot { object object fixnum } { } define-primitive
609
610 \ string-nth { fixnum string } { fixnum } define-primitive
611 \ string-nth make-flushable
612
613 \ set-string-nth-slow { fixnum fixnum string } { } define-primitive
614 \ set-string-nth-fast { fixnum fixnum string } { } define-primitive
615
616 \ resize-array { integer array } { array } define-primitive
617 \ resize-array make-flushable
618
619 \ resize-byte-array { integer byte-array } { byte-array } define-primitive
620 \ resize-byte-array make-flushable
621
622 \ resize-string { integer string } { string } define-primitive
623 \ resize-string make-flushable
624
625 \ <array> { integer object } { array } define-primitive
626 \ <array> make-flushable
627
628 \ begin-scan { } { } define-primitive
629
630 \ next-object { } { object } define-primitive
631
632 \ end-scan { } { } define-primitive
633
634 \ size { object } { fixnum } define-primitive
635 \ size make-flushable
636
637 \ die { } { } define-primitive
638
639 \ (fopen) { byte-array byte-array } { alien } define-primitive
640
641 \ fgetc { alien } { object } define-primitive
642
643 \ fwrite { string alien } { } define-primitive
644
645 \ fputc { object alien } { } define-primitive
646
647 \ fread { integer string } { object } define-primitive
648
649 \ fflush { alien } { } define-primitive
650
651 \ fseek { alien integer integer } { } define-primitive
652
653 \ fclose { alien } { } define-primitive
654
655 \ <wrapper> { object } { wrapper } define-primitive
656 \ <wrapper> make-foldable
657
658 \ (clone) { object } { object } define-primitive
659 \ (clone) make-flushable
660
661 \ <string> { integer integer } { string } define-primitive
662 \ <string> make-flushable
663
664 \ array>quotation { array } { quotation } define-primitive
665 \ array>quotation make-flushable
666
667 \ quotation-xt { quotation } { integer } define-primitive
668 \ quotation-xt make-flushable
669
670 \ <tuple> { tuple-layout } { tuple } define-primitive
671 \ <tuple> make-flushable
672
673 \ datastack { } { array } define-primitive
674 \ datastack make-flushable
675
676 \ check-datastack { array integer integer } { object } define-primitive
677 \ check-datastack make-flushable
678
679 \ retainstack { } { array } define-primitive
680 \ retainstack make-flushable
681
682 \ callstack { } { callstack } define-primitive
683 \ callstack make-flushable
684
685 \ callstack>array { callstack } { array } define-primitive
686 \ callstack>array make-flushable
687
688 \ (sleep) { integer } { } define-primitive
689
690 \ become { array array } { } define-primitive
691
692 \ innermost-frame-executing { callstack } { object } define-primitive
693
694 \ innermost-frame-scan { callstack } { fixnum } define-primitive
695
696 \ set-innermost-frame-quot { quotation callstack } { } define-primitive
697
698 \ dll-valid? { object } { object } define-primitive
699
700 \ modify-code-heap { array } { } define-primitive
701
702 \ unimplemented { } { } define-primitive
703
704 \ gc-reset { } { } define-primitive
705
706 \ gc-stats { } { array } define-primitive
707
708 \ jit-compile { quotation } { } define-primitive
709
710 \ lookup-method { object array } { word } define-primitive
711
712 \ reset-dispatch-stats { } { } define-primitive
713 \ dispatch-stats { } { array } define-primitive
714 \ reset-inline-cache-stats { } { } define-primitive
715 \ inline-cache-stats { } { array } define-primitive
716
717 \ optimized? { word } { object } define-primitive
718
719 \ strip-stack-traces { } { } define-primitive
720
721 \ <callback> { word } { alien } define-primitive