Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/AST/Pass.impl.hpp

    rc570806 re67991f  
    127127                        , decltype( node->accept(*this) )
    128128                >::type
     129
    129130        {
    130131                __pedantic_pass_assert( __visit_children() );
    131                 __pedantic_pass_assert( node );
     132                __pedantic_pass_assert( expr );
    132133
    133134                static_assert( !std::is_base_of<ast::Expr, node_t>::value, "ERROR");
     
    322323        }
    323324
    324 
    325         template< typename pass_t >
    326         template< typename node_t >
    327         void ast::Pass< pass_t >::mutate_forall( const node_t *& node ) {
    328                 if ( auto subs = __pass::forall::subs( pass, 0 ) ) {
    329                         // tracking TypeDecl substitution, full clone
    330                         if ( node->forall.empty() ) return;
    331 
    332                         node_t * mut = mutate( node );
    333                         mut->forall = subs->clone( node->forall, *this );
    334                         node = mut;
    335                 } else {
    336                         // not tracking TypeDecl substitution, just mutate
    337                         maybe_accept( node, &node_t::forall );
    338                 }
    339         }
    340325}
    341326
     
    444429                        guard_symtab guard { *this };
    445430                        // implicit add __func__ identifier as specified in the C manual 6.4.2.2
    446                         static ast::ptr< ast::ObjectDecl > func{ new ast::ObjectDecl{
    447                                 CodeLocation{}, "__func__",
    448                                 new ast::ArrayType{
    449                                         new ast::BasicType{ ast::BasicType::Char, ast::CV::Const },
     431                        static ast::ObjectDecl func(
     432                                node->location, "__func__",
     433                                new ast::ArrayType(
     434                                        new ast::BasicType( ast::BasicType::Char, ast::CV::Qualifiers( ast::CV::Const ) ),
    450435                                        nullptr, VariableLen, DynamicDim
    451                                 }
    452                         } };
    453                         __pass::symtab::addId( pass, 0, func );
     436                                )
     437                        );
     438                        __pass::symtab::addId( pass, 0, &func );
    454439                        VISIT(
    455440                                maybe_accept( node, &FunctionDecl::type );
     
    625610        VISIT({
    626611                // do not enter a new scope if inFunction is true - needs to check old state before the assignment
    627                 auto guard1 = makeFuncGuard( [this, inFunctionCpy = this->inFunction]() {
    628                         if ( ! inFunctionCpy ) __pass::symtab::enter(pass, 0);
    629                 }, [this, inFunctionCpy = this->inFunction]() {
    630                         if ( ! inFunctionCpy ) __pass::symtab::leave(pass, 0);
     612                auto guard1 = makeFuncGuard( [this, inFunction = this->inFunction]() {
     613                        if ( ! inFunction ) __pass::symtab::enter(pass, 0);
     614                }, [this, inFunction = this->inFunction]() {
     615                        if ( ! inFunction ) __pass::symtab::leave(pass, 0);
    631616                });
    632617                ValueGuard< bool > guard2( inFunction );
     
    953938        // For now this isn't visited, it is unclear if this causes problem
    954939        // if all tests are known to pass, remove this code
    955         VISIT(
    956                 maybe_accept( node, &ImplicitCtorDtorStmt::callStmt );
    957         )
     940        // VISIT(
     941        //      maybe_accept( node, &ImplicitCtorDtorStmt::callStmt );
     942        // )
    958943
    959944        VISIT_END( Stmt, node );
     
    16821667        VISIT_START( node );
    16831668
    1684         VISIT({
    1685                 guard_forall_subs forall_guard { *this, node };
    1686                 mutate_forall( node );
     1669        VISIT(
     1670                maybe_accept( node, &FunctionType::forall  );
    16871671                maybe_accept( node, &FunctionType::returns );
    16881672                maybe_accept( node, &FunctionType::params  );
    1689         })
     1673        )
    16901674
    16911675        VISIT_END( Type, node );
     
    17021686        VISIT({
    17031687                guard_symtab guard { *this };
    1704                 guard_forall_subs forall_guard { *this, node };
    1705                 mutate_forall( node );
     1688                maybe_accept( node, &StructInstType::forall );
    17061689                maybe_accept( node, &StructInstType::params );
    17071690        })
     
    17161699        VISIT_START( node );
    17171700
    1718         __pass::symtab::addUnion( pass, 0, node->name );
    1719 
    1720         VISIT({
     1701        __pass::symtab::addStruct( pass, 0, node->name );
     1702
     1703        {
    17211704                guard_symtab guard { *this };
    1722                 guard_forall_subs forall_guard { *this, node };
    1723                 mutate_forall( node );
     1705                maybe_accept( node, &UnionInstType::forall );
    17241706                maybe_accept( node, &UnionInstType::params );
    1725         })
     1707        }
    17261708
    17271709        VISIT_END( Type, node );
     
    17341716        VISIT_START( node );
    17351717
    1736         VISIT({
    1737                 guard_forall_subs forall_guard { *this, node };
    1738                 mutate_forall( node );
     1718        VISIT(
     1719                maybe_accept( node, &EnumInstType::forall );
    17391720                maybe_accept( node, &EnumInstType::params );
    1740         })
     1721        )
    17411722
    17421723        VISIT_END( Type, node );
     
    17491730        VISIT_START( node );
    17501731
    1751         VISIT({
    1752                 guard_forall_subs forall_guard { *this, node };
    1753                 mutate_forall( node );
     1732        VISIT(
     1733                maybe_accept( node, &TraitInstType::forall );
    17541734                maybe_accept( node, &TraitInstType::params );
    1755         })
     1735        )
    17561736
    17571737        VISIT_END( Type, node );
     
    17651745
    17661746        VISIT(
    1767                 {
    1768                         guard_forall_subs forall_guard { *this, node };
    1769                         mutate_forall( node );
    1770                         maybe_accept( node, &TypeInstType::params );
    1771                 }
    1772                 // ensure that base re-bound if doing substitution
    1773                 __pass::forall::replace( pass, 0, node );
     1747                maybe_accept( node, &TypeInstType::forall );
     1748                maybe_accept( node, &TypeInstType::params );
    17741749        )
    17751750
     
    19201895                                guard_symtab guard { *this };
    19211896                                auto new_node = p.second->accept( *this );
    1922                                 if (new_node != p.second) mutated = true;
     1897                                if (new_node != p.second) mutated = false;
    19231898                                new_map.insert({ p.first, new_node });
    19241899                        }
     
    19361911                                guard_symtab guard { *this };
    19371912                                auto new_node = p.second->accept( *this );
    1938                                 if (new_node != p.second) mutated = true;
     1913                                if (new_node != p.second) mutated = false;
    19391914                                new_map.insert({ p.first, new_node });
    19401915                        }
Note: See TracChangeset for help on using the changeset viewer.