Support Objective C messages returning structs by value
parent
c2140920bd
commit
6d3657ece1
|
@ -1,6 +1,4 @@
|
|||
- CFBundle error handling
|
||||
- messages returning structs by value
|
||||
- fix bootstrap compile errors
|
||||
- out of memory from ffi calls
|
||||
- update amd64 for %unbox-struct and callbacks
|
||||
- clean up C stack frame assembly code to avoid moving spilled arguments
|
||||
|
|
|
@ -40,4 +40,5 @@ sequences strings words ;
|
|||
] "struct-name" get define-c-type
|
||||
"struct-name" get in get init-c-type ;
|
||||
|
||||
: c-struct? ( type -- ? ) "struct" swap c-type hash ;
|
||||
: c-struct? ( type -- ? )
|
||||
c-types get hash [ "struct" swap hash ] [ f ] if* ;
|
||||
|
|
|
@ -11,6 +11,7 @@ BEGIN-STRUCT: NSRect
|
|||
END-STRUCT
|
||||
|
||||
TYPEDEF: NSRect _NSRect
|
||||
TYPEDEF: NSRect CGRect
|
||||
|
||||
: <NSRect>
|
||||
"NSRect" <c-object>
|
||||
|
@ -25,6 +26,7 @@ BEGIN-STRUCT: NSPoint
|
|||
END-STRUCT
|
||||
|
||||
TYPEDEF: NSPoint _NSPoint
|
||||
TYPEDEF: NSPoint CGPoint
|
||||
|
||||
: <NSPoint>
|
||||
"NSPoint" <c-object>
|
||||
|
@ -37,6 +39,7 @@ BEGIN-STRUCT: NSSize
|
|||
END-STRUCT
|
||||
|
||||
TYPEDEF: NSSize _NSSize
|
||||
TYPEDEF: NSPoint CGPoint
|
||||
|
||||
: <NSSize>
|
||||
"NSSize" <c-object>
|
||||
|
|
|
@ -97,14 +97,29 @@ C: selector ( name -- sel ) [ set-selector-name ] keep ;
|
|||
: make-dip ( quot n -- quot )
|
||||
dup \ >r <array> -rot \ r> <array> append3 ;
|
||||
|
||||
: make-objc-method ( returns args selector -- )
|
||||
<selector> [ selector ] curry over length 2 - make-dip [
|
||||
%
|
||||
swap ,
|
||||
[ f "objc_msgSend" ] % ,
|
||||
\ alien-invoke ,
|
||||
: selector-quot ( string -- ) <selector> [ selector ] curry ;
|
||||
|
||||
: make-objc-invoke
|
||||
[
|
||||
>r over length 2 - make-dip % r> call \ alien-invoke ,
|
||||
] [ ] make ;
|
||||
|
||||
: make-objc-send ( returns args selector -- )
|
||||
selector-quot
|
||||
[ swap , [ f "objc_msgSend" ] % , ] make-objc-invoke ;
|
||||
|
||||
: make-objc-send-stret ( returns args selector -- )
|
||||
>r swap [ <c-object> dup ] curry 1 make-dip r>
|
||||
selector-quot append [
|
||||
"void" ,
|
||||
[ f "objc_msgSend_stret" ] %
|
||||
{ "void*" } swap append ,
|
||||
] make-objc-invoke ;
|
||||
|
||||
: make-objc-method ( returns args selector -- )
|
||||
pick c-struct?
|
||||
[ make-objc-send-stret ] [ make-objc-send ] if ;
|
||||
|
||||
: define-objc-method ( returns types selector -- )
|
||||
[ make-objc-method "[" ] keep "]" append3 create-in
|
||||
swap define-compound ;
|
||||
|
|
Loading…
Reference in New Issue