Changeset 20cba76


Ignore:
Timestamp:
Feb 2, 2018, 3:44:27 PM (7 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:
c20b0fea
Parents:
a33fdbe
Message:

Minor code cleanup

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/GenPoly/Box.cc

    ra33fdbe r20cba76  
    988988
    989989                Expression *Pass1::handleIntrinsics( ApplicationExpr *appExpr ) {
    990                         if ( VariableExpr *varExpr = dynamic_cast< VariableExpr *>( appExpr->get_function() ) ) {
    991                                 if ( varExpr->get_var()->get_linkage() == LinkageSpec::Intrinsic ) {
    992                                         if ( varExpr->get_var()->get_name() == "?[?]" ) {
     990                        if ( VariableExpr *varExpr = dynamic_cast< VariableExpr *>( appExpr->function ) ) {
     991                                if ( varExpr->var->linkage == LinkageSpec::Intrinsic ) {
     992                                        if ( varExpr->var->name == "?[?]" ) {
    993993                                                assert( appExpr->result );
    994994                                                assert( appExpr->get_args().size() == 2 );
    995                                                 Type *baseType1 = isPolyPtr( appExpr->get_args().front()->get_result(), scopeTyVars, env );
    996                                                 Type *baseType2 = isPolyPtr( appExpr->get_args().back()->get_result(), scopeTyVars, env );
     995                                                Type *baseType1 = isPolyPtr( appExpr->args.front()->result, scopeTyVars, env );
     996                                                Type *baseType2 = isPolyPtr( appExpr->args.back()->result, scopeTyVars, env );
    997997                                                assert( ! baseType1 || ! baseType2 ); // the arguments cannot both be polymorphic pointers
    998998                                                UntypedExpr *ret = 0;
     
    15551555                        // only mutate member expressions for polymorphic types
    15561556                        int tyDepth;
    1557                         Type *objectType = hasPolyBase( memberExpr->get_aggregate()->get_result(), scopeTyVars, &tyDepth );
     1557                        Type *objectType = hasPolyBase( memberExpr->aggregate->result, scopeTyVars, &tyDepth );
    15581558                        if ( ! objectType ) return memberExpr;
    15591559                        findGeneric( objectType ); // ensure layout for this type is available
    15601560
    15611561                        // replace member expression with dynamically-computed layout expression
    1562                         Expression *newMemberExpr = 0;
     1562                        Expression *newMemberExpr = nullptr;
    15631563                        if ( StructInstType *structType = dynamic_cast< StructInstType* >( objectType ) ) {
    15641564                                // look up offset index
    1565                                 long i = findMember( memberExpr->get_member(), structType->get_baseStruct()->get_members() );
     1565                                long i = findMember( memberExpr->member, structType->baseStruct->members );
    15661566                                if ( i == -1 ) return memberExpr;
    15671567
    15681568                                // replace member expression with pointer to base plus offset
    15691569                                UntypedExpr *fieldLoc = new UntypedExpr( new NameExpr( "?+?" ) );
    1570                                 Expression * aggr = memberExpr->get_aggregate()->clone();
    1571                                 delete aggr->get_env(); // xxx - there's a problem with keeping the env for some reason, so for now just get rid of it
    1572                                 aggr->set_env( nullptr );
     1570                                Expression * aggr = memberExpr->aggregate->clone();
     1571                                delete aggr->env; // xxx - there's a problem with keeping the env for some reason, so for now just get rid of it
     1572                                aggr->env = nullptr;
    15731573                                fieldLoc->get_args().push_back( aggr );
    15741574                                fieldLoc->get_args().push_back( makeOffsetIndex( objectType, i ) );
    1575                                 fieldLoc->set_result( memberExpr->get_result()->clone() );
     1575                                fieldLoc->set_result( memberExpr->result->clone() );
    15761576                                newMemberExpr = fieldLoc;
    15771577                        } else if ( dynamic_cast< UnionInstType* >( objectType ) ) {
    15781578                                // union members are all at offset zero, so just use the aggregate expr
    1579                                 Expression * aggr = memberExpr->get_aggregate()->clone();
    1580                                 delete aggr->get_env(); // xxx - there's a problem with keeping the env for some reason, so for now just get rid of it
    1581                                 aggr->set_env( nullptr );
     1579                                Expression * aggr = memberExpr->aggregate->clone();
     1580                                delete aggr->env; // xxx - there's a problem with keeping the env for some reason, so for now just get rid of it
     1581                                aggr->env= nullptr;
    15821582                                newMemberExpr = aggr;
    1583                                 newMemberExpr->set_result( memberExpr->get_result()->clone() );
     1583                                newMemberExpr->result = memberExpr->result->clone();
    15841584                        } else return memberExpr;
    15851585                        assert( newMemberExpr );
    15861586
    1587                         Type *memberType = memberExpr->get_member()->get_type();
     1587                        Type *memberType = memberExpr->member->get_type();
    15881588                        if ( ! isPolyType( memberType, scopeTyVars ) ) {
    15891589                                // Not all members of a polymorphic type are themselves of polymorphic type; in this case the member expression should be wrapped and dereferenced to form an lvalue
     
    15981598
    15991599                ObjectDecl *PolyGenericCalculator::makeVar( const std::string &name, Type *type, Initializer *init ) {
    1600                         ObjectDecl *newObj = new ObjectDecl( name, Type::StorageClasses(), LinkageSpec::C, 0, type, init );
     1600                        ObjectDecl *newObj = new ObjectDecl( name, Type::StorageClasses(), LinkageSpec::C, nullptr, type, init );
    16011601                        stmtsToAddBefore.push_back( new DeclStmt( newObj ) );
    16021602                        return newObj;
Note: See TracChangeset for help on using the changeset viewer.