]> gitweb.factorcode.org Git - factor.git/blobdiff - basis/cocoa/subclassing/subclassing.factor
factor: trim using lists
[factor.git] / basis / cocoa / subclassing / subclassing.factor
index 47f38a5442bc88ed4aef3990848c59f116d63067..ad735cb98dace4ade593d678de3647febe219a14 100644 (file)
@@ -1,8 +1,8 @@
 ! Copyright (C) 2006, 2010 Slava Pestov, Joe Groff.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: alien alien.parser alien.strings arrays assocs
+USING: accessors alien alien.parser alien.strings arrays assocs
 cocoa.messages cocoa.runtime combinators compiler.units fry
-io.encodings.utf8 kernel lexer locals locals.parser locals.types
+io.encodings.utf8 kernel lexer locals.parser locals.types
 make namespaces parser sequences words ;
 IN: cocoa.subclassing
 
@@ -64,16 +64,24 @@ IN: cocoa.subclassing
 
 :: define-objc-class ( name superclass protocols methods -- )
     methods prepare-methods :> methods
-    name "cocoa.classes" create drop
+    name "cocoa.classes" create-word drop
     methods name redefine-objc-methods
     name [ methods protocols superclass name (define-objc-class) ] import-objc-class ;
 
-SYNTAX: CLASS:
+TUPLE: cocoa-protocol name ;
+C: <cocoa-protocol> cocoa-protocol
+
+SYNTAX: COCOA-PROTOCOL:
+    scan-token <cocoa-protocol> suffix! ;
+
+SYMBOL: ;CLASS>
+
+SYNTAX: <CLASS:
     scan-token
     "<" expect
     scan-token
-    "[" parse-tokens
-    \ ] parse-until define-objc-class ;
+    \ ;CLASS> parse-until [ cocoa-protocol? ] partition
+    [ [ name>> ] map ] dip define-objc-class ;
 
 : (parse-selector) ( -- )
     scan-token {
@@ -96,5 +104,5 @@ SYNTAX: CLASS:
 SYNTAX: METHOD:
     scan-c-type
     parse-selector
-    parse-method-body [ swap ] 2dip 4array
+    parse-method-body [ swap ] 2dip 4array ";" expect
     suffix! ;