alien-callback and alien-indirect now call the prep quotation
parent
861a6d32cf
commit
48f0381470
|
@ -5,7 +5,6 @@
|
||||||
|
|
||||||
+ ui:
|
+ ui:
|
||||||
|
|
||||||
- input operation: copy
|
|
||||||
- doc/handbook/alien.facts formatting wrong (erg)
|
- doc/handbook/alien.facts formatting wrong (erg)
|
||||||
- docs: mention that 'like' may destroy the underlying sequence
|
- docs: mention that 'like' may destroy the underlying sequence
|
||||||
- live search: timer delay would be nice
|
- live search: timer delay would be nice
|
||||||
|
|
|
@ -54,11 +54,18 @@ M: alien-callback-error summary
|
||||||
%callback-value
|
%callback-value
|
||||||
] if-void ;
|
] if-void ;
|
||||||
|
|
||||||
|
: alien-callback-quot* ( node -- quot )
|
||||||
|
[
|
||||||
|
\ init-error-handler ,
|
||||||
|
dup alien-callback-quot %
|
||||||
|
alien-callback-return
|
||||||
|
[ ] [ c-type c-type-prep % ] if-void
|
||||||
|
] [ ] make ;
|
||||||
|
|
||||||
: generate-callback ( node -- )
|
: generate-callback ( node -- )
|
||||||
[ alien-callback-xt ] keep [
|
[ alien-callback-xt ] keep [
|
||||||
dup alien-callback-parameters registers>objects
|
dup alien-callback-parameters registers>objects
|
||||||
dup alien-callback-quot \ init-error-handler add*
|
dup alien-callback-quot* %alien-callback
|
||||||
%alien-callback
|
|
||||||
unbox-return
|
unbox-return
|
||||||
%return
|
%return
|
||||||
] generate-1 ;
|
] generate-1 ;
|
||||||
|
|
|
@ -19,10 +19,12 @@ M: alien-indirect-error summary
|
||||||
"infer-effect" set-word-prop
|
"infer-effect" set-word-prop
|
||||||
|
|
||||||
\ alien-indirect [
|
\ alien-indirect [
|
||||||
empty-node <alien-indirect> dup node,
|
empty-node <alien-indirect>
|
||||||
pop-literal nip over set-alien-indirect-abi
|
pop-literal nip over set-alien-indirect-abi
|
||||||
pop-literal nip over set-alien-indirect-parameters
|
pop-literal nip over set-alien-indirect-parameters
|
||||||
pop-literal nip swap set-alien-indirect-return
|
pop-literal nip swap set-alien-indirect-return
|
||||||
|
dup alien-indirect-parameters prep-alien-parameters
|
||||||
|
dup node,
|
||||||
] "infer" set-word-prop
|
] "infer" set-word-prop
|
||||||
|
|
||||||
: generate-indirect-cleanup ( node -- )
|
: generate-indirect-cleanup ( node -- )
|
||||||
|
|
|
@ -28,20 +28,6 @@ M: alien-invoke-error summary
|
||||||
[ alien-invoke-dlsym dlsym drop ]
|
[ alien-invoke-dlsym dlsym drop ]
|
||||||
[ inference-warning ] recover ;
|
[ inference-warning ] recover ;
|
||||||
|
|
||||||
: (make-prep-quot) ( parameters -- )
|
|
||||||
dup empty? [
|
|
||||||
drop
|
|
||||||
] [
|
|
||||||
unclip c-type c-type-prep %
|
|
||||||
\ >r , (make-prep-quot) \ r> ,
|
|
||||||
] if ;
|
|
||||||
|
|
||||||
: make-prep-quot ( parameters -- quot )
|
|
||||||
[ <reversed> (make-prep-quot) ] [ ] make ;
|
|
||||||
|
|
||||||
: prep-alien-invoke ( node -- )
|
|
||||||
alien-invoke-parameters make-prep-quot infer-quot ;
|
|
||||||
|
|
||||||
\ alien-invoke [ string object string object ] [ ] <effect>
|
\ alien-invoke [ string object string object ] [ ] <effect>
|
||||||
"infer-effect" set-word-prop
|
"infer-effect" set-word-prop
|
||||||
|
|
||||||
|
@ -51,7 +37,7 @@ M: alien-invoke-error summary
|
||||||
pop-literal nip over set-alien-invoke-function
|
pop-literal nip over set-alien-invoke-function
|
||||||
pop-literal nip over set-alien-invoke-library
|
pop-literal nip over set-alien-invoke-library
|
||||||
pop-literal nip over set-alien-invoke-return
|
pop-literal nip over set-alien-invoke-return
|
||||||
dup prep-alien-invoke
|
dup alien-invoke-parameters prep-alien-parameters
|
||||||
dup ensure-dlsym
|
dup ensure-dlsym
|
||||||
dup node,
|
dup node,
|
||||||
alien-invoke-stack
|
alien-invoke-stack
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
IN: alien
|
IN: alien
|
||||||
USING: arrays compiler generic hashtables kernel
|
USING: arrays compiler generic hashtables kernel
|
||||||
kernel-internals math namespaces sequences words ;
|
kernel-internals math namespaces sequences words
|
||||||
|
inference ;
|
||||||
|
|
||||||
: parameter-size c-size cell align ;
|
: parameter-size c-size cell align ;
|
||||||
|
|
||||||
|
@ -57,3 +58,14 @@ kernel-internals math namespaces sequences words ;
|
||||||
|
|
||||||
: if-void ( type true false -- )
|
: if-void ( type true false -- )
|
||||||
pick "void" = [ drop nip call ] [ nip call ] if ; inline
|
pick "void" = [ drop nip call ] [ nip call ] if ; inline
|
||||||
|
|
||||||
|
: make-prep-quot ( parameters -- )
|
||||||
|
dup empty? [
|
||||||
|
drop
|
||||||
|
] [
|
||||||
|
unclip c-type c-type-prep %
|
||||||
|
\ >r , make-prep-quot \ r> ,
|
||||||
|
] if ;
|
||||||
|
|
||||||
|
: prep-alien-parameters ( parameters -- quot )
|
||||||
|
[ <reversed> make-prep-quot ] [ ] make infer-quot ;
|
||||||
|
|
|
@ -85,7 +85,7 @@ bootstrap-cell
|
||||||
"bool" define-primitive-type
|
"bool" define-primitive-type
|
||||||
|
|
||||||
[ alien-float ]
|
[ alien-float ]
|
||||||
[ set-alien-float ]
|
[ >r >r >float r> r> set-alien-float ]
|
||||||
4
|
4
|
||||||
"box_float"
|
"box_float"
|
||||||
"unbox_float"
|
"unbox_float"
|
||||||
|
@ -95,7 +95,7 @@ T{ float-regs f 4 } "float" c-type set-c-type-reg-class
|
||||||
[ >float ] "float" c-type set-c-type-prep
|
[ >float ] "float" c-type set-c-type-prep
|
||||||
|
|
||||||
[ alien-double ]
|
[ alien-double ]
|
||||||
[ set-alien-double ]
|
[ >r >r >float r> r> set-alien-double ]
|
||||||
8
|
8
|
||||||
"box_double"
|
"box_double"
|
||||||
"unbox_double"
|
"unbox_double"
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
IN: temporary
|
IN: temporary
|
||||||
USING: alien arrays kernel kernel-internals namespaces test ;
|
USING: alien arrays kernel kernel-internals namespaces test
|
||||||
|
errors sequences ;
|
||||||
|
|
||||||
[ t ] [ 0 <alien> 0 <alien> = ] unit-test
|
[ t ] [ 0 <alien> 0 <alien> = ] unit-test
|
||||||
[ f ] [ 0 <alien> 1024 <alien> = ] unit-test
|
[ f ] [ 0 <alien> 1024 <alien> = ] unit-test
|
||||||
|
|
Loading…
Reference in New Issue