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

714 lines
20 KiB
Factor
Raw Normal View History

! Copyright (C) 2004, 2009 Slava Pestov, Daniel Ehrenberg.
2008-07-20 05:24:37 -04:00
! See http://factorcode.org/license.txt for BSD license.
USING: fry accessors alien alien.accessors arrays byte-arrays
classes continuations.private effects generic hashtables
hashtables.private io io.backend io.files io.files.private
io.streams.c kernel kernel.private math math.private
math.parser.private memory memory.private namespaces
namespaces.private parser 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
words.private definitions assocs summary compiler.units
system.private combinators combinators.short-circuit locals
locals.backend locals.types combinators.private
stack-checker.values generic.single generic.single.private
2009-03-26 00:00:19 -04:00
alien.libraries
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
: check-declaration ( declaration -- declaration )
dup { [ array? ] [ [ class? ] all? ] } 1&&
[ bad-declaration-error ] unless ;
: infer-declare ( -- )
pop-literal nip check-declaration
[ length ensure-d ] keep zip
#declare, ;
2008-07-20 05:24:37 -04:00
\ declare [ infer-declare ] "special" set-word-prop
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
\ call [ infer-call ] "special" set-word-prop
\ (call) [ infer-call ] "special" set-word-prop
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 quotation" literal-expected ;
2008-07-20 05:24:37 -04:00
: infer-ndip ( word n -- )
[ literals get ] 2dip
[ '[ _ def>> infer-quot-here ] ]
[ '[ _ [ pop ] dip [ infer->r infer-quot-here ] [ infer-r> ] bi ] ] bi*
2008-12-04 07:02:49 -05:00
if-empty ;
: infer-dip ( -- ) \ dip 1 infer-ndip ;
\ dip [ infer-dip ] "special" set-word-prop
: infer-2dip ( -- ) \ 2dip 2 infer-ndip ;
\ 2dip [ infer-2dip ] "special" set-word-prop
: infer-3dip ( -- ) \ 3dip 3 infer-ndip ;
\ 3dip [ infer-3dip ] "special" set-word-prop
: infer-builder ( quot word -- )
[
[ 2 consume-d ] dip
[ dup first2 ] dip call make-known
[ push-d ] [ 1array ] bi
] dip #call, ; inline
: infer-curry ( -- ) [ <curried> ] \ curry infer-builder ;
\ curry [ infer-curry ] "special" set-word-prop
: infer-compose ( -- ) [ <composed> ] \ compose infer-builder ;
2008-07-20 05:24:37 -04:00
\ compose [ infer-compose ] "special" set-word-prop
ERROR: bad-executable obj ;
M: bad-executable summary
drop "execute must be given a word" ;
: infer-execute ( -- )
2008-07-20 05:24:37 -04:00
pop-literal nip
dup word? [
apply-object
] [
\ bad-executable boa time-bomb
] if ;
2008-07-20 05:24:37 -04:00
\ execute [ infer-execute ] "special" set-word-prop
\ (execute) [ infer-execute ] "special" set-word-prop
: 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
\ <tuple-boa> [ infer-<tuple-boa> ] "special" set-word-prop
\ <tuple-boa> t "flushable" set-word-prop
: infer-effect-unsafe ( word -- )
pop-literal nip
add-effect-input
apply-word/effect ;
: infer-execute-effect-unsafe ( -- )
\ (execute) infer-effect-unsafe ;
\ execute-effect-unsafe [ infer-execute-effect-unsafe ] "special" set-word-prop
: infer-call-effect-unsafe ( -- )
\ call infer-effect-unsafe ;
\ call-effect-unsafe [ infer-call-effect-unsafe ] "special" set-word-prop
: infer-exit ( -- )
2009-02-27 00:30:48 -05:00
\ exit (( n -- * )) apply-word/effect ;
2008-07-20 05:24:37 -04:00
\ exit [ infer-exit ] "special" set-word-prop
: infer-load-locals ( -- )
pop-literal nip
consume-d dup copy-values dup output-r
[ [ f f ] dip ] [ swap zip ] 2bi #shuffle, ;
\ load-locals [ infer-load-locals ] "special" set-word-prop
: infer-load-local ( -- )
1 infer->r ;
\ load-local [ infer-load-local ] "special" set-word-prop
: 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,
] ;
\ get-local [ infer-get-local ] "special" set-word-prop
: infer-drop-locals ( -- )
f f pop-literal nip consume-r f f #shuffle, ;
\ drop-locals [ infer-drop-locals ] "special" set-word-prop
: infer-call-effect ( word -- )
1 ensure-d first literal value>>
add-effect-input add-effect-input
apply-word/effect ;
{ call-effect execute-effect } [
dup t "no-compile" set-word-prop
dup '[ _ infer-call-effect ] "special" set-word-prop
] each
\ do-primitive [ unknown-primitive-error ] "special" set-word-prop
\ if [ infer-if ] "special" set-word-prop
\ dispatch [ infer-dispatch ] "special" set-word-prop
\ alien-invoke [ infer-alien-invoke ] "special" set-word-prop
\ alien-indirect [ infer-alien-indirect ] "special" set-word-prop
\ alien-callback [ infer-alien-callback ] "special" set-word-prop
: infer-special ( word -- )
"special" word-prop call( -- ) ;
: 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 ;
{
2009-05-10 16:28:22 -04:00
declare call (call) dip 2dip 3dip curry compose
execute (execute) call-effect-unsafe execute-effect-unsafe if
2009-03-16 21:11:36 -04:00
dispatch <tuple-boa> exit load-local load-locals get-local
drop-locals do-primitive alien-invoke alien-indirect
alien-callback
} [ t "no-compile" set-word-prop ] each
! Exceptions to the above
\ curry f "no-compile" set-word-prop
\ compose f "no-compile" set-word-prop
2009-04-22 00:18:19 -04:00
! More words not to compile
2009-04-13 00:01:14 -04:00
\ clear t "no-compile" set-word-prop
: 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 ] }
{ [ dup local? ] [ infer-local-reader ] }
{ [ dup local-reader? ] [ infer-local-reader ] }
{ [ dup local-writer? ] [ infer-local-writer ] }
{ [ dup local-word? ] [ infer-local-word ] }
[ infer-word ]
} 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
\ (string>float) { byte-array } { float } define-primitive
\ (string>float) make-foldable
2008-07-20 05:24:37 -04:00
\ (float>string) { float } { byte-array } define-primitive
\ (float>string) make-foldable
2008-07-20 05:24:37 -04:00
\ 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
\ 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/i-fast { fixnum fixnum } { fixnum } define-primitive
\ fixnum/i-fast 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/mod-fast { fixnum fixnum } { fixnum fixnum } define-primitive
\ fixnum/mod-fast 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-mod { float float } { float } define-primitive
2008-07-20 05:24:37 -04:00
\ float-mod make-foldable
\ float< { float float } { object } define-primitive
\ 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
\ float>= { float float } { object } define-primitive
2008-07-20 05:24:37 -04:00
\ float>= make-foldable
\ float-u< { float float } { object } define-primitive
\ float-u< make-foldable
\ float-u<= { float float } { object } define-primitive
\ float-u<= make-foldable
\ float-u> { float float } { object } define-primitive
\ float-u> make-foldable
\ float-u>= { float float } { object } define-primitive
\ float-u>= make-foldable
\ (word) { object object object } { word } define-primitive
\ (word) make-flushable
2008-07-20 05:24:37 -04:00
\ 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) { byte-array } { } define-primitive
2008-07-20 05:24:37 -04:00
\ (save-image-and-exit) { byte-array } { } 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) { byte-array } { dll } define-primitive
2008-07-20 05:24:37 -04:00
\ (dlsym) { byte-array 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) { byte-array byte-array } { 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
\ fseek { alien integer integer } { } define-primitive
\ 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
\ check-datastack { array integer integer } { object } define-primitive
\ check-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-executing { callstack } { object } 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 } { } 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
2009-04-24 16:31:06 -04:00
2009-04-28 17:58:05 -04:00
\ lookup-method { object array } { word } define-primitive
\ reset-dispatch-stats { } { } define-primitive
\ dispatch-stats { } { array } define-primitive
\ reset-inline-cache-stats { } { } define-primitive
\ inline-cache-stats { } { array } define-primitive
\ optimized? { word } { object } define-primitive