]> gitweb.factorcode.org Git - factor.git/commitdiff
alien.enums: make it so that define-enum assigns enum values again for non-parsed...
authorJoe Groff <arcata@gmail.com>
Fri, 16 Jul 2010 18:47:23 +0000 (11:47 -0700)
committerJoe Groff <arcata@gmail.com>
Fri, 16 Jul 2010 18:47:23 +0000 (11:47 -0700)
basis/alien/enums/enums-tests.factor
basis/alien/enums/enums.factor
basis/alien/syntax/syntax.factor

index 52337594a1d7edd839bc6525dfacf1bc108f49ed..a1813d632e3ae2ba69c655b402ac3ba6bf003bbb 100644 (file)
@@ -37,3 +37,15 @@ ENUM: instrument_t < ushort trombone trumpet ;
 ENUM: colores { rojo red } { verde green } { azul blue } { colorado rojo } ;
 
 [ { 0 3 4 0 } ] [ { rojo verde azul colorado } [ enum>number ] map ] unit-test
+
+SYMBOLS: couleurs rouge vert bleu jaune azure ;
+
+<< couleurs int {
+    { rouge red }
+    { vert green }
+    { bleu blue }
+    { jaune 14 }
+    { azure bleu }
+} define-enum >>
+
+[ { 0 3 4 14 4 } ] [ { rouge vert bleu jaune azure } [ enum>number ] map ] unit-test
index 4ac7c24cb5c3c301985992f9b1657d3c4f8915ce..c568c2af4cc94bca9c7b67ec01b24fa11a306aff 100644 (file)
@@ -29,11 +29,11 @@ M: enum-c-type c-type-unboxer-quot drop [ enum>number ] ;
 M: enum-c-type c-type-setter
    [ enum>number ] swap base-type>> c-type-setter '[ _ 2dip @ ] ;
 
-<PRIVATE
-
 : define-enum-value ( class value -- )
     enum>number "enum-value" set-word-prop ;
 
+<PRIVATE
+
 : define-enum-members ( member-names -- )
     [ first define-symbol ] each ;
 
@@ -43,10 +43,14 @@ M: enum-c-type c-type-setter
 
 PRIVATE>
 
-: define-enum ( word base-type members -- )
+: (define-enum) ( word base-type members -- )
     [ dup define-enum-constructor ] 2dip
     dup define-enum-members
     <enum-c-type> swap typedef ;
+
+: define-enum ( word base-type members -- )
+    [ (define-enum) ]
+    [ [ first2 define-enum-value ] each ] bi ;
     
 PREDICATE: enum-c-type-word < c-type-word
     "c-type" word-prop enum-c-type? ;
index 6c2dc5ca85e97abcc51c6bb62d9448ca62d97a50..22ad3bd1740a913182ee2de1c686113cb4c4b50a 100755 (executable)
@@ -29,7 +29,7 @@ SYNTAX: TYPEDEF:
     scan-c-type CREATE-C-TYPE dup save-location typedef ;
 
 SYNTAX: ENUM:
-    parse-enum define-enum ;
+    parse-enum (define-enum) ;
 
 SYNTAX: C-TYPE:
     void CREATE-C-TYPE typedef ;