factor/basis/stack-checker/known-words/known-words.factor

591 lines
17 KiB
Factor
Raw Normal View History

2008-07-20 05:24:37 -04:00
! Copyright (C) 2004, 2008 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: fry accessors alien alien.accessors arrays byte-arrays
classes sequences.private continuations.private effects generic
hashtables hashtables.private io io.backend io.files
io.files.private io.streams.c kernel kernel.private math
math.private memory namespaces namespaces.private parser
prettyprint quotations quotations.private sbufs sbufs.private
sequences sequences.private slots.private strings
strings.private system threads.private classes.tuple
classes.tuple.private vectors vectors.private words definitions
words.private assocs summary compiler.units system.private
2008-08-23 16:05:46 -04:00
combinators locals.backend words.private quotations.private
2008-08-12 03:41:18 -04:00
stack-checker.state
stack-checker.backend
stack-checker.branches
stack-checker.errors
stack-checker.transforms
stack-checker.visitor
stack-checker.alien ;
2008-07-20 05:24:37 -04:00
IN: stack-checker.known-words
: infer-primitive ( word -- )
dup
[ "input-classes" word-prop ]
[ "default-output-classes" word-prop ] bi <effect>
apply-word/effect ;
2008-07-20 05:24:37 -04:00
{
{ drop (( x -- )) }
{ 2drop (( x y -- )) }
{ 3drop (( x y z -- )) }
{ dup (( x -- x x )) }
{ 2dup (( x y -- x y x y )) }
{ 3dup (( x y z -- x y z x y z )) }
{ rot (( x y z -- y z x )) }
{ -rot (( x y z -- z x y )) }
{ dupd (( x y -- x x y )) }
{ swapd (( x y z -- y x z )) }
{ nip (( x y -- y )) }
{ 2nip (( x y z -- z )) }
{ tuck (( x y -- y x y )) }
{ over (( x y -- x y x )) }
{ pick (( x y z -- x y z x )) }
{ swap (( x y -- y x )) }
2008-08-22 23:07:59 -04:00
} [ "shuffle" set-word-prop ] assoc-each
2008-07-20 05:24:37 -04:00
: infer-shuffle ( shuffle -- )
[ in>> length consume-d ] keep ! inputs shuffle
[ drop ] [ shuffle dup copy-values dup output-d ] 2bi ! inputs outputs copies
[ nip ] [ swap zip ] 2bi ! inputs copies mapping
#shuffle, ;
2008-07-20 05:24:37 -04:00
: infer-shuffle-word ( word -- )
2008-08-22 23:07:59 -04:00
"shuffle" word-prop infer-shuffle ;
2008-07-20 05:24:37 -04:00
: infer-declare ( -- )
2008-07-20 05:24:37 -04:00
pop-literal nip
[ length ensure-d ] keep zip
#declare, ;
2008-07-20 05:24:37 -04:00
GENERIC: infer-call* ( value known -- )
: infer-call ( value -- ) dup known infer-call* ;
M: literal infer-call*
[ 1array #drop, ] [ infer-literal-quot ] bi* ;
M: curried infer-call*
swap push-d
2008-11-03 04:06:11 -05:00
[ uncurry ] infer-quot-here
2008-07-20 05:24:37 -04:00
[ quot>> known pop-d [ set-known ] keep ]
[ obj>> known pop-d [ set-known ] keep ] bi
push-d infer-call ;
M: composed infer-call*
swap push-d
2008-11-03 04:06:11 -05:00
[ uncompose ] infer-quot-here
2008-07-20 05:24:37 -04:00
[ quot2>> known pop-d [ set-known ] keep ]
[ quot1>> known pop-d [ set-known ] keep ] bi
push-d push-d
1 infer->r pop-d infer-call
terminated? get [ 1 infer-r> pop-d infer-call ] unless ;
2008-07-20 05:24:37 -04:00
M: object infer-call*
\ literal-expected inference-warning ;
: infer-curry ( -- )
2008-07-20 05:24:37 -04:00
2 consume-d
dup first2 <curried> make-known
[ push-d ] [ 1array ] bi
\ curry #call, ;
2008-07-20 05:24:37 -04:00
: infer-compose ( -- )
2008-07-20 05:24:37 -04:00
2 consume-d
dup first2 <composed> make-known
[ push-d ] [ 1array ] bi
\ compose #call, ;
2008-07-20 05:24:37 -04:00
: infer-execute ( -- )
2008-07-20 05:24:37 -04:00
pop-literal nip
dup word? [
apply-object
] [
drop
"execute must be given a word" time-bomb
] if ;
2008-07-20 05:24:37 -04:00
: infer-<tuple-boa> ( -- )
2008-07-20 05:24:37 -04:00
\ <tuple-boa>
peek-d literal value>> second 1+ { tuple } <effect>
apply-word/effect ;
2008-07-20 05:24:37 -04:00
: infer-(throw) ( -- )
2008-07-20 05:24:37 -04:00
\ (throw)
peek-d literal value>> 2 + f <effect> t >>terminated?
apply-word/effect ;
: infer-exit ( -- )
\ exit
{ integer } { } t >>terminated? <effect>
apply-word/effect ;
2008-07-20 05:24:37 -04:00
: infer-load-locals ( -- )
pop-literal nip
[ dup reverse <effect> infer-shuffle ]
[ infer->r ]
bi ;
: infer-get-local ( -- )
pop-literal nip
[ infer-r> ]
[ dup 0 prefix <effect> infer-shuffle ]
[ infer->r ]
tri ;
: infer-drop-locals ( -- )
pop-literal nip
[ infer-r> ]
[ { } <effect> infer-shuffle ] bi ;
: infer-special ( word -- )
{
{ \ >r [ 1 infer->r ] }
{ \ r> [ 1 infer-r> ] }
{ \ declare [ infer-declare ] }
{ \ call [ pop-d infer-call ] }
2008-08-23 16:05:46 -04:00
{ \ (call) [ pop-d infer-call ] }
{ \ curry [ infer-curry ] }
{ \ compose [ infer-compose ] }
{ \ execute [ infer-execute ] }
2008-08-23 16:05:46 -04:00
{ \ (execute) [ infer-execute ] }
{ \ if [ infer-if ] }
{ \ dispatch [ infer-dispatch ] }
{ \ <tuple-boa> [ infer-<tuple-boa> ] }
{ \ (throw) [ infer-(throw) ] }
{ \ exit [ infer-exit ] }
{ \ load-locals [ infer-load-locals ] }
{ \ get-local [ infer-get-local ] }
{ \ drop-locals [ infer-drop-locals ] }
{ \ do-primitive [ \ do-primitive cannot-infer-effect ] }
2008-08-12 03:41:18 -04:00
{ \ alien-invoke [ infer-alien-invoke ] }
{ \ alien-indirect [ infer-alien-indirect ] }
{ \ alien-callback [ infer-alien-callback ] }
} case ;
{
2008-08-23 16:05:46 -04:00
>r r> declare call (call) curry compose execute (execute) if
dispatch <tuple-boa> (throw) load-locals get-local drop-locals
do-primitive alien-invoke alien-indirect alien-callback
2008-08-22 23:07:59 -04:00
} [ t "special" set-word-prop ] each
{ call execute dispatch load-locals get-local drop-locals }
[ t "no-compile" set-word-prop ] each
: non-inline-word ( word -- )
2008-08-30 03:31:27 -04:00
dup called-dependency depends-on
{
2008-08-22 23:07:59 -04:00
{ [ dup "shuffle" word-prop ] [ infer-shuffle-word ] }
{ [ dup "special" word-prop ] [ infer-special ] }
2008-08-31 20:17:04 -04:00
{ [ dup "primitive" word-prop ] [ infer-primitive ] }
{ [ dup "transform-quot" word-prop ] [ apply-transform ] }
{ [ dup "macro" word-prop ] [ apply-macro ] }
2008-08-22 23:07:59 -04:00
{ [ dup "cannot-infer" word-prop ] [ cannot-infer-effect ] }
{ [ dup "inferred-effect" word-prop ] [ cached-infer ] }
{ [ dup recursive-label ] [ call-recursive-word ] }
[ dup infer-word apply-word/effect ]
} cond ;
: define-primitive ( word inputs outputs -- )
2008-08-31 20:17:04 -04:00
[ 2drop t "primitive" set-word-prop ]
[ drop "input-classes" set-word-prop ]
[ nip "default-output-classes" set-word-prop ]
3tri ;
2008-07-20 05:24:37 -04:00
! Stack effects for all primitives
\ fixnum< { fixnum fixnum } { object } define-primitive
2008-07-20 05:24:37 -04:00
\ fixnum< make-foldable
\ fixnum<= { fixnum fixnum } { object } define-primitive
2008-07-20 05:24:37 -04:00
\ fixnum<= make-foldable
\ fixnum> { fixnum fixnum } { object } define-primitive
2008-07-20 05:24:37 -04:00
\ fixnum> make-foldable
\ fixnum>= { fixnum fixnum } { object } define-primitive
2008-07-20 05:24:37 -04:00
\ fixnum>= make-foldable
\ eq? { object object } { object } define-primitive
2008-07-20 05:24:37 -04:00
\ eq? make-foldable
\ bignum>fixnum { bignum } { fixnum } define-primitive
2008-07-20 05:24:37 -04:00
\ bignum>fixnum make-foldable
\ float>fixnum { float } { fixnum } define-primitive
2008-07-20 05:24:37 -04:00
\ bignum>fixnum make-foldable
\ fixnum>bignum { fixnum } { bignum } define-primitive
2008-07-20 05:24:37 -04:00
\ fixnum>bignum make-foldable
\ float>bignum { float } { bignum } define-primitive
2008-07-20 05:24:37 -04:00
\ float>bignum make-foldable
\ fixnum>float { fixnum } { float } define-primitive
2008-07-20 05:24:37 -04:00
\ fixnum>float make-foldable
\ bignum>float { bignum } { float } define-primitive
2008-07-20 05:24:37 -04:00
\ bignum>float make-foldable
\ <ratio> { integer integer } { ratio } define-primitive
2008-07-20 05:24:37 -04:00
\ <ratio> make-foldable
\ string>float { string } { float } define-primitive
2008-07-20 05:24:37 -04:00
\ string>float make-foldable
\ float>string { float } { string } define-primitive
2008-07-20 05:24:37 -04:00
\ float>string make-foldable
\ float>bits { real } { integer } define-primitive
2008-07-20 05:24:37 -04:00
\ float>bits make-foldable
\ double>bits { real } { integer } define-primitive
2008-07-20 05:24:37 -04:00
\ double>bits make-foldable
\ bits>float { integer } { float } define-primitive
2008-07-20 05:24:37 -04:00
\ bits>float make-foldable
\ bits>double { integer } { float } define-primitive
2008-07-20 05:24:37 -04:00
\ bits>double make-foldable
\ <complex> { real real } { complex } define-primitive
2008-07-20 05:24:37 -04:00
\ <complex> make-foldable
\ fixnum+ { fixnum fixnum } { integer } define-primitive
2008-07-20 05:24:37 -04:00
\ fixnum+ make-foldable
\ fixnum+fast { fixnum fixnum } { fixnum } define-primitive
2008-07-20 05:24:37 -04:00
\ fixnum+fast make-foldable
\ fixnum- { fixnum fixnum } { integer } define-primitive
2008-07-20 05:24:37 -04:00
\ fixnum- make-foldable
\ fixnum-fast { fixnum fixnum } { fixnum } define-primitive
2008-07-20 05:24:37 -04:00
\ fixnum-fast make-foldable
\ fixnum* { fixnum fixnum } { integer } define-primitive
2008-07-20 05:24:37 -04:00
\ fixnum* make-foldable
\ fixnum*fast { fixnum fixnum } { fixnum } define-primitive
2008-07-20 05:24:37 -04:00
\ fixnum*fast make-foldable
\ fixnum/i { fixnum fixnum } { integer } define-primitive
2008-07-20 05:24:37 -04:00
\ fixnum/i make-foldable
\ fixnum-mod { fixnum fixnum } { fixnum } define-primitive
2008-07-20 05:24:37 -04:00
\ fixnum-mod make-foldable
\ fixnum/mod { fixnum fixnum } { integer fixnum } define-primitive
2008-07-20 05:24:37 -04:00
\ fixnum/mod make-foldable
\ fixnum-bitand { fixnum fixnum } { fixnum } define-primitive
2008-07-20 05:24:37 -04:00
\ fixnum-bitand make-foldable
\ fixnum-bitor { fixnum fixnum } { fixnum } define-primitive
2008-07-20 05:24:37 -04:00
\ fixnum-bitor make-foldable
\ fixnum-bitxor { fixnum fixnum } { fixnum } define-primitive
2008-07-20 05:24:37 -04:00
\ fixnum-bitxor make-foldable
\ fixnum-bitnot { fixnum } { fixnum } define-primitive
2008-07-20 05:24:37 -04:00
\ fixnum-bitnot make-foldable
\ fixnum-shift { fixnum fixnum } { integer } define-primitive
2008-07-20 05:24:37 -04:00
\ fixnum-shift make-foldable
\ fixnum-shift-fast { fixnum fixnum } { fixnum } define-primitive
2008-07-20 05:24:37 -04:00
\ fixnum-shift-fast make-foldable
\ bignum= { bignum bignum } { object } define-primitive
2008-07-20 05:24:37 -04:00
\ bignum= make-foldable
\ bignum+ { bignum bignum } { bignum } define-primitive
2008-07-20 05:24:37 -04:00
\ bignum+ make-foldable
\ bignum- { bignum bignum } { bignum } define-primitive
2008-07-20 05:24:37 -04:00
\ bignum- make-foldable
\ bignum* { bignum bignum } { bignum } define-primitive
2008-07-20 05:24:37 -04:00
\ bignum* make-foldable
\ bignum/i { bignum bignum } { bignum } define-primitive
2008-07-20 05:24:37 -04:00
\ bignum/i make-foldable
\ bignum-mod { bignum bignum } { bignum } define-primitive
2008-07-20 05:24:37 -04:00
\ bignum-mod make-foldable
\ bignum/mod { bignum bignum } { bignum bignum } define-primitive
2008-07-20 05:24:37 -04:00
\ bignum/mod make-foldable
\ bignum-bitand { bignum bignum } { bignum } define-primitive
2008-07-20 05:24:37 -04:00
\ bignum-bitand make-foldable
\ bignum-bitor { bignum bignum } { bignum } define-primitive
2008-07-20 05:24:37 -04:00
\ bignum-bitor make-foldable
\ bignum-bitxor { bignum bignum } { bignum } define-primitive
2008-07-20 05:24:37 -04:00
\ bignum-bitxor make-foldable
\ bignum-bitnot { bignum } { bignum } define-primitive
2008-07-20 05:24:37 -04:00
\ bignum-bitnot make-foldable
2008-08-29 01:26:47 -04:00
\ bignum-shift { bignum fixnum } { bignum } define-primitive
2008-07-20 05:24:37 -04:00
\ bignum-shift make-foldable
\ bignum< { bignum bignum } { object } define-primitive
2008-07-20 05:24:37 -04:00
\ bignum< make-foldable
\ bignum<= { bignum bignum } { object } define-primitive
2008-07-20 05:24:37 -04:00
\ bignum<= make-foldable
\ bignum> { bignum bignum } { object } define-primitive
2008-07-20 05:24:37 -04:00
\ bignum> make-foldable
\ bignum>= { bignum bignum } { object } define-primitive
2008-07-20 05:24:37 -04:00
\ bignum>= make-foldable
\ bignum-bit? { bignum integer } { object } define-primitive
2008-07-20 05:24:37 -04:00
\ bignum-bit? make-foldable
\ bignum-log2 { bignum } { bignum } define-primitive
2008-07-20 05:24:37 -04:00
\ bignum-log2 make-foldable
\ byte-array>bignum { byte-array } { bignum } define-primitive
2008-07-20 05:24:37 -04:00
\ byte-array>bignum make-foldable
\ float= { float float } { object } define-primitive
2008-07-20 05:24:37 -04:00
\ float= make-foldable
\ float+ { float float } { float } define-primitive
2008-07-20 05:24:37 -04:00
\ float+ make-foldable
\ float- { float float } { float } define-primitive
2008-07-20 05:24:37 -04:00
\ float- make-foldable
\ float* { float float } { float } define-primitive
2008-07-20 05:24:37 -04:00
\ float* make-foldable
\ float/f { float float } { float } define-primitive
2008-07-20 05:24:37 -04:00
\ float/f make-foldable
\ float< { float float } { object } define-primitive
2008-07-20 05:24:37 -04:00
\ float< make-foldable
\ float-mod { float float } { float } define-primitive
2008-07-20 05:24:37 -04:00
\ float-mod make-foldable
\ float<= { float float } { object } define-primitive
2008-07-20 05:24:37 -04:00
\ float<= make-foldable
\ float> { float float } { object } define-primitive
2008-07-20 05:24:37 -04:00
\ float> make-foldable
\ float>= { float float } { object } define-primitive
2008-07-20 05:24:37 -04:00
\ float>= make-foldable
\ <word> { object object } { word } define-primitive
2008-07-20 05:24:37 -04:00
\ <word> make-flushable
\ word-xt { word } { integer integer } define-primitive
2008-07-20 05:24:37 -04:00
\ word-xt make-flushable
\ getenv { fixnum } { object } define-primitive
2008-07-20 05:24:37 -04:00
\ getenv make-flushable
\ setenv { object fixnum } { } define-primitive
2008-07-20 05:24:37 -04:00
\ (exists?) { string } { object } define-primitive
2008-07-20 05:24:37 -04:00
\ gc { } { } define-primitive
2008-07-20 05:24:37 -04:00
\ gc-stats { } { array } define-primitive
2008-07-20 05:24:37 -04:00
\ save-image { string } { } define-primitive
2008-07-20 05:24:37 -04:00
\ save-image-and-exit { string } { } define-primitive
2008-07-20 05:24:37 -04:00
\ data-room { } { integer integer array } define-primitive
2008-07-20 05:24:37 -04:00
\ data-room make-flushable
\ code-room { } { integer integer integer integer } define-primitive
2008-07-20 05:24:37 -04:00
\ code-room make-flushable
\ millis { } { integer } define-primitive
2008-07-20 05:24:37 -04:00
\ millis make-flushable
\ tag { object } { fixnum } define-primitive
2008-07-20 05:24:37 -04:00
\ tag make-foldable
\ dlopen { string } { dll } define-primitive
2008-07-20 05:24:37 -04:00
\ dlsym { string object } { c-ptr } define-primitive
2008-07-20 05:24:37 -04:00
\ dlclose { dll } { } define-primitive
2008-07-20 05:24:37 -04:00
\ <byte-array> { integer } { byte-array } define-primitive
2008-07-20 05:24:37 -04:00
\ <byte-array> make-flushable
\ <displaced-alien> { integer c-ptr } { c-ptr } define-primitive
2008-07-20 05:24:37 -04:00
\ <displaced-alien> make-flushable
\ alien-signed-cell { c-ptr integer } { integer } define-primitive
2008-07-20 05:24:37 -04:00
\ alien-signed-cell make-flushable
\ set-alien-signed-cell { integer c-ptr integer } { } define-primitive
2008-07-20 05:24:37 -04:00
\ alien-unsigned-cell { c-ptr integer } { integer } define-primitive
2008-07-20 05:24:37 -04:00
\ alien-unsigned-cell make-flushable
\ set-alien-unsigned-cell { integer c-ptr integer } { } define-primitive
2008-07-20 05:24:37 -04:00
\ alien-signed-8 { c-ptr integer } { integer } define-primitive
2008-07-20 05:24:37 -04:00
\ alien-signed-8 make-flushable
\ set-alien-signed-8 { integer c-ptr integer } { } define-primitive
2008-07-20 05:24:37 -04:00
\ alien-unsigned-8 { c-ptr integer } { integer } define-primitive
2008-07-20 05:24:37 -04:00
\ alien-unsigned-8 make-flushable
\ set-alien-unsigned-8 { integer c-ptr integer } { } define-primitive
2008-07-20 05:24:37 -04:00
\ alien-signed-4 { c-ptr integer } { integer } define-primitive
2008-07-20 05:24:37 -04:00
\ alien-signed-4 make-flushable
\ set-alien-signed-4 { integer c-ptr integer } { } define-primitive
2008-07-20 05:24:37 -04:00
\ alien-unsigned-4 { c-ptr integer } { integer } define-primitive
2008-07-20 05:24:37 -04:00
\ alien-unsigned-4 make-flushable
\ set-alien-unsigned-4 { integer c-ptr integer } { } define-primitive
2008-07-20 05:24:37 -04:00
\ alien-signed-2 { c-ptr integer } { fixnum } define-primitive
2008-07-20 05:24:37 -04:00
\ alien-signed-2 make-flushable
\ set-alien-signed-2 { integer c-ptr integer } { } define-primitive
2008-07-20 05:24:37 -04:00
\ alien-unsigned-2 { c-ptr integer } { fixnum } define-primitive
2008-07-20 05:24:37 -04:00
\ alien-unsigned-2 make-flushable
\ set-alien-unsigned-2 { integer c-ptr integer } { } define-primitive
2008-07-20 05:24:37 -04:00
\ alien-signed-1 { c-ptr integer } { fixnum } define-primitive
2008-07-20 05:24:37 -04:00
\ alien-signed-1 make-flushable
\ set-alien-signed-1 { integer c-ptr integer } { } define-primitive
2008-07-20 05:24:37 -04:00
\ alien-unsigned-1 { c-ptr integer } { fixnum } define-primitive
2008-07-20 05:24:37 -04:00
\ alien-unsigned-1 make-flushable
\ set-alien-unsigned-1 { integer c-ptr integer } { } define-primitive
2008-07-20 05:24:37 -04:00
\ alien-float { c-ptr integer } { float } define-primitive
2008-07-20 05:24:37 -04:00
\ alien-float make-flushable
\ set-alien-float { float c-ptr integer } { } define-primitive
2008-07-20 05:24:37 -04:00
\ alien-double { c-ptr integer } { float } define-primitive
2008-07-20 05:24:37 -04:00
\ alien-double make-flushable
\ set-alien-double { float c-ptr integer } { } define-primitive
2008-07-20 05:24:37 -04:00
\ alien-cell { c-ptr integer } { simple-c-ptr } define-primitive
2008-07-20 05:24:37 -04:00
\ alien-cell make-flushable
\ set-alien-cell { c-ptr c-ptr integer } { } define-primitive
2008-07-20 05:24:37 -04:00
\ alien-address { alien } { integer } define-primitive
2008-07-20 05:24:37 -04:00
\ alien-address make-flushable
\ slot { object fixnum } { object } define-primitive
2008-07-20 05:24:37 -04:00
\ slot make-flushable
\ set-slot { object object fixnum } { } define-primitive
2008-07-20 05:24:37 -04:00
\ string-nth { fixnum string } { fixnum } define-primitive
2008-07-20 05:24:37 -04:00
\ string-nth make-flushable
\ set-string-nth { fixnum fixnum string } { } define-primitive
2008-07-20 05:24:37 -04:00
\ resize-array { integer array } { array } define-primitive
2008-07-20 05:24:37 -04:00
\ resize-array make-flushable
\ resize-byte-array { integer byte-array } { byte-array } define-primitive
2008-07-20 05:24:37 -04:00
\ resize-byte-array make-flushable
\ resize-string { integer string } { string } define-primitive
2008-07-20 05:24:37 -04:00
\ resize-string make-flushable
\ <array> { integer object } { array } define-primitive
2008-07-20 05:24:37 -04:00
\ <array> make-flushable
\ begin-scan { } { } define-primitive
2008-07-20 05:24:37 -04:00
\ next-object { } { object } define-primitive
2008-07-20 05:24:37 -04:00
\ end-scan { } { } define-primitive
2008-07-20 05:24:37 -04:00
\ size { object } { fixnum } define-primitive
2008-07-20 05:24:37 -04:00
\ size make-flushable
\ die { } { } define-primitive
2008-07-20 05:24:37 -04:00
\ fopen { string string } { alien } define-primitive
2008-07-20 05:24:37 -04:00
\ fgetc { alien } { object } define-primitive
2008-07-20 05:24:37 -04:00
\ fwrite { string alien } { } define-primitive
2008-07-20 05:24:37 -04:00
\ fputc { object alien } { } define-primitive
2008-07-20 05:24:37 -04:00
\ fread { integer string } { object } define-primitive
2008-07-20 05:24:37 -04:00
\ fflush { alien } { } define-primitive
2008-07-20 05:24:37 -04:00
\ fclose { alien } { } define-primitive
2008-07-20 05:24:37 -04:00
\ <wrapper> { object } { wrapper } define-primitive
2008-07-20 05:24:37 -04:00
\ <wrapper> make-foldable
\ (clone) { object } { object } define-primitive
2008-07-20 05:24:37 -04:00
\ (clone) make-flushable
\ <string> { integer integer } { string } define-primitive
2008-07-20 05:24:37 -04:00
\ <string> make-flushable
\ array>quotation { array } { quotation } define-primitive
2008-07-20 05:24:37 -04:00
\ array>quotation make-flushable
\ quotation-xt { quotation } { integer } define-primitive
2008-07-20 05:24:37 -04:00
\ quotation-xt make-flushable
\ <tuple> { tuple-layout } { tuple } define-primitive
2008-07-20 05:24:37 -04:00
\ <tuple> make-flushable
\ datastack { } { array } define-primitive
2008-07-20 05:24:37 -04:00
\ datastack make-flushable
\ retainstack { } { array } define-primitive
2008-07-20 05:24:37 -04:00
\ retainstack make-flushable
\ callstack { } { callstack } define-primitive
2008-07-20 05:24:37 -04:00
\ callstack make-flushable
\ callstack>array { callstack } { array } define-primitive
2008-07-20 05:24:37 -04:00
\ callstack>array make-flushable
\ (sleep) { integer } { } define-primitive
2008-07-20 05:24:37 -04:00
\ become { array array } { } define-primitive
2008-07-20 05:24:37 -04:00
\ innermost-frame-quot { callstack } { quotation } define-primitive
2008-07-20 05:24:37 -04:00
\ innermost-frame-scan { callstack } { fixnum } define-primitive
2008-07-20 05:24:37 -04:00
\ set-innermost-frame-quot { quotation callstack } { } define-primitive
2008-07-20 05:24:37 -04:00
\ dll-valid? { object } { object } define-primitive
2008-07-20 05:24:37 -04:00
\ modify-code-heap { array object } { } define-primitive
2008-07-20 05:24:37 -04:00
\ unimplemented { } { } define-primitive