Changes in src/CodeGen/CodeGenerator.cc [6180274:3eb1653]
- File:
-
- 1 edited
-
src/CodeGen/CodeGenerator.cc (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/CodeGen/CodeGenerator.cc
r6180274 r3eb1653 274 274 void CodeGenerator::postvisit( EnumDecl * enumDecl ) { 275 275 extension( enumDecl ); 276 output << "enum ";277 genAttributes( enumDecl->get_attributes() );278 279 output << enumDecl->get_name();280 281 276 std::list< Declaration* > &memb = enumDecl->get_members(); 282 283 if ( ! memb.empty() ) { 284 output << " {" << endl; 285 286 ++indent; 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; 287 281 for ( std::list< Declaration* >::iterator i = memb.begin(); i != memb.end(); i++) { 288 282 ObjectDecl * obj = dynamic_cast< ObjectDecl* >( *i ); 289 283 assert( obj ); 290 output << indent << mangleName( obj ); 284 output << "static const "; 285 output << genType(enumDecl->base, "", options) << " "; 286 output << mangleName( obj ) << " "; 287 output << " = "; 288 output << "(" << genType(enumDecl->base, "", options) << ")";; 291 289 if ( obj->get_init() ) { 292 output << " = ";293 290 obj->get_init()->accept( *visitor ); 294 } // if 295 output << "," << endl; 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; 296 300 } // for 297 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 298 321 --indent; 299 300 322 output << indent << "}"; 323 } // if 301 324 } // if 302 325 } … … 347 370 des->accept( *visitor ); 348 371 } else { 349 // otherwise, it has to be a ConstantExpr or CastExpr, initializing array ele emnt372 // otherwise, it has to be a ConstantExpr or CastExpr, initializing array element 350 373 output << "["; 351 374 des->accept( *visitor ); … … 661 684 output << opInfo->symbol; 662 685 } 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 // } 663 690 output << mangleName( variableExpr->get_var() ); 664 691 } // if
Note:
See TracChangeset
for help on using the changeset viewer.