Changeset 544deb9 for src/Validate/Autogen.cpp
- Timestamp:
- Jan 24, 2024, 6:05:16 AM (6 months ago)
- Branches:
- master
- Children:
- 71b5aad5
- Parents:
- 367725d
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Validate/Autogen.cpp
r367725d r544deb9 803 803 } 804 804 805 struct PseudoFuncGenerateRoutine final :806 public ast::WithDeclsToAdd<>,807 public ast::WithShortCircuiting {808 void previsit( const ast::EnumDecl * enumDecl );809 };810 811 void PseudoFuncGenerateRoutine::previsit( const ast::EnumDecl * enumDecl ) {812 const CodeLocation& location = enumDecl->location;813 if ( enumDecl->members.size() == 0 || !enumDecl->base || enumDecl->name == "" ) return;814 815 std::vector<ast::ptr<ast::Init>> inits;816 std::vector<ast::ptr<ast::Init>> labels;817 for ( const ast::Decl * mem: enumDecl->members ) {818 auto memAsObjectDecl = dynamic_cast< const ast::ObjectDecl * >( mem );819 inits.emplace_back( memAsObjectDecl->init );820 labels.emplace_back( new ast::SingleInit(821 location, ast::ConstantExpr::from_string(location, mem->name) ) );822 }823 auto init = new ast::ListInit( location, std::move( inits ) );824 auto label_strings = new ast::ListInit( location, std::move(labels) );825 auto values = new ast::ObjectDecl(826 location,827 "__enum_values_"+enumDecl->name,828 new ast::ArrayType(829 // new ast::PointerType( new ast::BasicType{ ast::BasicType::Char} ),830 enumDecl->base,831 ast::ConstantExpr::from_int( location, enumDecl->members.size() ),832 ast::LengthFlag::FixedLen, ast::DimensionFlag::DynamicDim833 )834 ,init835 ,836 ast::Storage::Static,837 ast::Linkage::AutoGen838 );839 auto label_arr = new ast::ObjectDecl(840 location,841 "__enum_labels_"+enumDecl->name,842 new ast::ArrayType(843 new ast::PointerType( new ast::BasicType{ ast::BasicType::Char} ),844 ast::ConstantExpr::from_int( location, enumDecl->members.size() ),845 ast::LengthFlag::FixedLen, ast::DimensionFlag::DynamicDim846 ),847 label_strings,848 ast::Storage::Static,849 ast::Linkage::AutoGen850 );851 852 declsToAddAfter.push_back( values );853 declsToAddAfter.push_back( label_arr );854 }855 856 805 } // namespace 857 806 858 807 void autogenerateRoutines( ast::TranslationUnit & translationUnit ) { 859 808 ast::Pass<AutogenerateRoutines>::run( translationUnit ); 860 // ast::Pass<PseudoFuncGenerateRoutine>::run( translationUnit );861 809 } 862 810
Note: See TracChangeset
for help on using the changeset viewer.