Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/AST/Pass.hpp

    rb2a11ba r73f1b1c  
    5050// | PureVisitor           - makes the visitor pure, it never modifies nodes in place and always
    5151//                           clones nodes it needs to make changes to
    52 // | WithConstTypeSubstitution - provides polymorphic const TypeSubstitution * typeSubs for the
     52// | WithTypeSubstitution  - provides polymorphic const TypeSubstitution * env for the
    5353//                           current expression
    5454// | WithStmtsToAdd        - provides the ability to insert statements before or after the current
     
    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.
    12098        template< typename... Args >
    12199        static void run( std::list< ptr<Decl> > & decls ) {
     
    124102        }
    125103
    126         template< typename node_type, typename... Args >
    127         static auto read( node_type const * node ) {
    128                 Pass<core_t> visitor;
    129                 node_type const * temp = node->accept( visitor );
    130                 assert( temp == node );
    131                 return visitor.get_result();
    132         }
     104        /// Storage for the actual pass
     105        core_t core;
    133106
    134107        /// Visit function declarations
     
    294267//-------------------------------------------------------------------------------------------------
    295268
     269/// Keep track of the polymorphic const TypeSubstitution * env for the current expression
     270
    296271/// If used the visitor will always clone nodes.
    297272struct PureVisitor {};
    298273
    299 /// Keep track of the polymorphic const TypeSubstitution * typeSubs for the current expression.
    300274struct WithConstTypeSubstitution {
    301         const TypeSubstitution * typeSubs = nullptr;
     275        const TypeSubstitution * env = nullptr;
    302276};
    303277
Note: See TracChangeset for help on using the changeset viewer.