Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/CodeGen/CodeGenerator.cc

    r30d91e4 r6180274  
    274274        void CodeGenerator::postvisit( EnumDecl * enumDecl ) {
    275275                extension( enumDecl );
     276                output << "enum ";
     277                genAttributes( enumDecl->get_attributes() );
     278
     279                output << enumDecl->get_name();
     280
    276281                std::list< Declaration* > &memb = enumDecl->get_members();
    277                 if (enumDecl->base && ! memb.empty()) {
    278                         unsigned long long last_val = -1;
     282
     283                if ( ! memb.empty() ) {
     284                        output << " {" << endl;
     285
     286                        ++indent;
    279287                        for ( std::list< Declaration* >::iterator i = memb.begin(); i != memb.end();  i++) {
    280288                                ObjectDecl * obj = dynamic_cast< ObjectDecl* >( *i );
    281289                                assert( obj );
    282                                 output << "static const ";
    283                                 output << genType(enumDecl->base, "", options) << " ";
    284                                 output << mangleName( obj ) << " ";
    285                                 output << " = ";
    286                                 output << "(" << genType(enumDecl->base, "", options) << ")";
    287                                 if ( (BasicType *)(enumDecl->base) && ((BasicType *)(enumDecl->base))->isWholeNumber() ) {
    288                                         if ( obj->get_init() ) {
    289                                                 obj->get_init()->accept( *visitor );
    290                                                 last_val = ((ConstantExpr *)(((SingleInit *)(obj->init))->value))->constant.get_ival();
    291                                         } else {
    292                                                 output << ++last_val;
    293                                         } // if
    294                                 } else {
    295                                         if ( obj->get_init() ) {
    296                                                 obj->get_init()->accept( *visitor );
    297                                         } else {
    298                                                 // Should not reach here!
    299                                         }
    300                                 }
    301                                 output << ";" << endl;
     290                                output << indent << mangleName( obj );
     291                                if ( obj->get_init() ) {
     292                                        output << " = ";
     293                                        obj->get_init()->accept( *visitor );
     294                                } // if
     295                                output << "," << endl;
    302296                        } // for
    303                 } else {
    304                         output << "enum ";
    305                         genAttributes( enumDecl->get_attributes() );
    306 
    307                         output << enumDecl->get_name();
    308 
    309                         if ( ! memb.empty() ) {
    310                                 output << " {" << endl;
    311 
    312                                 ++indent;
    313                                 for ( std::list< Declaration* >::iterator i = memb.begin(); i != memb.end();  i++) {
    314                                         ObjectDecl * obj = dynamic_cast< ObjectDecl* >( *i );
    315                                         assert( obj );
    316                                         output << indent << mangleName( obj );
    317                                         if ( obj->get_init() ) {
    318                                                 output << " = ";
    319                                                 obj->get_init()->accept( *visitor );
    320                                         } // if
    321                                         output << "," << endl;
    322                                 } // for
     297
    323298                        --indent;
     299
    324300                        output << indent << "}";
    325                         } // if
    326301                } // if
    327302        }
     
    372347                                des->accept( *visitor );
    373348                        } else {
    374                                 // otherwise, it has to be a ConstantExpr or CastExpr, initializing array element
     349                                // otherwise, it has to be a ConstantExpr or CastExpr, initializing array eleemnt
    375350                                output << "[";
    376351                                des->accept( *visitor );
     
    686661                        output << opInfo->symbol;
    687662                } else {
    688                         // if (dynamic_cast<EnumInstType *>(variableExpr->get_var()->get_type())
    689                         // && dynamic_cast<EnumInstType *>(variableExpr->get_var()->get_type())->baseEnum->base) {
    690                         //      output << '(' <<genType(dynamic_cast<EnumInstType *>(variableExpr->get_var()->get_type())->baseEnum->base, "", options) << ')';
    691                         // }
    692663                        output << mangleName( variableExpr->get_var() );
    693664                } // if
Note: See TracChangeset for help on using the changeset viewer.