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
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 ;
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? ;
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 ;