alien.enums: make it so that define-enum assigns enum values again for non-parsed enum types

db4
Joe Groff 2010-07-16 11:47:23 -07:00
parent 74dc8db962
commit a4e71b2cad
3 changed files with 20 additions and 4 deletions

View 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

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

View File

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