]> git.gag.com Git - fw/sdcc/commitdiff
fixed bug #482668
authorjohanknol <johanknol@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Sun, 9 Dec 2001 13:29:38 +0000 (13:29 +0000)
committerjohanknol <johanknol@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Sun, 9 Dec 2001 13:29:38 +0000 (13:29 +0000)
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@1665 4a8a32a2-be11-0410-ad9d-d568d2c75423

src/SDCC.y
src/SDCCsymt.c
support/regression/tests/enum.c

index 7539a6728ca5ea3c4dc80d56c965da785c758fc8..b4b3664615be9f25d67283daf4d61e9306e7e9c3 100644 (file)
@@ -791,8 +791,8 @@ struct_declarator
 
 enum_specifier
    : ENUM            '{' enumerator_list '}' {
-                                                addSymChain ($3);
-                                                allocVariables(reverseSyms($3)) ;
+                                                //addSymChain ($3);
+                                                //allocVariables(reverseSyms($3)) ;
                                                 $$ = copyLinkChain(cenum->type);
                                              }
    | ENUM identifier '{' enumerator_list '}' {
@@ -806,8 +806,8 @@ enum_specifier
                                                    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 ;
                                              }
@@ -838,15 +838,17 @@ enumerator_list
    ;
 
 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
index db8e3ad99e4e3f591c4583ef30da3590ad441870..9d45864c5814029c7fda074b8fe012ac59b3c25e 100644 (file)
@@ -621,6 +621,7 @@ mergeSpec (sym_link * dest, sym_link * src, char *name)
   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);
index 19e0fdb2e4b5ad5234d6f31ba6d28cbd65b65a12..49ef416bb7961052fdb9868db84e620a05c50841 100644 (file)
@@ -19,9 +19,11 @@ enum _ValuesEnum {
 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
@@ -47,6 +49,7 @@ testIndexedEnum(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);
 }