Revert alien.compiler tweak, it was too clever
parent
014a3d4867
commit
00d2d88027
|
@ -202,23 +202,6 @@ M: alien-invoke-error summary
|
||||||
|
|
||||||
: pop-parameters pop-literal nip [ expand-constants ] map ;
|
: pop-parameters pop-literal nip [ expand-constants ] map ;
|
||||||
|
|
||||||
\ alien-invoke [
|
|
||||||
! Four literals
|
|
||||||
4 ensure-values
|
|
||||||
\ alien-invoke empty-node
|
|
||||||
! Compile-time parameters
|
|
||||||
pop-parameters over set-alien-invoke-parameters
|
|
||||||
pop-literal nip over set-alien-invoke-function
|
|
||||||
pop-literal nip over set-alien-invoke-library
|
|
||||||
pop-literal nip over set-alien-invoke-return
|
|
||||||
! Quotation which coerces parameters to required types
|
|
||||||
dup make-prep-quot recursive-state get infer-quot
|
|
||||||
! Add node to IR
|
|
||||||
dup node,
|
|
||||||
! Magic #: consume exactly the number of inputs
|
|
||||||
0 alien-invoke-stack
|
|
||||||
] "infer" set-word-prop
|
|
||||||
|
|
||||||
: stdcall-mangle ( symbol node -- symbol )
|
: stdcall-mangle ( symbol node -- symbol )
|
||||||
"@"
|
"@"
|
||||||
swap alien-node-parameters parameter-sizes drop
|
swap alien-node-parameters parameter-sizes drop
|
||||||
|
@ -228,13 +211,38 @@ M: alien-invoke-error summary
|
||||||
dup alien-invoke-function
|
dup alien-invoke-function
|
||||||
swap alien-invoke-library load-library ;
|
swap alien-invoke-library load-library ;
|
||||||
|
|
||||||
|
TUPLE: no-such-symbol ;
|
||||||
|
|
||||||
|
M: no-such-symbol summary
|
||||||
|
drop "Symbol not found" ;
|
||||||
|
|
||||||
|
: no-such-symbol ( -- )
|
||||||
|
\ no-such-symbol inference-error ;
|
||||||
|
|
||||||
: alien-invoke-dlsym ( node -- symbol dll )
|
: alien-invoke-dlsym ( node -- symbol dll )
|
||||||
dup (alien-invoke-dlsym)
|
dup (alien-invoke-dlsym) 2dup dlsym [
|
||||||
>r over stdcall-mangle r> 2dup dlsym [
|
>r over stdcall-mangle r> 2dup dlsym
|
||||||
rot drop
|
[ no-such-symbol ] unless
|
||||||
] [
|
] unless rot drop ;
|
||||||
2drop (alien-invoke-dlsym)
|
|
||||||
] if ;
|
\ alien-invoke [
|
||||||
|
! Four literals
|
||||||
|
4 ensure-values
|
||||||
|
\ alien-invoke empty-node
|
||||||
|
! Compile-time parameters
|
||||||
|
pop-parameters over set-alien-invoke-parameters
|
||||||
|
pop-literal nip over set-alien-invoke-function
|
||||||
|
pop-literal nip over set-alien-invoke-library
|
||||||
|
pop-literal nip over set-alien-invoke-return
|
||||||
|
! If symbol doesn't resolve, no stack effect, no compile
|
||||||
|
dup alien-invoke-dlsym 2drop
|
||||||
|
! Quotation which coerces parameters to required types
|
||||||
|
dup make-prep-quot recursive-state get infer-quot
|
||||||
|
! Add node to IR
|
||||||
|
dup node,
|
||||||
|
! Magic #: consume exactly the number of inputs
|
||||||
|
0 alien-invoke-stack
|
||||||
|
] "infer" set-word-prop
|
||||||
|
|
||||||
M: alien-invoke generate-node
|
M: alien-invoke generate-node
|
||||||
dup alien-invoke-frame [
|
dup alien-invoke-frame [
|
||||||
|
|
Loading…
Reference in New Issue