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

655 lines
19 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
2008-12-08 15:58:00 -05:00
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-12-08 17:02:31 -05:00
combinators locals locals.backend locals.types words.private
quotations.private stack-checker.values
stack-checker.alien
2008-08-12 03:41:18 -04:00
stack-checker.state
stack-checker.errors
stack-checker.visitor
2008-08-12 03:41:18 -04:00
stack-checker.backend
stack-checker.branches
stack-checker.transforms
stack-checker.recursive-state ;
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 f f ] [ swap zip ] 2bi ! in-d out-d in-r out-r 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 -- )
2008-12-04 07:02:49 -05:00
: (infer-call) ( value -- ) dup known infer-call* ;
: infer-call ( -- ) pop-d (infer-call) ;
2008-07-20 05:24:37 -04:00
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
2008-12-04 07:02:49 -05:00
push-d (infer-call) ;
2008-07-20 05:24:37 -04:00
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
2008-12-04 07:02:49 -05:00
1 infer->r infer-call
terminated? get [ 1 infer-r> infer-call ] unless ;
2008-07-20 05:24:37 -04:00
M: object infer-call*
\ literal-expected inference-warning ;
: infer-slip ( -- )
2008-12-04 07:02:49 -05:00
1 infer->r infer-call 1 infer-r> ;
: infer-2slip ( -- )
2008-12-04 07:02:49 -05:00
2 infer->r infer-call 2 infer-r> ;
: infer-3slip ( -- )
2008-12-04 07:02:49 -05:00
3 infer->r infer-call 3 infer-r> ;
: infer-dip ( -- )
literals get
[ \ dip def>> infer-quot-here ]
[ pop 1 infer->r infer-quot-here 1 infer-r> ]
if-empty ;
: infer-2dip ( -- )
literals get
[ \ 2dip def>> infer-quot-here ]
[ pop 2 infer->r infer-quot-here 2 infer-r> ]
if-empty ;
: infer-3dip ( -- )
literals get
[ \ 3dip def>> infer-quot-here ]
[ pop 3 infer->r infer-quot-here 3 infer-r> ]
if-empty ;
: 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
consume-d dup copy-values dup output-r
[ [ f f ] dip ] [ swap zip ] 2bi #shuffle, ;
: infer-get-local ( -- )
[let* | n [ pop-literal nip 1 swap - ]
in-r [ n consume-r ]
out-d [ in-r first copy-value 1array ]
out-r [ in-r copy-values ] |
out-d output-d
out-r output-r
f out-d in-r out-r
out-r in-r zip out-d first in-r first 2array suffix
#shuffle,
] ;
: infer-drop-locals ( -- )
f f pop-literal nip consume-r f f #shuffle, ;
: infer-special ( word -- )
{
{ \ declare [ infer-declare ] }
2008-12-04 07:02:49 -05:00
{ \ call [ infer-call ] }
{ \ (call) [ infer-call ] }
{ \ slip [ infer-slip ] }
{ \ 2slip [ infer-2slip ] }
{ \ 3slip [ infer-3slip ] }
2008-12-04 07:02:49 -05:00
{ \ dip [ infer-dip ] }
{ \ 2dip [ infer-2dip ] }
{ \ 3dip [ infer-3dip ] }
{ \ 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 ] }
2008-12-17 20:23:37 -05:00
{ \ load-local [ 1 infer->r ] }
{ \ load-locals [ infer-load-locals ] }
{ \ get-local [ infer-get-local ] }
{ \ drop-locals [ infer-drop-locals ] }
{ \ do-primitive [ unknown-primitive-error inference-warning ] }
2008-08-12 03:41:18 -04:00
{ \ alien-invoke [ infer-alien-invoke ] }
{ \ alien-indirect [ infer-alien-indirect ] }
{ \ alien-callback [ infer-alien-callback ] }
} case ;
: infer-local-reader ( word -- )
(( -- value )) apply-word/effect ;
: infer-local-writer ( word -- )
(( value -- )) apply-word/effect ;
: infer-local-word ( word -- )
"local-word-def" word-prop infer-quot-here ;
{
2008-12-17 20:17:37 -05:00
declare call (call) slip 2slip 3slip dip 2dip 3dip
2008-12-04 07:02:49 -05:00
curry compose execute (execute) if dispatch <tuple-boa>
2008-12-17 20:23:37 -05:00
(throw) load-local load-locals get-local drop-locals do-primitive
2008-12-04 07:02:49 -05:00
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 local? ] [ infer-local-reader ] }
{ [ dup local-reader? ] [ infer-local-reader ] }
{ [ dup local-writer? ] [ infer-local-writer ] }
{ [ dup local-word? ] [ infer-local-word ] }
{ [ dup recursive-word? ] [ 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
\ both-fixnums? { object object } { object } define-primitive
\ 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
\ micros { } { integer } define-primitive
\ micros make-flushable
2008-07-20 05:24:37 -04:00
\ 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
\ (byte-array) { integer } { byte-array } define-primitive
\ (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-slow { fixnum fixnum string } { } define-primitive
\ set-string-nth-fast { 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
\ gc-reset { } { } define-primitive
\ gc-stats { } { array } define-primitive
\ jit-compile { quotation } { } define-primitive