]> gitweb.factorcode.org Git - factor.git/commitdiff
typedefs share their original type's pointer definition
authorJoe Groff <arcata@gmail.com>
Wed, 16 Sep 2009 03:58:07 +0000 (22:58 -0500)
committerJoe Groff <arcata@gmail.com>
Wed, 16 Sep 2009 03:58:07 +0000 (22:58 -0500)
basis/alien/c-types/c-types-tests.factor
basis/alien/c-types/c-types.factor

index bfeff5f1de2bc0186006b5621a39f44de4c5136b..792e7d416acf1aa86f1c5762a7e7142dcb429f4c 100644 (file)
@@ -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 } <displaced-alien> <void*>
index 02ab2dcafa1de63ee4a01e65094353bce180bbbe..7dc00333b8c49e8ec95af7b51357af4123e6bbd2 100755 (executable)
@@ -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 ;