Changeset def751f for src/AST/Pass.impl.hpp
- Timestamp:
- Jul 25, 2022, 3:17:25 PM (3 years ago)
- Branches:
- ADT, ast-experimental, master, pthread-emulation, qualifiedEnum
- Children:
- b0d9ff7
- Parents:
- 4e2befe3 (diff), ffec1bf (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/AST/Pass.impl.hpp
r4e2befe3 rdef751f 155 155 __pedantic_pass_assert( expr ); 156 156 157 const ast::TypeSubstitution ** typeSubs_ptr = __pass::typeSubs( core, 0 );158 if ( typeSubs_ptr && expr->env ) {159 *typeSubs_ptr = expr->env;160 }161 162 157 auto nval = expr->accept( *this ); 163 158 return { nval != expr, nval }; … … 171 166 const ast::Stmt * nval = stmt->accept( *this ); 172 167 return { nval != stmt, nval }; 168 } 169 170 template< typename core_t > 171 __pass::template result1<ast::Expr> ast::Pass< core_t >::call_accept_top( const ast::Expr * expr ) { 172 __pedantic_pass_assert( __visit_children() ); 173 __pedantic_pass_assert( expr ); 174 175 const ast::TypeSubstitution ** typeSubs_ptr = __pass::typeSubs( core, 0 ); 176 if ( typeSubs_ptr && expr->env ) { 177 *typeSubs_ptr = expr->env; 178 } 179 180 auto nval = expr->accept( *this ); 181 return { nval != expr, nval }; 173 182 } 174 183 … … 410 419 411 420 auto new_val = call_accept( old_val ); 421 422 static_assert( !std::is_same<const ast::Node *, decltype(new_val)>::value /* || std::is_same<int, decltype(old_val)>::value */, "ERROR"); 423 424 if( new_val.differs ) { 425 auto new_parent = __pass::mutate<core_t>(parent); 426 new_val.apply(new_parent, field); 427 parent = new_parent; 428 } 429 } 430 431 template< typename core_t > 432 template<typename node_t, typename super_t, typename field_t> 433 void ast::Pass< core_t >::maybe_accept_top( 434 const node_t * & parent, 435 field_t super_t::*field 436 ) { 437 static_assert( std::is_base_of<super_t, node_t>::value, "Error deducing member object" ); 438 439 if(__pass::skip(parent->*field)) return; 440 const auto & old_val = __pass::get(parent->*field, 0); 441 442 static_assert( !std::is_same<const ast::Node * &, decltype(old_val)>::value, "ERROR"); 443 444 auto new_val = call_accept_top( old_val ); 412 445 413 446 static_assert( !std::is_same<const ast::Node *, decltype(new_val)>::value /* || std::is_same<int, decltype(old_val)>::value */, "ERROR"); … … 756 789 757 790 if ( __visit_children() ) { 758 maybe_accept ( node, &StaticAssertDecl::cond );791 maybe_accept_top( node, &StaticAssertDecl::cond ); 759 792 maybe_accept( node, &StaticAssertDecl::msg ); 760 793 } … … 798 831 799 832 if ( __visit_children() ) { 800 maybe_accept ( node, &ExprStmt::expr );833 maybe_accept_top( node, &ExprStmt::expr ); 801 834 } 802 835 … … 839 872 guard_symtab guard { *this }; 840 873 maybe_accept( node, &IfStmt::inits ); 841 maybe_accept ( node, &IfStmt::cond );874 maybe_accept_top( node, &IfStmt::cond ); 842 875 maybe_accept_as_compound( node, &IfStmt::then ); 843 876 maybe_accept_as_compound( node, &IfStmt::else_ ); … … 857 890 guard_symtab guard { *this }; 858 891 maybe_accept( node, &WhileDoStmt::inits ); 859 maybe_accept ( node, &WhileDoStmt::cond );892 maybe_accept_top( node, &WhileDoStmt::cond ); 860 893 maybe_accept_as_compound( node, &WhileDoStmt::body ); 861 894 } … … 875 908 // xxx - old ast does not create WithStmtsToAdd scope for loop inits. should revisit this later. 876 909 maybe_accept( node, &ForStmt::inits ); 877 maybe_accept ( node, &ForStmt::cond );878 maybe_accept ( node, &ForStmt::inc );910 maybe_accept_top( node, &ForStmt::cond ); 911 maybe_accept_top( node, &ForStmt::inc ); 879 912 maybe_accept_as_compound( node, &ForStmt::body ); 880 913 } … … 890 923 891 924 if ( __visit_children() ) { 892 maybe_accept ( node, &SwitchStmt::cond );925 maybe_accept_top( node, &SwitchStmt::cond ); 893 926 maybe_accept( node, &SwitchStmt::cases ); 894 927 } … … 904 937 905 938 if ( __visit_children() ) { 906 maybe_accept ( node, &CaseClause::cond );939 maybe_accept_top( node, &CaseClause::cond ); 907 940 maybe_accept( node, &CaseClause::stmts ); 908 941 } … … 926 959 927 960 if ( __visit_children() ) { 928 maybe_accept ( node, &ReturnStmt::expr );961 maybe_accept_top( node, &ReturnStmt::expr ); 929 962 } 930 963 … … 971 1004 guard_symtab guard { *this }; 972 1005 maybe_accept( node, &CatchClause::decl ); 973 maybe_accept ( node, &CatchClause::cond );1006 maybe_accept_top( node, &CatchClause::cond ); 974 1007 maybe_accept_as_compound( node, &CatchClause::body ); 975 1008 } … … 2058 2091 2059 2092 if ( __visit_children() ) { 2060 maybe_accept ( node, &SingleInit::value );2093 maybe_accept_top( node, &SingleInit::value ); 2061 2094 } 2062 2095
Note:
See TracChangeset
for help on using the changeset viewer.