enum_specifier
: ENUM '{' enumerator_list '}' {
- addSymChain ($3);
- allocVariables(reverseSyms($3)) ;
+ //addSymChain ($3);
+ //allocVariables(reverseSyms($3)) ;
$$ = copyLinkChain(cenum->type);
}
| ENUM identifier '{' enumerator_list '}' {
werror(E_DUPLICATE_TYPEDEF,csym->name);
addSym ( enumTab,$2,$2->name,$2->level,$2->block, 0);
- addSymChain ($4);
- allocVariables (reverseSyms($4));
+ //addSymChain ($4);
+ //allocVariables (reverseSyms($4));
$$ = copyLinkChain(cenum->type);
SPEC_SCLS(getSpec($$)) = 0 ;
}
;
enumerator
- : identifier opt_assign_expr {
- /* make the symbol one level up */
- $1->level-- ;
- $1->type = copyLinkChain($2->type);
- $1->etype= getSpec($1->type);
- SPEC_ENUM($1->etype) = 1;
- $$ = $1 ;
-
- }
+ : identifier opt_assign_expr
+ {
+ /* make the symbol one level up */
+ $1->level-- ;
+ $1->type = copyLinkChain($2->type);
+ $1->etype= getSpec($1->type);
+ SPEC_ENUM($1->etype) = 1;
+ $$ = $1 ;
+ // do this now, so we can use it for the next enums in the list
+ addSymChain($1);
+ }
;
opt_assign_expr
SPEC_BLEN (dest) |= SPEC_BLEN (src);
SPEC_BSTR (dest) |= SPEC_BSTR (src);
SPEC_TYPEDEF (dest) |= SPEC_TYPEDEF (src);
+ SPEC_ENUM (dest) |= SPEC_ENUM (src);
if (IS_STRUCT (dest) && SPEC_STRUCT (dest) == NULL)
SPEC_STRUCT (dest) = SPEC_STRUCT (src);
enum _IndexedEnum {
INDEXED_ZERO,
INDEXED_ONE,
- /* PENDING: Fails */
- //INDEXED_ONE_ALIAS = INDEXED_ONE,
- INDEXED_TWO
+ INDEXED_ONE_ALIAS = INDEXED_ONE,
+ INDEXED_TWO,
+ INDEXED_THREE,
+ INDEXED_MATH = INDEXED_ONE_ALIAS + INDEXED_TWO * INDEXED_THREE
+
};
void
{
ASSERT(INDEXED_ZERO == 0);
ASSERT(INDEXED_ONE == 1);
- // ASSERT(INDEXED_ONE_ALIAS == 1);
+ ASSERT(INDEXED_ONE_ALIAS == 1);
ASSERT(INDEXED_TWO == 2);
+ ASSERT(INDEXED_MATH == 7);
}