Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/CodeGen/CodeGenerator.cc

    r3eb1653 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                 (dynamic_cast<BasicType *>(enumDecl->base)
    279                  && !(dynamic_cast<BasicType *>(enumDecl->base)->kind == BasicType::Kind::SignedInt))) {
    280                         ObjectDecl * last = nullptr;
     282
     283                if ( ! memb.empty() ) {
     284                        output << " {" << endl;
     285
     286                        ++indent;
    281287                        for ( std::list< Declaration* >::iterator i = memb.begin(); i != memb.end();  i++) {
    282288                                ObjectDecl * obj = dynamic_cast< ObjectDecl* >( *i );
    283289                                assert( obj );
    284                                 output << "static const ";
    285                                 output << genType(enumDecl->base, "", options) << " ";
    286                                 output << mangleName( obj ) << " ";
    287                                 output << " = ";
    288                                 output << "(" << genType(enumDecl->base, "", options) << ")";;
     290                                output << indent << mangleName( obj );
    289291                                if ( obj->get_init() ) {
     292                                        output << " = ";
    290293                                        obj->get_init()->accept( *visitor );
    291                                 } else {
    292                                         if (last == nullptr) {
    293                                                 output << 0;
    294                                         } else {
    295                                                 output << mangleName(last) << " + 1";
    296                                         }
    297                                 } // if—
    298                                 output << ";" << endl;
    299                                 last = obj;
     294                                } // if
     295                                output << "," << endl;
    300296                        } // for
    301                 } else {
    302                         output << "enum ";
    303                         genAttributes( enumDecl->get_attributes() );
    304 
    305                         output << enumDecl->get_name();
    306 
    307                         if ( ! memb.empty() ) {
    308                                 output << " {" << endl;
    309 
    310                                 ++indent;
    311                                 for ( std::list< Declaration* >::iterator i = memb.begin(); i != memb.end();  i++) {
    312                                         ObjectDecl * obj = dynamic_cast< ObjectDecl* >( *i );
    313                                         assert( obj );
    314                                         output << indent << mangleName( obj );
    315                                         if ( obj->get_init() ) {
    316                                                 output << " = ";
    317                                                 obj->get_init()->accept( *visitor );
    318                                         } // if
    319                                         output << "," << endl;
    320                                 } // for
     297
    321298                        --indent;
     299
    322300                        output << indent << "}";
    323                         } // if
    324301                } // if
    325302        }
     
    370347                                des->accept( *visitor );
    371348                        } else {
    372                                 // 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
    373350                                output << "[";
    374351                                des->accept( *visitor );
     
    684661                        output << opInfo->symbol;
    685662                } else {
    686                         // if (dynamic_cast<EnumInstType *>(variableExpr->get_var()->get_type())
    687                         // && dynamic_cast<EnumInstType *>(variableExpr->get_var()->get_type())->baseEnum->base) {
    688                         //      output << '(' <<genType(dynamic_cast<EnumInstType *>(variableExpr->get_var()->get_type())->baseEnum->base, "", options) << ')';
    689                         // }
    690663                        output << mangleName( variableExpr->get_var() );
    691664                } // if
Note: See TracChangeset for help on using the changeset viewer.