Ignore:
Timestamp:
Apr 26, 2016, 11:36:36 AM (7 years ago)
Author:
Rob Schluntz <rschlunt@…>
Branches:
aaron-thesis, arm-eh, cleanup-dtors, ctor, deferred_resn, demangler, enum, forall-pointer-decay, gc_noraii, jacob/cs343-translation, jenkins-sandbox, master, memory, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
Children:
668edd6b
Parents:
cf18eea
Message:

save type substitution and apply it when creating temporary variables for copy construction

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/SynTree/TypeSubstitution.h

    rcf18eea r5382492  
    55// file "LICENCE" distributed with Cforall.
    66//
    7 // TypeSubstitution.h -- 
     7// TypeSubstitution.h --
    88//
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 17:33:19 2016
     11// Last Modified By : Rob Schluntz
     12// Last Modified On : Tue Apr 26 11:15:07 2016
    1313// Update Count     : 2
    1414//
     
    3333        TypeSubstitution( const TypeSubstitution &other );
    3434        virtual ~TypeSubstitution();
    35        
     35
    3636        TypeSubstitution &operator=( const TypeSubstitution &other );
    37        
     37
    3838        template< typename SynTreeClass > int apply( SynTreeClass *&input );
    3939        template< typename SynTreeClass > int applyFree( SynTreeClass *&input );
    40        
     40
    4141        void add( std::string formalType, Type *actualType );
    4242        void add( const TypeSubstitution &other );
     
    4444        Type *lookup( std::string formalType ) const;
    4545        bool empty() const;
    46        
     46
    4747        template< typename FormalIterator, typename ActualIterator >
    4848        void add( FormalIterator formalBegin, FormalIterator formalEnd, ActualIterator actualBegin );
    49        
     49
    5050        template< typename TypeInstListIterator >
    5151        void extract( TypeInstListIterator begin, TypeInstListIterator end, TypeSubstitution &result );
    52        
     52
    5353        void normalize();
    5454
     
    6363        /// Records type variable bindings from forall-statements and instantiations of generic types
    6464        template< typename TypeClass > Type *handleAggregateType( TypeClass *type );
    65        
     65
    6666        virtual Type* mutate(VoidType *basicType);
    6767        virtual Type* mutate(BasicType *basicType);
     
    7575        virtual Type* mutate(TupleType *tupleType);
    7676        virtual Type* mutate(VarArgsType *varArgsType);
    77        
     77
    7878        // TODO: worry about traversing into a forall-qualified function type or type decl with assertions
    79        
     79
    8080        void initialize( const TypeSubstitution &src, TypeSubstitution &dest );
    8181
     
    136136        return subCount;
    137137}
    138        
     138
    139139template< typename SynTreeClass >
    140140int TypeSubstitution::applyFree( SynTreeClass *&input ) {
     
    149149        return subCount;
    150150}
    151        
     151
    152152template< typename TypeInstListIterator >
    153153void TypeSubstitution::extract( TypeInstListIterator begin, TypeInstListIterator end, TypeSubstitution &result ) {
     
    173173}
    174174
     175std::ostream & operator<<( std::ostream & out, const TypeSubstitution & sub );
     176
    175177#endif // TYPESUBSTITUTION_H
    176178
Note: See TracChangeset for help on using the changeset viewer.