Changes in / [2b7f6f0:14d8a9b]


Ignore:
Location:
src
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • src/AST/Pass.hpp

    r2b7f6f0 r14d8a9b  
    6767// | WithSymbolTable       - provides symbol table functionality
    6868// | WithForallSubstitutor - maintains links between TypeInstType and TypeDecl under mutation
    69 //
    70 // Other Special Members:
    71 // | result                - Either a method that takes no parameters or a field. If a method (or
    72 //                           callable field) get_result calls it, otherwise the value is returned.
    7369//-------------------------------------------------------------------------------------------------
    7470template< typename core_t >
     
    9389        virtual ~Pass() = default;
    9490
    95         /// Storage for the actual pass.
    96         core_t core;
    97 
    98         /// If the core defines a result, call it if possible, otherwise return it.
    99         inline auto get_result() -> decltype( __pass::get_result( core, '0' ) ) {
    100                 return __pass::get_result( core, '0' );
    101         }
    102 
    10391        /// Construct and run a pass on a translation unit.
    10492        template< typename... Args >
     
    10896        }
    10997
    110         /// Contruct and run a pass on a pointer to extract a value.
    111         template< typename node_type, typename... Args >
    112         static auto read( node_type const * node, Args&&... args ) {
    113                 Pass<core_t> visitor( std::forward<Args>( args )... );
    114                 node_type const * temp = node->accept( visitor );
    115                 assert( temp == node );
    116                 return visitor.get_result();
    117         }
    118 
    119         // Versions of the above for older compilers.
     98        template< typename... Args >
    12099        static void run( std::list< ptr<Decl> > & decls ) {
    121100                Pass<core_t> visitor;
     
    123102        }
    124103
    125         static auto read( Node const * node ) {
    126                 Pass<core_t> visitor;
    127                 Node const * temp = node->accept( visitor );
    128                 assert( temp == node );
    129                 return visitor.get_result();
    130         }
     104        /// Storage for the actual pass
     105        core_t core;
    131106
    132107        /// Visit function declarations
  • src/AST/Pass.proto.hpp

    r2b7f6f0 r14d8a9b  
    421421
    422422        } // namespace forall
    423 
    424         template<typename core_t>
    425         static inline auto get_result( core_t & core, char ) -> decltype( core.result() ) {
    426                 return core.result();
    427         }
    428 
    429         template<typename core_t>
    430         static inline auto get_result( core_t & core, int ) -> decltype( core.result ) {
    431                 return core.result;
    432         }
    433 
    434         template<typename core_t>
    435         static inline void get_result( core_t &, long ) {}
    436423} // namespace __pass
    437424} // namespace ast
  • src/ResolvExpr/ConversionCost.cc

    r2b7f6f0 r14d8a9b  
    520520                return convertToReferenceCost( src, refType, srcIsLvalue, symtab, env, localPtrsAssignable );
    521521        } else {
    522                 return ast::Pass<ConversionCost_new>::read( src, dst, srcIsLvalue, symtab, env, localConversionCost );
     522                ast::Pass<ConversionCost_new> converter( dst, srcIsLvalue, symtab, env, localConversionCost );
     523                src->accept( converter );
     524                return converter.core.cost;
    523525        }
    524526}
     
    561563                        }
    562564                } else {
    563                         return ast::Pass<ConversionCost_new>::read( src, dst, srcIsLvalue, symtab, env, localConversionCost );
     565                        ast::Pass<ConversionCost_new> converter( dst, srcIsLvalue, symtab, env, localConversionCost );
     566                        src->accept( converter );
     567                        return converter.core.cost;
    564568                }
    565569        } else {
  • src/ResolvExpr/ConversionCost.h

    r2b7f6f0 r14d8a9b  
    8888        static size_t traceId;
    8989        Cost cost;
    90         Cost result() { return cost; }
    9190
    9291        ConversionCost_new( const ast::Type * dst, bool srcIsLvalue, const ast::SymbolTable & symtab,
  • src/ResolvExpr/Resolver.cc

    r2b7f6f0 r14d8a9b  
    965965                /// Finds deleted expressions in an expression tree
    966966                struct DeleteFinder_new final : public ast::WithShortCircuiting {
    967                         const ast::DeletedExpr * result = nullptr;
     967                        const ast::DeletedExpr * delExpr = nullptr;
    968968
    969969                        void previsit( const ast::DeletedExpr * expr ) {
    970                                 if ( result ) { visit_children = false; }
    971                                 else { result = expr; }
     970                                if ( delExpr ) { visit_children = false; }
     971                                else { delExpr = expr; }
    972972                        }
    973973
    974974                        void previsit( const ast::Expr * ) {
    975                                 if ( result ) { visit_children = false; }
     975                                if ( delExpr ) { visit_children = false; }
    976976                        }
    977977                };
     
    980980        /// Check if this expression is or includes a deleted expression
    981981        const ast::DeletedExpr * findDeletedExpr( const ast::Expr * expr ) {
    982                 return ast::Pass<DeleteFinder_new>::read( expr );
     982                ast::Pass<DeleteFinder_new> finder;
     983                expr->accept( finder );
     984                return finder.core.delExpr;
    983985        }
    984986
Note: See TracChangeset for help on using the changeset viewer.