Changes in src/Validate/Autogen.cpp [59c8dff:544deb9]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Validate/Autogen.cpp
r59c8dff r544deb9 445 445 446 446 auto * paramType = ast::deepCopy( member->get_type() ); 447 paramType->attributes.clear(); 447 erase_if( paramType->attributes, []( ast::Attribute const * attr ){ 448 return !attr->isValidOnFuncParam(); 449 } ); 448 450 ast::ObjectDecl * param = new ast::ObjectDecl( 449 451 getLocation(), member->name, paramType ); … … 801 803 } 802 804 803 struct PseudoFuncGenerateRoutine final :804 public ast::WithDeclsToAdd<>,805 public ast::WithShortCircuiting {806 void previsit( const ast::EnumDecl * enumDecl );807 };808 809 void PseudoFuncGenerateRoutine::previsit( const ast::EnumDecl * enumDecl ) {810 const CodeLocation& location = enumDecl->location;811 if ( enumDecl->members.size() == 0 || !enumDecl->base || enumDecl->name == "" ) return;812 813 std::vector<ast::ptr<ast::Init>> inits;814 std::vector<ast::ptr<ast::Init>> labels;815 for ( const ast::Decl * mem: enumDecl->members ) {816 auto memAsObjectDecl = dynamic_cast< const ast::ObjectDecl * >( mem );817 inits.emplace_back( memAsObjectDecl->init );818 labels.emplace_back( new ast::SingleInit(819 location, ast::ConstantExpr::from_string(location, mem->name) ) );820 }821 auto init = new ast::ListInit( location, std::move( inits ) );822 auto label_strings = new ast::ListInit( location, std::move(labels) );823 auto values = new ast::ObjectDecl(824 location,825 "__enum_values_"+enumDecl->name,826 new ast::ArrayType(827 // new ast::PointerType( new ast::BasicType{ ast::BasicType::Char} ),828 enumDecl->base,829 ast::ConstantExpr::from_int( location, enumDecl->members.size() ),830 ast::LengthFlag::FixedLen, ast::DimensionFlag::DynamicDim831 )832 ,init833 ,834 ast::Storage::Static,835 ast::Linkage::AutoGen836 );837 auto label_arr = new ast::ObjectDecl(838 location,839 "__enum_labels_"+enumDecl->name,840 new ast::ArrayType(841 new ast::PointerType( new ast::BasicType{ ast::BasicType::Char} ),842 ast::ConstantExpr::from_int( location, enumDecl->members.size() ),843 ast::LengthFlag::FixedLen, ast::DimensionFlag::DynamicDim844 ),845 label_strings,846 ast::Storage::Static,847 ast::Linkage::AutoGen848 );849 850 declsToAddAfter.push_back( values );851 declsToAddAfter.push_back( label_arr );852 }853 854 805 } // namespace 855 806 856 807 void autogenerateRoutines( ast::TranslationUnit & translationUnit ) { 857 808 ast::Pass<AutogenerateRoutines>::run( translationUnit ); 858 // ast::Pass<PseudoFuncGenerateRoutine>::run( translationUnit );859 809 } 860 810
Note: See TracChangeset
for help on using the changeset viewer.