]> gitweb.factorcode.org Git - factor.git/commitdiff
Make alien.enums create singletons so I can dispatch on them. Clean up the code...
authorDoug Coleman <doug.coleman@gmail.com>
Tue, 28 Sep 2010 18:06:59 +0000 (13:06 -0500)
committerDoug Coleman <doug.coleman@gmail.com>
Tue, 28 Sep 2010 20:15:55 +0000 (15:15 -0500)
basis/alien/enums/enums.factor

index 18000105e7d0107a1bc7e750e9ed321a23b89d26..f46702f450d802e6e19b2fe99aa505e1f8651f9b 100644 (file)
@@ -1,6 +1,7 @@
 ! (c)2010 Joe Groff, Erik Charlebois bsd license
 USING: accessors alien.c-types arrays combinators delegate fry
-generic.parser kernel macros math parser sequences words words.symbol ;
+generic.parser kernel macros math parser sequences words words.symbol
+classes.singleton assocs ;
 IN: alien.enums
 
 <PRIVATE
@@ -34,11 +35,11 @@ M: enum-c-type c-type-setter
 : define-enum-value ( class value -- )
     "enum-value" set-word-prop ;
 
-: define-enum-members ( member-names -- )
+: define-enum-members ( members -- )
     [
-        [ first define-symbol ]
-        [ first2 define-enum-value ] bi
-    ] each ;
+        [ drop define-singleton-class ]
+        [ define-enum-value ] 2bi
+    ] assoc-each ;
 
 : define-enum-constructor ( word -- )
     [ name>> "<" ">" surround create-in ] keep
@@ -48,8 +49,8 @@ PRIVATE>
 
 : define-enum ( word base-type members -- )
     [ dup define-enum-constructor ] 2dip
-    dup define-enum-members
-    <enum-c-type> swap typedef ;
+    [ define-enum-members ]
+    [ <enum-c-type> swap typedef ] bi ;
     
 PREDICATE: enum-c-type-word < c-type-word
     "c-type" word-prop enum-c-type? ;