From 192a164ef497d90fb96fa09f171d53bb0bc3febc Mon Sep 17 00:00:00 2001 From: Slava Pestov <slava@slava-pestovs-macbook-pro.local> Date: Tue, 2 Dec 2008 00:24:00 -0600 Subject: [PATCH] Fix some bugs --- basis/alien/c-types/c-types.factor | 6 +++--- basis/alien/strings/strings.factor | 6 +++--- basis/alien/structs/structs.factor | 9 +++++---- basis/alien/syntax/syntax.factor | 7 ++----- 4 files changed, 13 insertions(+), 15 deletions(-) diff --git a/basis/alien/c-types/c-types.factor b/basis/alien/c-types/c-types.factor index 5fe139a56f..c3ae644b47 100644 --- a/basis/alien/c-types/c-types.factor +++ b/basis/alien/c-types/c-types.factor @@ -4,7 +4,7 @@ USING: byte-arrays arrays assocs kernel kernel.private libc math namespaces make parser sequences strings words assocs splitting math.parser cpu.architecture alien alien.accessors quotations layouts system compiler.units io.files io.encodings.binary -accessors combinators effects continuations ; +accessors combinators effects continuations fry ; IN: alien.c-types DEFER: <int> @@ -240,8 +240,8 @@ M: long-long-type box-return ( type -- ) : define-out ( name -- ) [ "alien.c-types" constructor-word ] - [ [ [ <c-object> ] curry ] [ c-setter ] bi append ] bi - define-inline ; + [ dup c-setter '[ _ <c-object> [ 0 @ ] keep ] ] + bi define-inline ; : c-bool> ( int -- ? ) zero? not ; diff --git a/basis/alien/strings/strings.factor b/basis/alien/strings/strings.factor index 54a6cbfb4a..d482634772 100644 --- a/basis/alien/strings/strings.factor +++ b/basis/alien/strings/strings.factor @@ -3,7 +3,7 @@ USING: arrays sequences kernel accessors math alien.accessors alien.c-types byte-arrays words io io.encodings io.streams.byte-array io.streams.memory io.encodings.utf8 -io.encodings.utf16 system alien strings cpu.architecture ; +io.encodings.utf16 system alien strings cpu.architecture fry ; IN: alien.strings GENERIC# alien>string 1 ( c-ptr encoding -- string/f ) @@ -77,10 +77,10 @@ M: string-type c-type-unboxer drop "void*" c-type-unboxer ; M: string-type c-type-boxer-quot - second [ alien>string ] curry [ ] like ; + second '[ _ alien>string ] ; M: string-type c-type-unboxer-quot - second [ string>alien ] curry [ ] like ; + second '[ _ string>alien ] ; M: string-type c-type-getter drop [ alien-cell ] ; diff --git a/basis/alien/structs/structs.factor b/basis/alien/structs/structs.factor index 9bbb5ce2aa..a3c616cda2 100644 --- a/basis/alien/structs/structs.factor +++ b/basis/alien/structs/structs.factor @@ -43,20 +43,21 @@ M: struct-type stack-size struct-type boa swap typedef ; -: define-struct-early ( name vocab fields -- fields ) +: make-fields ( name vocab fields -- fields ) [ first2 <field-spec> ] with with map ; : compute-struct-align ( types -- n ) [ c-type-align ] map supremum ; : define-struct ( name vocab fields -- ) - pick [ + [ + [ 2drop ] [ make-fields ] 3bi [ struct-offsets ] keep [ [ type>> ] map compute-struct-align ] keep [ (define-struct) ] keep - ] dip [ swap define-field ] curry each ; + ] [ 2drop '[ _ swap define-field ] ] 3bi each ; -: define-union ( name vocab members -- ) +: define-union ( name members -- ) [ expand-constants ] map [ [ heap-size ] map supremum ] keep compute-struct-align f (define-struct) ; diff --git a/basis/alien/syntax/syntax.factor b/basis/alien/syntax/syntax.factor index a204b1621c..d10c97cd3d 100644 --- a/basis/alien/syntax/syntax.factor +++ b/basis/alien/syntax/syntax.factor @@ -24,13 +24,10 @@ IN: alien.syntax scan scan typedef ; parsing : C-STRUCT: - scan in get - parse-definition - [ 2dup ] dip define-struct-early - define-struct ; parsing + scan in get parse-definition define-struct ; parsing : C-UNION: - scan in get parse-definition define-union ; parsing + scan parse-definition define-union ; parsing : C-ENUM: ";" parse-tokens