From 6dc6886bd92c93b94c8ba74db0360a4afb612e5f Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Tue, 15 Sep 2009 22:58:07 -0500 Subject: [PATCH] typedefs share their original type's pointer definition --- basis/alien/c-types/c-types-tests.factor | 2 +- basis/alien/c-types/c-types.factor | 18 +++++++++++++----- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/basis/alien/c-types/c-types-tests.factor b/basis/alien/c-types/c-types-tests.factor index bfeff5f1de..792e7d416a 100644 --- a/basis/alien/c-types/c-types-tests.factor +++ b/basis/alien/c-types/c-types-tests.factor @@ -43,7 +43,7 @@ TYPEDEF: int* MyIntArray TYPEDEF: uchar* MyLPBYTE -[ t ] [ { "char*" utf8 } c-type "MyLPBYTE" c-type = ] unit-test +[ t ] [ { char* utf8 } c-type "MyLPBYTE" c-type = ] unit-test [ 0 B{ 1 2 3 4 } diff --git a/basis/alien/c-types/c-types.factor b/basis/alien/c-types/c-types.factor index 02ab2dcafa..7dc00333b8 100755 --- a/basis/alien/c-types/c-types.factor +++ b/basis/alien/c-types/c-types.factor @@ -65,8 +65,8 @@ M: word resolve-pointer-type dup "pointer-c-type" word-prop [ ] [ drop void* ] ?if ; M: string resolve-pointer-type - c-types get at dup string? - [ "*" append ] [ drop void* ] if ; + c-types get at dup c-type-name? + [ resolve-pointer-type ] [ drop void* ] if ; : resolve-typedef ( name -- type ) dup c-type-name? [ c-type ] when ; @@ -313,9 +313,17 @@ PREDICATE: typedef-word < c-type-word M: string typedef ( old new -- ) c-types get set-at ; M: word typedef ( old new -- ) - [ nip define-symbol ] - [ name>> typedef ] - [ swap "c-type" set-word-prop ] 2tri ; + { + [ nip define-symbol ] + [ name>> typedef ] + [ swap "c-type" set-word-prop ] + [ + swap dup word? [ + "pointer-c-type" word-prop + "pointer-c-type" set-word-prop + ] [ 2drop ] if + ] + } 2cleave ; TUPLE: long-long-type < c-type ;