alien-callback and alien-indirect now call the prep quotation

slava 2006-11-04 00:05:53 +00:00
parent 861a6d32cf
commit 48f0381470
7 changed files with 30 additions and 23 deletions

View File

@ -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

View File

@ -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 ;

View File

@ -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 -- )

View File

@ -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

View File

@ -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 ;

View File

@ -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"

View File

@ -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