Changeset 373d0b5 for src/GenPoly


Ignore:
Timestamp:
Dec 1, 2017, 2:49:52 PM (6 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:
81644e0
Parents:
a378ca7
Message:

Refactor getAggr as a Type member function

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/GenPoly/InstantiateGeneric.cc

    ra378ca7 r373d0b5  
    453453                        return false;
    454454                }
    455 
    456                 AggregateDecl * getAggr( Type * t ) {
    457                         if ( StructInstType * inst = dynamic_cast< StructInstType * >( t ) ) {
    458                                 return inst->baseStruct;
    459                         } else if ( UnionInstType * inst = dynamic_cast< UnionInstType * >( t ) ) {
    460                                 return inst->baseUnion;
    461                         }
    462                         assertf( false, "Non-aggregate type: %s", toString( t ).c_str() );
    463                 }
    464455        }
    465456
     
    469460                if ( isGenericType( memberExpr->aggregate->result ) ) {
    470461                        // find the location of the member
    471                         AggregateDecl * aggr = getAggr( memberExpr->aggregate->result );
     462                        AggregateDecl * aggr = memberExpr->aggregate->result->getAggr();
    472463                        std::list< Declaration * > & members = aggr->members;
    473464                        memberIndex = std::distance( members.begin(), std::find( members.begin(), members.end(), memberExpr->member ) );
     
    479470                if ( memberIndex != -1 ) {
    480471                        // using the location from the generic type, find the member in the instantiation and rebuild the member expression
    481                         AggregateDecl * aggr = getAggr( memberExpr->aggregate->result );
     472                        AggregateDecl * aggr = memberExpr->aggregate->result->getAggr();
    482473                        assertf( memberIndex < (int)aggr->members.size(), "Instantiation somehow has fewer members than the generic type." );
    483474                        Declaration * member = *std::next( aggr->members.begin(), memberIndex );
Note: See TracChangeset for help on using the changeset viewer.