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