- workspace window takes too long to come up
+- bogus compile error
+- live search: timer delay would be nice
+ 0.87:
-- live search: timer delay would be nice
- menu should stay up if mouse button released
- roundoff is still not quite right with tracks
- grid displays quickly now, but constructing large amounts of gadgets
drop
[
[
- ( hash elt -- )
hash-bench-step
] each-with
] 2keep
TUPLE: alien-indirect return parameters abi ;
C: alien-indirect make-node ;
+M: alien-indirect alien-invoke-parameters alien-indirect-parameters ;
+M: alien-indirect alien-invoke-return alien-indirect-return ;
+M: alien-indirect alien-invoke-abi alien-indirect-abi ;
+
TUPLE: alien-indirect-error ;
: alien-indirect ( funcptr args... return parameters abi -- )
\ alien-indirect [ string object string ] [ ] <effect>
"inferred-effect" set-word-prop
+: alien-indirect-stack ( node -- )
+ 1 over consume-values
+ alien-invoke-stack ;
+
\ alien-indirect [
empty-node <alien-indirect>
pop-literal nip over set-alien-indirect-abi
pop-literal nip over set-alien-indirect-return
dup alien-indirect-parameters
make-prep-quot 1 make-dip infer-quot
- node,
+ dup node,
+ alien-indirect-stack
] "infer" set-word-prop
-: generate-indirect-cleanup ( node -- )
- dup alien-indirect-abi "stdcall" = [
- drop
- ] [
- alien-indirect-parameters stack-space %cleanup
- ] if ;
-
M: alien-indirect generate-node
end-basic-block
%prepare-alien-indirect
dup alien-indirect-parameters objects>registers
%alien-indirect
- dup generate-indirect-cleanup
+ dup generate-invoke-cleanup
alien-indirect-return box-return
iterate-next ;
prettyprint sequences strings words ;
TUPLE: alien-invoke library function return parameters ;
+
+GENERIC: alien-invoke-abi
+
+M: alien-invoke alien-invoke-abi
+ alien-invoke-library library-abi ;
+
C: alien-invoke make-node ;
: alien-invoke-stack ( node -- )
[ ] [ f swap c-type c-type-box ] if-void ;
: generate-invoke-cleanup ( node -- )
- dup alien-invoke-library library-abi "stdcall" = [
+ dup alien-invoke-abi [
drop
] [
alien-invoke-parameters stack-space %cleanup
"inferred-effect" set-word-prop ;
: finish-word ( word -- effect vars )
- current-effect 2dup check-effect
- inferred-vars get
- [ save-inferred-data ] 2keep ;
+ current-effect inferred-vars get
+ pick custom-infer? [
+ rot drop
+ ] [
+ >r 2dup check-effect r>
+ [ save-inferred-data ] 2keep
+ ] if ;
M: compound infer-word
[ dup infer-compound [ finish-word ] bind ]
IN: temporary
USING: alien compiler kernel namespaces namespaces test
-sequences ;
+sequences inference errors ;
+
+[ t ] [ [ [ alien-indirect ] infer ] catch inference-error? ] unit-test
FUNCTION: void ffi_test_0 ;
[ ] [ ffi_test_0 ] unit-test