Changes in src/CodeGen/CodeGenerator.cc [3eb1653:6180274]
- File:
-
- 1 edited
-
src/CodeGen/CodeGenerator.cc (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/CodeGen/CodeGenerator.cc
r3eb1653 r6180274 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 276 281 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; 281 287 for ( std::list< Declaration* >::iterator i = memb.begin(); i != memb.end(); i++) { 282 288 ObjectDecl * obj = dynamic_cast< ObjectDecl* >( *i ); 283 289 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 ); 289 291 if ( obj->get_init() ) { 292 output << " = "; 290 293 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; 300 296 } // 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 321 298 --indent; 299 322 300 output << indent << "}"; 323 } // if324 301 } // if 325 302 } … … 370 347 des->accept( *visitor ); 371 348 } else { 372 // otherwise, it has to be a ConstantExpr or CastExpr, initializing array ele ment349 // otherwise, it has to be a ConstantExpr or CastExpr, initializing array eleemnt 373 350 output << "["; 374 351 des->accept( *visitor ); … … 684 661 output << opInfo->symbol; 685 662 } 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 // }690 663 output << mangleName( variableExpr->get_var() ); 691 664 } // if
Note:
See TracChangeset
for help on using the changeset viewer.