]> gitweb.factorcode.org Git - factor.git/blobdiff - basis/cocoa/cocoa.factor
macros: macro body is now defined in its own subword, for compile-time stack effect...
[factor.git] / basis / cocoa / cocoa.factor
index 34bac0a5055229e13b7a738190f577359fd3ab7e..f3ea7ce8eaccd3a4953d3e03390b1a350d0b5ace 100644 (file)
@@ -1,9 +1,10 @@
-! Copyright (C) 2006, 2009 Slava Pestov
+! Copyright (C) 2006, 2010 Slava Pestov
 ! See http://factorcode.org/license.txt for BSD license.
 USING: compiler io kernel cocoa.runtime cocoa.subclassing
 cocoa.messages cocoa.types sequences words vocabs parser
 core-foundation.bundles namespaces assocs hashtables
-compiler.units lexer init ;
+compiler.units lexer init macros quotations fry alien.c-types
+arrays combinators ;
 IN: cocoa
 
 : (remember-send) ( selector variable -- )
@@ -14,7 +15,7 @@ SYMBOL: sent-messages
 : remember-send ( selector -- )
     sent-messages (remember-send) ;
 
-SYNTAX: -> scan dup remember-send suffix! \ send suffix! ;
+SYNTAX: -> scan [ remember-send ] [ suffix! ] bi \ send suffix! ;
 
 SYMBOL: super-sent-messages
 
@@ -33,6 +34,14 @@ SYNTAX: FRAMEWORK: scan [ load-framework ] [ frameworks get push ] bi ;
 
 SYNTAX: IMPORT: scan [ ] import-objc-class ;
 
+MACRO: objc-class-case ( alist -- quot )
+    "isKindOfClass:" remember-send
+    [
+        dup callable?
+        [ first2 [ '[ dup _ execute "isKindOfClass:" send c-bool> ] ] dip 2array ]
+        unless
+    ] map '[ _ cond ] ;
+
 "Importing Cocoa classes..." print
 
 "cocoa.classes" create-vocab drop