From 52cac7fd4e979ada22842872a374d1aff4a173ca Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sun, 22 Mar 2009 17:47:48 -0500 Subject: [PATCH] alien.structs: simplify logic and remove dead code --- basis/alien/structs/fields/fields.factor | 38 ++++-------------------- basis/alien/structs/structs-tests.factor | 2 +- basis/alien/structs/structs.factor | 22 +++++++------- 3 files changed, 17 insertions(+), 45 deletions(-) diff --git a/basis/alien/structs/fields/fields.factor b/basis/alien/structs/fields/fields.factor index 0477683442..7e2d4615b5 100644 --- a/basis/alien/structs/fields/fields.factor +++ b/basis/alien/structs/fields/fields.factor @@ -1,4 +1,4 @@ -! Copyright (C) 2005, 2008 Slava Pestov. +! Copyright (C) 2005, 2009 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: accessors arrays kernel kernel.private math namespaces make sequences strings words effects combinators alien.c-types ; @@ -6,28 +6,6 @@ IN: alien.structs.fields TUPLE: field-spec name offset type reader writer ; -: reader-effect ( type spec -- effect ) - [ 1array ] [ name>> 1array ] bi* ; - -PREDICATE: slot-reader < word "reading" word-prop >boolean ; - -: set-reader-props ( class spec -- ) - 2dup reader-effect - over reader>> - swap "declared-effect" set-word-prop - reader>> swap "reading" set-word-prop ; - -: writer-effect ( type spec -- effect ) - name>> swap 2array 0 ; - -PREDICATE: slot-writer < word "writing" word-prop >boolean ; - -: set-writer-props ( class spec -- ) - 2dup writer-effect - over writer>> - swap "declared-effect" set-word-prop - writer>> swap "writing" set-word-prop ; - : reader-word ( class name vocab -- word ) [ "-" glue ] dip create ; @@ -55,17 +33,13 @@ PREDICATE: slot-writer < word "writing" word-prop >boolean ; : define-struct-slot-word ( word quot spec effect -- ) [ offset>> prefix ] dip define-inline ; -: define-getter ( type spec -- ) - [ set-reader-props ] keep - [ reader>> ] - [ type>> c-type-getter-boxer ] - [ ] tri +: define-getter ( spec -- ) + [ reader>> ] [ type>> c-type-getter-boxer ] [ ] tri (( c-ptr -- value )) define-struct-slot-word ; -: define-setter ( type spec -- ) - [ set-writer-props ] keep +: define-setter ( spec -- ) [ writer>> ] [ type>> c-setter ] [ ] tri (( value c-ptr -- )) define-struct-slot-word ; -: define-field ( type spec -- ) - [ define-getter ] [ define-setter ] 2bi ; +: define-field ( spec -- ) + [ define-getter ] [ define-setter ] bi ; diff --git a/basis/alien/structs/structs-tests.factor b/basis/alien/structs/structs-tests.factor index 8bc570c448..231f1bd428 100755 --- a/basis/alien/structs/structs-tests.factor +++ b/basis/alien/structs/structs-tests.factor @@ -24,7 +24,7 @@ os winnt? cpu x86? and [ ] when ] when -: MAX_FOOS 30 ; +CONSTANT: MAX_FOOS 30 C-STRUCT: foox { { "int" MAX_FOOS } "x" } ; diff --git a/basis/alien/structs/structs.factor b/basis/alien/structs/structs.factor index ec9080690a..b618e7974b 100755 --- a/basis/alien/structs/structs.factor +++ b/basis/alien/structs/structs.factor @@ -1,4 +1,4 @@ -! Copyright (C) 2004, 2008 Slava Pestov. +! Copyright (C) 2004, 2009 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: accessors arrays assocs generic hashtables kernel kernel.private math namespaces parser sequences strings words libc fry @@ -56,10 +56,10 @@ M: struct-type stack-size : (define-struct) ( name size align fields -- ) [ [ align ] keep ] dip struct-type new - swap >>fields - swap >>align - swap >>size - swap typedef ; + swap >>fields + swap >>align + swap >>size + swap typedef ; : make-fields ( name vocab fields -- fields ) [ first2 ] with with map ; @@ -68,12 +68,11 @@ M: struct-type stack-size [ c-type-align ] [ max ] map-reduce ; : define-struct ( name vocab fields -- ) - [ - [ 2drop ] [ make-fields ] 3bi - [ struct-offsets ] keep - [ [ type>> ] map compute-struct-align ] keep - [ (define-struct) ] keep - ] [ 2drop '[ _ swap define-field ] ] 3bi each ; + [ 2drop ] [ make-fields ] 3bi + [ struct-offsets ] keep + [ [ type>> ] map compute-struct-align ] keep + [ (define-struct) ] keep + [ define-field ] each ; : define-union ( name members -- ) [ expand-constants ] map @@ -83,4 +82,3 @@ M: struct-type stack-size : offset-of ( field struct -- offset ) c-types get at fields>> [ name>> = ] with find nip offset>> ; -