Ignore:
Timestamp:
Nov 16, 2016, 4:37:50 PM (8 years ago)
Author:
Rob Schluntz <rschlunt@…>
Branches:
ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
Children:
186fd86
Parents:
33a7b6d
Message:

moved substituion into MemberExpr? constructor, change generated tuple structs to generic structs, tuples containing type variables almost works

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/SynTree/Expression.cc

    r33a7b6d rd9fa60a  
    332332}
    333333
     334namespace {
     335        TypeSubstitution makeSub( Type * t ) {
     336                if ( StructInstType * aggInst = dynamic_cast< StructInstType * >( t ) ) {
     337                        return TypeSubstitution( aggInst->get_baseParameters()->begin(), aggInst->get_baseParameters()->end(), aggInst->get_parameters().begin() );
     338                } else if ( UnionInstType * aggInst = dynamic_cast< UnionInstType * >( t ) ) {
     339                        return TypeSubstitution( aggInst->get_baseParameters()->begin(), aggInst->get_baseParameters()->end(), aggInst->get_parameters().begin() );
     340                } else {
     341                        assertf( false, "makeSub expects struct or union type for aggregate" );
     342                }
     343        }
     344}
     345
    334346
    335347MemberExpr::MemberExpr( DeclarationWithType *_member, Expression *_aggregate, Expression *_aname ) :
    336348                Expression( _aname ), member(_member), aggregate(_aggregate) {
    337         set_result( member->get_type()->clone() );
     349
     350        TypeSubstitution sub( makeSub( aggregate->get_result() ) );
     351        Type * res = member->get_type()->clone();
     352        sub.apply( res );
     353        set_result( res );
    338354        get_result()->set_isLvalue( true );
    339355}
Note: See TracChangeset for help on using the changeset viewer.