2005-01-29 16:39:30 -05:00
|
|
|
! Copyright (C) 2004, 2005 Slava Pestov.
|
|
|
|
! See http://factor.sf.net/license.txt for BSD license.
|
2004-12-15 16:57:29 -05:00
|
|
|
IN: image
|
2005-07-31 23:38:33 -04:00
|
|
|
USING: alien assembler compiler errors files generic generic
|
|
|
|
hashtables hashtables io io-internals kernel kernel
|
|
|
|
kernel-internals lists lists math math math-internals memory
|
|
|
|
namespaces parser parser profiler sequences strings unparser
|
|
|
|
vectors vectors words words ;
|
|
|
|
|
|
|
|
"Creating primitives and basic runtime structures..." print
|
2004-12-15 16:57:29 -05:00
|
|
|
|
2005-04-10 18:58:30 -04:00
|
|
|
! This symbol needs the same hashcode in the target as in the
|
|
|
|
! host.
|
|
|
|
vocabularies
|
|
|
|
|
2004-12-15 16:57:29 -05:00
|
|
|
! Bring up a bare cross-compiling vocabulary.
|
2005-03-06 19:46:29 -05:00
|
|
|
"syntax" vocab clone
|
|
|
|
"generic" vocab clone
|
2004-12-15 16:57:29 -05:00
|
|
|
|
|
|
|
<namespace> vocabularies set
|
2005-08-15 03:25:39 -04:00
|
|
|
|
|
|
|
! Hack
|
|
|
|
{{ [[ { } null ]] }} typemap set
|
|
|
|
|
2005-07-30 22:14:34 -04:00
|
|
|
num-types empty-vector builtins set
|
2005-03-26 20:40:29 -05:00
|
|
|
<namespace> crossref set
|
2005-03-07 22:11:36 -05:00
|
|
|
|
2004-12-15 16:57:29 -05:00
|
|
|
vocabularies get [
|
|
|
|
"generic" set
|
|
|
|
"syntax" set
|
2005-04-10 18:58:30 -04:00
|
|
|
reveal
|
2004-12-15 16:57:29 -05:00
|
|
|
] bind
|
|
|
|
|
2005-07-27 20:13:11 -04:00
|
|
|
: set-stack-effect ( { vocab word effect } -- )
|
|
|
|
3unseq >r unit search r> dup string? [
|
2005-04-07 20:02:59 -04:00
|
|
|
"stack-effect" set-word-prop
|
|
|
|
] [
|
|
|
|
"infer-effect" set-word-prop
|
|
|
|
] ifte ;
|
|
|
|
|
2005-07-30 22:14:34 -04:00
|
|
|
: make-primitive ( { vocab word effect } n -- )
|
|
|
|
>r dup 2unseq create r> f define set-stack-effect ;
|
2005-04-07 20:02:59 -04:00
|
|
|
|
2005-07-30 22:14:34 -04:00
|
|
|
{
|
2005-07-27 20:13:11 -04:00
|
|
|
{ "execute" "words" [ [ word ] [ ] ] }
|
|
|
|
{ "call" "kernel" [ [ general-list ] [ ] ] }
|
|
|
|
{ "ifte" "kernel" [ [ object general-list general-list ] [ ] ] }
|
|
|
|
{ "dispatch" "kernel-internals" [ [ fixnum vector ] [ ] ] }
|
|
|
|
{ "cons" "lists" [ [ object object ] [ cons ] ] }
|
|
|
|
{ "<vector>" "vectors" [ [ integer ] [ vector ] ] }
|
|
|
|
{ "rehash-string" "strings" [ [ string ] [ ] ] }
|
|
|
|
{ "<sbuf>" "strings" [ [ integer ] [ sbuf ] ] }
|
|
|
|
{ "sbuf>string" "strings" [ [ sbuf ] [ string ] ] }
|
|
|
|
{ ">fixnum" "math" [ [ number ] [ fixnum ] ] }
|
|
|
|
{ ">bignum" "math" [ [ number ] [ bignum ] ] }
|
|
|
|
{ ">float" "math" [ [ number ] [ float ] ] }
|
|
|
|
{ "(fraction>)" "math-internals" [ [ integer integer ] [ rational ] ] }
|
|
|
|
{ "str>float" "parser" [ [ string ] [ float ] ] }
|
|
|
|
{ "(unparse-float)" "unparser" [ [ float ] [ string ] ] }
|
|
|
|
{ "float>bits" "math" [ [ real ] [ integer ] ] }
|
|
|
|
{ "double>bits" "math" [ [ real ] [ integer ] ] }
|
|
|
|
{ "bits>float" "math" [ [ integer ] [ float ] ] }
|
|
|
|
{ "bits>double" "math" [ [ integer ] [ float ] ] }
|
|
|
|
{ "<complex>" "math-internals" [ [ real real ] [ number ] ] }
|
|
|
|
{ "fixnum+" "math-internals" [ [ fixnum fixnum ] [ integer ] ] }
|
|
|
|
{ "fixnum-" "math-internals" [ [ fixnum fixnum ] [ integer ] ] }
|
|
|
|
{ "fixnum*" "math-internals" [ [ fixnum fixnum ] [ integer ] ] }
|
|
|
|
{ "fixnum/i" "math-internals" [ [ fixnum fixnum ] [ integer ] ] }
|
|
|
|
{ "fixnum/f" "math-internals" [ [ fixnum fixnum ] [ integer ] ] }
|
|
|
|
{ "fixnum-mod" "math-internals" [ [ fixnum fixnum ] [ fixnum ] ] }
|
|
|
|
{ "fixnum/mod" "math-internals" [ [ fixnum fixnum ] [ integer fixnum ] ] }
|
|
|
|
{ "fixnum-bitand" "math-internals" [ [ fixnum fixnum ] [ fixnum ] ] }
|
|
|
|
{ "fixnum-bitor" "math-internals" [ [ fixnum fixnum ] [ fixnum ] ] }
|
|
|
|
{ "fixnum-bitxor" "math-internals" [ [ fixnum fixnum ] [ fixnum ] ] }
|
|
|
|
{ "fixnum-bitnot" "math-internals" [ [ fixnum ] [ fixnum ] ] }
|
2005-08-13 23:39:46 -04:00
|
|
|
{ "fixnum-shift" "math-internals" [ [ fixnum fixnum ] [ integer ] ] }
|
2005-07-27 20:13:11 -04:00
|
|
|
{ "fixnum<" "math-internals" [ [ fixnum fixnum ] [ boolean ] ] }
|
|
|
|
{ "fixnum<=" "math-internals" [ [ fixnum fixnum ] [ boolean ] ] }
|
|
|
|
{ "fixnum>" "math-internals" [ [ fixnum fixnum ] [ boolean ] ] }
|
|
|
|
{ "fixnum>=" "math-internals" [ [ fixnum fixnum ] [ boolean ] ] }
|
|
|
|
{ "bignum=" "math-internals" [ [ bignum bignum ] [ boolean ] ] }
|
|
|
|
{ "bignum+" "math-internals" [ [ bignum bignum ] [ bignum ] ] }
|
|
|
|
{ "bignum-" "math-internals" [ [ bignum bignum ] [ bignum ] ] }
|
|
|
|
{ "bignum*" "math-internals" [ [ bignum bignum ] [ bignum ] ] }
|
|
|
|
{ "bignum/i" "math-internals" [ [ bignum bignum ] [ bignum ] ] }
|
|
|
|
{ "bignum/f" "math-internals" [ [ bignum bignum ] [ bignum ] ] }
|
|
|
|
{ "bignum-mod" "math-internals" [ [ bignum bignum ] [ bignum ] ] }
|
|
|
|
{ "bignum/mod" "math-internals" [ [ bignum bignum ] [ bignum bignum ] ] }
|
|
|
|
{ "bignum-bitand" "math-internals" [ [ bignum bignum ] [ bignum ] ] }
|
|
|
|
{ "bignum-bitor" "math-internals" [ [ bignum bignum ] [ bignum ] ] }
|
|
|
|
{ "bignum-bitxor" "math-internals" [ [ bignum bignum ] [ bignum ] ] }
|
|
|
|
{ "bignum-bitnot" "math-internals" [ [ bignum ] [ bignum ] ] }
|
|
|
|
{ "bignum-shift" "math-internals" [ [ bignum bignum ] [ bignum ] ] }
|
|
|
|
{ "bignum<" "math-internals" [ [ bignum bignum ] [ boolean ] ] }
|
|
|
|
{ "bignum<=" "math-internals" [ [ bignum bignum ] [ boolean ] ] }
|
|
|
|
{ "bignum>" "math-internals" [ [ bignum bignum ] [ boolean ] ] }
|
|
|
|
{ "bignum>=" "math-internals" [ [ bignum bignum ] [ boolean ] ] }
|
|
|
|
{ "float=" "math-internals" [ [ bignum bignum ] [ boolean ] ] }
|
|
|
|
{ "float+" "math-internals" [ [ float float ] [ float ] ] }
|
|
|
|
{ "float-" "math-internals" [ [ float float ] [ float ] ] }
|
|
|
|
{ "float*" "math-internals" [ [ float float ] [ float ] ] }
|
|
|
|
{ "float/f" "math-internals" [ [ float float ] [ float ] ] }
|
|
|
|
{ "float<" "math-internals" [ [ float float ] [ boolean ] ] }
|
|
|
|
{ "float<=" "math-internals" [ [ float float ] [ boolean ] ] }
|
|
|
|
{ "float>" "math-internals" [ [ float float ] [ boolean ] ] }
|
|
|
|
{ "float>=" "math-internals" [ [ float float ] [ boolean ] ] }
|
|
|
|
{ "facos" "math-internals" [ [ real ] [ float ] ] }
|
|
|
|
{ "fasin" "math-internals" [ [ real ] [ float ] ] }
|
|
|
|
{ "fatan" "math-internals" [ [ real ] [ float ] ] }
|
|
|
|
{ "fatan2" "math-internals" [ [ real real ] [ float ] ] }
|
|
|
|
{ "fcos" "math-internals" [ [ real ] [ float ] ] }
|
|
|
|
{ "fexp" "math-internals" [ [ real ] [ float ] ] }
|
|
|
|
{ "fcosh" "math-internals" [ [ real ] [ float ] ] }
|
|
|
|
{ "flog" "math-internals" [ [ real ] [ float ] ] }
|
|
|
|
{ "fpow" "math-internals" [ [ real real ] [ float ] ] }
|
|
|
|
{ "fsin" "math-internals" [ [ real ] [ float ] ] }
|
|
|
|
{ "fsinh" "math-internals" [ [ real ] [ float ] ] }
|
|
|
|
{ "fsqrt" "math-internals" [ [ real ] [ float ] ] }
|
|
|
|
{ "<word>" "words" [ [ ] [ word ] ] }
|
|
|
|
{ "update-xt" "words" [ [ word ] [ ] ] }
|
|
|
|
{ "compiled?" "words" [ [ word ] [ boolean ] ] }
|
|
|
|
{ "drop" "kernel" [ [ object ] [ ] ] }
|
|
|
|
{ "dup" "kernel" [ [ object ] [ object object ] ] }
|
|
|
|
{ "swap" "kernel" [ [ object object ] [ object object ] ] }
|
|
|
|
{ "over" "kernel" [ [ object object ] [ object object object ] ] }
|
|
|
|
{ "pick" "kernel" [ [ object object object ] [ object object object object ] ] }
|
|
|
|
{ ">r" "kernel" [ [ object ] [ ] ] }
|
|
|
|
{ "r>" "kernel" [ [ ] [ object ] ] }
|
|
|
|
{ "eq?" "kernel" [ [ object object ] [ boolean ] ] }
|
|
|
|
{ "getenv" "kernel-internals" [ [ fixnum ] [ object ] ] }
|
|
|
|
{ "setenv" "kernel-internals" [ [ object fixnum ] [ ] ] }
|
|
|
|
{ "stat" "io" [ [ string ] [ general-list ] ] }
|
|
|
|
{ "(directory)" "io" [ [ string ] [ general-list ] ] }
|
|
|
|
{ "gc" "memory" [ [ fixnum ] [ ] ] }
|
|
|
|
{ "gc-time" "memory" [ [ string ] [ ] ] }
|
|
|
|
{ "save-image" "memory" [ [ string ] [ ] ] }
|
|
|
|
{ "datastack" "kernel" " -- ds " }
|
|
|
|
{ "callstack" "kernel" " -- cs " }
|
|
|
|
{ "set-datastack" "kernel" " ds -- " }
|
|
|
|
{ "set-callstack" "kernel" " cs -- " }
|
|
|
|
{ "exit" "kernel" [ [ integer ] [ ] ] }
|
|
|
|
{ "room" "memory" [ [ ] [ integer integer integer integer general-list ] ] }
|
|
|
|
{ "os-env" "kernel" [ [ string ] [ object ] ] }
|
|
|
|
{ "millis" "kernel" [ [ ] [ integer ] ] }
|
|
|
|
{ "(random-int)" "math" [ [ ] [ integer ] ] }
|
|
|
|
{ "type" "kernel" [ [ object ] [ fixnum ] ] }
|
2005-08-15 03:25:39 -04:00
|
|
|
{ "tag" "kernel-internals" [ [ object ] [ fixnum ] ] }
|
2005-07-27 20:13:11 -04:00
|
|
|
{ "cwd" "io" [ [ ] [ string ] ] }
|
|
|
|
{ "cd" "io" [ [ string ] [ ] ] }
|
|
|
|
{ "compiled-offset" "assembler" [ [ ] [ integer ] ] }
|
|
|
|
{ "set-compiled-offset" "assembler" [ [ integer ] [ ] ] }
|
|
|
|
{ "literal-top" "assembler" [ [ ] [ integer ] ] }
|
|
|
|
{ "set-literal-top" "assembler" [ [ integer ] [ ] ] }
|
|
|
|
{ "address" "memory" [ [ object ] [ integer ] ] }
|
|
|
|
{ "dlopen" "alien" [ [ string ] [ dll ] ] }
|
|
|
|
{ "dlsym" "alien" [ [ string object ] [ integer ] ] }
|
|
|
|
{ "dlclose" "alien" [ [ dll ] [ ] ] }
|
|
|
|
{ "<alien>" "alien" [ [ integer ] [ alien ] ] }
|
|
|
|
{ "<byte-array>" "kernel-internals" [ [ integer ] [ byte-array ] ] }
|
|
|
|
{ "<displaced-alien>" "alien" [ [ integer c-ptr ] [ displaced-alien ] ] }
|
|
|
|
{ "alien-signed-cell" "alien" [ [ c-ptr integer ] [ integer ] ] }
|
|
|
|
{ "set-alien-signed-cell" "alien" [ [ integer c-ptr integer ] [ ] ] }
|
|
|
|
{ "alien-unsigned-cell" "alien" [ [ c-ptr integer ] [ integer ] ] }
|
|
|
|
{ "set-alien-unsigned-cell" "alien" [ [ integer c-ptr integer ] [ ] ] }
|
|
|
|
{ "alien-signed-8" "alien" [ [ c-ptr integer ] [ integer ] ] }
|
|
|
|
{ "set-alien-signed-8" "alien" [ [ integer c-ptr integer ] [ ] ] }
|
|
|
|
{ "alien-unsigned-8" "alien" [ [ c-ptr integer ] [ integer ] ] }
|
|
|
|
{ "set-alien-unsigned-8" "alien" [ [ integer c-ptr integer ] [ ] ] }
|
|
|
|
{ "alien-signed-4" "alien" [ [ c-ptr integer ] [ integer ] ] }
|
|
|
|
{ "set-alien-signed-4" "alien" [ [ integer c-ptr integer ] [ ] ] }
|
|
|
|
{ "alien-unsigned-4" "alien" [ [ c-ptr integer ] [ integer ] ] }
|
|
|
|
{ "set-alien-unsigned-4" "alien" [ [ integer c-ptr integer ] [ ] ] }
|
|
|
|
{ "alien-signed-2" "alien" [ [ c-ptr integer ] [ integer ] ] }
|
|
|
|
{ "set-alien-signed-2" "alien" [ [ integer c-ptr integer ] [ ] ] }
|
|
|
|
{ "alien-unsigned-2" "alien" [ [ c-ptr integer ] [ integer ] ] }
|
|
|
|
{ "set-alien-unsigned-2" "alien" [ [ integer c-ptr integer ] [ ] ] }
|
|
|
|
{ "alien-signed-1" "alien" [ [ c-ptr integer ] [ integer ] ] }
|
|
|
|
{ "set-alien-signed-1" "alien" [ [ integer c-ptr integer ] [ ] ] }
|
|
|
|
{ "alien-unsigned-1" "alien" [ [ c-ptr integer ] [ integer ] ] }
|
|
|
|
{ "set-alien-unsigned-1" "alien" [ [ integer c-ptr integer ] [ ] ] }
|
|
|
|
{ "alien-float" "alien" [ [ c-ptr integer ] [ float ] ] }
|
|
|
|
{ "set-alien-float" "alien" [ [ float c-ptr integer ] [ ] ] }
|
|
|
|
{ "alien-double" "alien" [ [ c-ptr integer ] [ float ] ] }
|
|
|
|
{ "set-alien-double" "alien" [ [ float c-ptr integer ] [ ] ] }
|
|
|
|
{ "alien-c-string" "alien" [ [ c-ptr integer ] [ string ] ] }
|
|
|
|
{ "set-alien-c-string" "alien" [ [ string c-ptr integer ] [ ] ] }
|
|
|
|
{ "throw" "errors" [ [ object ] [ ] ] }
|
|
|
|
{ "string>memory" "kernel-internals" [ [ string integer ] [ ] ] }
|
|
|
|
{ "memory>string" "kernel-internals" [ [ integer integer ] [ string ] ] }
|
|
|
|
{ "alien-address" "alien" [ [ alien ] [ integer ] ] }
|
|
|
|
{ "slot" "kernel-internals" [ [ object fixnum ] [ object ] ] }
|
|
|
|
{ "set-slot" "kernel-internals" [ [ object object fixnum ] [ ] ] }
|
|
|
|
{ "integer-slot" "kernel-internals" [ [ object fixnum ] [ integer ] ] }
|
|
|
|
{ "set-integer-slot" "kernel-internals" [ [ integer object fixnum ] [ ] ] }
|
|
|
|
{ "char-slot" "kernel-internals" [ [ object fixnum ] [ fixnum ] ] }
|
|
|
|
{ "set-char-slot" "kernel-internals" [ [ integer object fixnum ] [ ] ] }
|
|
|
|
{ "resize-array" "kernel-internals" [ [ integer array ] [ array ] ] }
|
|
|
|
{ "resize-string" "strings" [ [ integer string ] [ string ] ] }
|
|
|
|
{ "<hashtable>" "hashtables" [ [ number ] [ hashtable ] ] }
|
|
|
|
{ "<array>" "kernel-internals" [ [ number ] [ array ] ] }
|
|
|
|
{ "<tuple>" "kernel-internals" [ [ number ] [ tuple ] ] }
|
|
|
|
{ "begin-scan" "memory" [ [ ] [ ] ] }
|
|
|
|
{ "next-object" "memory" [ [ ] [ object ] ] }
|
|
|
|
{ "end-scan" "memory" [ [ ] [ ] ] }
|
|
|
|
{ "size" "memory" [ [ object ] [ fixnum ] ] }
|
|
|
|
{ "die" "kernel" [ [ ] [ ] ] }
|
|
|
|
{ "flush-icache" "assembler" f }
|
2005-04-22 20:09:46 -04:00
|
|
|
[ "fopen" "io-internals" [ [ string string ] [ alien ] ] ]
|
2005-07-27 20:13:11 -04:00
|
|
|
{ "fgetc" "io-internals" [ [ alien ] [ object ] ] }
|
|
|
|
{ "fwrite" "io-internals" [ [ string alien ] [ ] ] }
|
|
|
|
{ "fflush" "io-internals" [ [ alien ] [ ] ] }
|
|
|
|
{ "fclose" "io-internals" [ [ alien ] [ ] ] }
|
|
|
|
{ "expired?" "alien" [ [ object ] [ boolean ] ] }
|
2005-08-03 23:56:28 -04:00
|
|
|
{ "<wrapper>" "kernel" [ [ object ] [ wrapper ] ] }
|
2005-07-30 22:14:34 -04:00
|
|
|
} dup length 3 swap [ + ] map-with [
|
2005-04-07 20:02:59 -04:00
|
|
|
make-primitive
|
2005-07-30 22:14:34 -04:00
|
|
|
] 2each
|
2005-04-07 20:02:59 -04:00
|
|
|
|
|
|
|
! These need a more descriptive comment.
|
2005-07-27 20:13:11 -04:00
|
|
|
{
|
|
|
|
{ "drop" "kernel" " x -- " }
|
|
|
|
{ "dup" "kernel" " x -- x x " }
|
|
|
|
{ "swap" "kernel" " x y -- y x " }
|
|
|
|
{ "over" "kernel" " x y -- x y x " }
|
|
|
|
{ "pick" "kernel" " x y z -- x y z x " }
|
|
|
|
{ ">r" "kernel" " x -- r: x " }
|
|
|
|
{ "r>" "kernel" " r: x -- x " }
|
|
|
|
} [
|
2005-04-07 20:02:59 -04:00
|
|
|
set-stack-effect
|
|
|
|
] each
|
|
|
|
|
|
|
|
FORGET: make-primitive
|
|
|
|
FORGET: set-stack-effect
|