cocoa.messages cocoa.types sequences words vocabs parser
core-foundation.bundles namespaces assocs hashtables
compiler.units lexer init ;
+FROM: cocoa.messages => selector ;
IN: cocoa
: (remember-send) ( selector variable -- )
SYNTAX: -> scan-token dup remember-send suffix! \ send suffix! ;
-SYNTAX: ?-> scan-token [ remember-send ] [ <selector> drop ] bi ;
+SYNTAX: SEL:
+ scan-token
+ [ remember-send ]
+ [ <selector> suffix! \ selector suffix! ] bi ;
+
+SYNTAX: SEND:
+ scan-token
+ [ remember-send ]
+ [ <selector> suffix! \ selector suffix! ]
+ [ suffix! \ lookup-sender suffix! ] tri ;
SYMBOL: super-sent-messages
: lookup-method ( selector -- method )
dup ?lookup-method [ ] [ no-objc-method ] ?if ;
-: (selector/sender) ( selector super? -- alien word )
- [ [ lookup-selector ] [ lookup-method ] bi ]
- [ super-message-senders message-senders ? get at ] bi* ; inline
-
-: selector/sender ( selector -- alien word )
- f (selector/sender) ; inline
-
-: selector/super-sender ( selector -- alien word )
- t (selector/sender) ; inline
+: lookup-sender ( name -- method )
+ lookup-method message-senders get at ;
MEMO: make-prepare-send ( selector method super? -- quot )
[
METHOD: void prepareOpenGL [
- ?-> setWantsBestResolutionOpenGLSurface:
- ?-> backingScaleFactor
+ self SEL: setWantsBestResolutionOpenGLSurface:
+ -> respondsToSelector: c-bool> [
- self "setWantsBestResolutionOpenGLSurface:"
- lookup-selector -> respondsToSelector: c-bool> [
+ self SEND: setWantsBestResolutionOpenGLSurface:
+ 1 swap execute( x x x -- )
- self "setWantsBestResolutionOpenGLSurface:"
- selector/sender 1 swap execute( x x x -- )
-
- self "backingScaleFactor"
- selector/sender execute( x x -- x )
+ self SEND: backingScaleFactor execute( x x -- x )
dup 1.0 > [
gl-scale-factor set-global t retina? set-global
] [ drop ] if