From bbf871e28ae5ed6e6b85fa2f47bbf430166ae45b Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Wed, 11 Jan 2006 04:56:00 +0000 Subject: [PATCH] split objective c bindings into files --- library/alien/objective-c/runtime.factor | 73 +----------------------- library/alien/objective-c/syntax.factor | 14 +++++ library/alien/objective-c/utils.factor | 60 +++++++++++++++++++ library/alien/syntax.factor | 2 +- library/bootstrap/boot-stage1.factor | 8 ++- 5 files changed, 84 insertions(+), 73 deletions(-) create mode 100644 library/alien/objective-c/syntax.factor create mode 100644 library/alien/objective-c/utils.factor diff --git a/library/alien/objective-c/runtime.factor b/library/alien/objective-c/runtime.factor index 5d6ef7589c..40b96017d3 100644 --- a/library/alien/objective-c/runtime.factor +++ b/library/alien/objective-c/runtime.factor @@ -1,6 +1,6 @@ +! Copyright (C) 2006 Slava Pestov +! See http://factorcode.org/license.txt for BSD license. IN: objective-c -USING: alien arrays compiler kernel lists namespaces parser -sequences words ; TYPEDEF: void* SEL @@ -12,21 +12,6 @@ FUNCTION: bool sel_isMapped ( SEL aSelector ) ; FUNCTION: SEL sel_registerName ( char* str ) ; -TUPLE: selector name object ; - -C: selector ( name -- sel ) [ set-selector-name ] keep ; - -: selector-valid? ( selector -- ? ) - selector-object dup [ expired? not ] when ; - -: selector ( selector -- alien ) - dup selector-valid? [ - selector-object - ] [ - dup selector-name sel_registerName - dup rot set-selector-object - ] if ; - BEGIN-STRUCT: objc-class FIELD: void* isa FIELD: void* super-class @@ -40,12 +25,7 @@ BEGIN-STRUCT: objc-class FIELD: void* protocols END-STRUCT -FUNCTION: int objc_getClassList ( void* buffer, int bufferLen ) ; compiled - -: objc-classes ( -- seq ) - f 0 objc_getClassList - [ "void*" dup ] keep objc_getClassList - [ swap void*-nth objc-class-name ] map-with ; +FUNCTION: int objc_getClassList ( void* buffer, int bufferLen ) ; FUNCTION: objc-class* objc_getClass ( char* class ) ; @@ -80,50 +60,3 @@ FUNCTION: void class_removeMethods ( objc-class* class, objc-method-list* method FUNCTION: uint method_getNumberOfArguments ( objc-method* method ) ; FUNCTION: uint method_getSizeOfArguments ( objc-method* method ) ; - -: method-list>seq ( method-list -- seq ) - dup objc-method-list-elements swap objc-method-list-count [ - swap objc-method-nth objc-method-name sel_getName - ] map-with ; - -: (objc-methods) ( objc-class iterator -- ) - 2dup class_nextMethodList [ - method-list>seq % (objc-methods) - ] [ - 2drop - ] if* ; - -: objc-methods ( class -- seq ) - [ objc_getClass f (objc-methods) ] { } make ; - -: OBJC-CLASS: - #! Syntax: name - CREATE dup word-name - [ objc_getClass ] curry define-compound ; parsing - -: make-dip ( quot n -- quot ) - dup \ >r -rot \ r> append3 ; - -: make-msg-send ( returns args selector -- ) - [ selector ] curry over length make-dip [ - % - swap , - [ f "objc_msgSend" ] % - [ "id" "SEL" ] swap append , - \ alien-invoke , - ] [ ] make ; - -: define-msg-send ( returns types selector -- ) - [ make-msg-send "[" ] keep "]" append3 create-in - swap define-compound ; - -: msg-send-args ( args -- types selector ) - dup length 1 = - [ first { } ] [ unpair >r concat r> ] if swap ; - -: OBJC-MESSAGE: - scan string-mode on - [ string-mode off msg-send-args define-msg-send ] f ; - parsing - -"objective-c" words [ try-compile ] each diff --git a/library/alien/objective-c/syntax.factor b/library/alien/objective-c/syntax.factor new file mode 100644 index 0000000000..25663a977d --- /dev/null +++ b/library/alien/objective-c/syntax.factor @@ -0,0 +1,14 @@ +! Copyright (C) 2006 Slava Pestov +! See http://factorcode.org/license.txt for BSD license. +IN: !syntax +USING: kernel lists namespaces objective-c parser syntax words ; + +: OBJC-CLASS: + #! Syntax: name + CREATE dup word-name + [ objc_getClass ] curry define-compound ; parsing + +: OBJC-MESSAGE: + scan string-mode on + [ string-mode off msg-send-args define-msg-send ] f ; + parsing diff --git a/library/alien/objective-c/utils.factor b/library/alien/objective-c/utils.factor new file mode 100644 index 0000000000..a856f9ca85 --- /dev/null +++ b/library/alien/objective-c/utils.factor @@ -0,0 +1,60 @@ +! Copyright (C) 2006 Slava Pestov +! See http://factorcode.org/license.txt for BSD license. +IN: objective-c +USING: alien arrays kernel lists namespaces parser sequences +words ; + +TUPLE: selector name object ; + +C: selector ( name -- sel ) [ set-selector-name ] keep ; + +: selector-valid? ( selector -- ? ) + selector-object dup [ expired? not ] when ; + +: selector ( selector -- alien ) + dup selector-valid? [ + selector-object + ] [ + dup selector-name sel_registerName + dup rot set-selector-object + ] if ; + +: objc-classes ( -- seq ) + f 0 objc_getClassList + [ "void*" dup ] keep objc_getClassList + [ swap void*-nth objc-class-name ] map-with ; + +: method-list>seq ( method-list -- seq ) + dup objc-method-list-elements swap objc-method-list-count [ + swap objc-method-nth objc-method-name sel_getName + ] map-with ; + +: (objc-methods) ( objc-class iterator -- ) + 2dup class_nextMethodList [ + method-list>seq % (objc-methods) + ] [ + 2drop + ] if* ; + +: objc-methods ( class -- seq ) + [ objc_getClass f (objc-methods) ] { } make ; + +: make-dip ( quot n -- quot ) + dup \ >r -rot \ r> append3 ; + +: make-msg-send ( returns args selector -- ) + [ selector ] curry over length make-dip [ + % + swap , + [ f "objc_msgSend" ] % + [ "id" "SEL" ] swap append , + \ alien-invoke , + ] [ ] make ; + +: define-msg-send ( returns types selector -- ) + [ make-msg-send "[" ] keep "]" append3 create-in + swap define-compound ; + +: msg-send-args ( args -- types selector ) + dup length 1 = + [ first { } ] [ unpair >r concat r> ] if swap ; diff --git a/library/alien/syntax.factor b/library/alien/syntax.factor index 976665a4ec..ca3130cfb6 100644 --- a/library/alien/syntax.factor +++ b/library/alien/syntax.factor @@ -1,5 +1,5 @@ ! Copyright (C) 2005 Alex Chapman. -! See http://factor.sf.net/license.txt for BSD license. +! See http://factorcode.org/license.txt for BSD license. IN: !syntax USING: alien compiler kernel lists math namespaces parser sequences syntax words ; diff --git a/library/bootstrap/boot-stage1.factor b/library/bootstrap/boot-stage1.factor index 3de5afc094..75ca533654 100644 --- a/library/bootstrap/boot-stage1.factor +++ b/library/bootstrap/boot-stage1.factor @@ -1,5 +1,5 @@ -! Copyright (C) 2004, 2005 Slava Pestov. -! See http://factor.sf.net/license.txt for BSD license. +! Copyright (C) 2004, 2006 Slava Pestov. +! See http://factorcode.org/license.txt for BSD license. IN: image USING: errors generic hashtables io kernel kernel-internals lists math memory namespaces parser prettyprint sequences @@ -144,6 +144,10 @@ vectors words ; "/library/alien/syntax.factor" "/library/alien/malloc.factor" + "/library/alien/objective-c/runtime.factor" + "/library/alien/objective-c/utils.factor" + "/library/alien/objective-c/syntax.factor" + "/library/io/buffer.factor" "/library/cli.factor"