Changes in / [ad1770be:f2e746d]


Ignore:
Location:
src
Files:
2 deleted
5 edited

Legend:

Unmodified
Added
Removed
  • src/Common/utility.h

    rad1770be rf2e746d  
    322322        std::string filename;
    323323
    324         /// Create a new unset CodeLocation.
     324    /// Create a new unset CodeLocation.
    325325        CodeLocation()
    326326                : linenumber( -1 )
     
    328328        {}
    329329
    330         /// Create a new CodeLocation with the given values.
     330    /// Create a new CodeLocation with the given values.
    331331        CodeLocation( const char* filename, int lineno )
    332332                : linenumber( lineno )
     
    334334        {}
    335335
    336         bool isSet () const {
    337                 return -1 != linenumber;
    338         }
    339 
    340         bool isUnset () const {
    341                 return !isSet();
    342         }
     336    bool isSet () const {
     337        return -1 != linenumber;
     338    }
     339
     340    bool isUnset () const {
     341        return !isSet();
     342    }
    343343
    344344        void unset () {
     
    353353        return location.isSet() ? location.filename + ":" + std::to_string(location.linenumber) + " " : "";
    354354}
    355 
    356355#endif // _UTILITY_H
    357356
  • src/GenPoly/Box.cc

    rad1770be rf2e746d  
    765765                                                arg = new AddressExpr( arg );
    766766                                        }
    767                                         if ( ! ResolvExpr::typesCompatible( param, arg->get_result(), SymTab::Indexer() ) ) {
    768                                                 // silence warnings by casting boxed parameters when the actual type does not match up with the formal type.
    769                                                 arg = new CastExpr( arg, param->clone() );
    770                                         }
    771767                                } else {
    772768                                        // use type computed in unification to declare boxed variables
     
    906902                                } // if
    907903                                UntypedExpr *assign = new UntypedExpr( new NameExpr( "?=?" ) );
    908                                 UntypedExpr *deref = UntypedExpr::createDeref( new CastExpr( new VariableExpr( *param++ ), new PointerType( Type::Qualifiers(), realType->get_returnVals().front()->get_type()->clone() ) ) );
     904                                UntypedExpr *deref = new UntypedExpr( new NameExpr( "*?" ) );
     905                                deref->get_args().push_back( new CastExpr( new VariableExpr( *param++ ), new PointerType( Type::Qualifiers(), realType->get_returnVals().front()->get_type()->clone() ) ) );
    909906                                assign->get_args().push_back( deref );
    910907                                addAdapterParams( adapteeApp, arg, param, adapterType->get_parameters().end(), realParam, tyVars );
     
    12201217
    12211218                Statement * Pass1::mutate( ReturnStmt *returnStmt ) {
     1219                        // maybe need access to the env when mutating the expr
     1220                        if ( Expression * expr = returnStmt->get_expr() ) {
     1221                                if ( expr->get_env() ) {
     1222                                        env = expr->get_env();
     1223                                }
     1224                        }
     1225
    12221226                        if ( retval && returnStmt->get_expr() ) {
    12231227                                assert( returnStmt->get_expr()->has_result() && ! returnStmt->get_expr()->get_result()->isVoid() );
     
    15351539                                        Type *declType = objectDecl->get_type();
    15361540                                        std::string bufName = bufNamer.newName();
    1537                                         ObjectDecl *newBuf = new ObjectDecl( bufName, Type::StorageClasses(), LinkageSpec::C, 0,
    1538                                                 new ArrayType( Type::Qualifiers(), new BasicType( Type::Qualifiers(), BasicType::Kind::Char), new NameExpr( sizeofName( mangleType(declType) ) ),
     1541                                        ObjectDecl *newBuf = new ObjectDecl( bufName, Type::StorageClasses(), LinkageSpec::C, 0, 
     1542                                                new ArrayType( Type::Qualifiers(), new BasicType( Type::Qualifiers(), BasicType::Kind::Char), new NameExpr( sizeofName( mangleType(declType) ) ), 
    15391543                                                true, false, std::list<Attribute*>{ new Attribute( std::string{"aligned"}, std::list<Expression*>{ new ConstantExpr( Constant::from_int(8) ) } ) } ), 0 );
    15401544                                        stmtsToAdd.push_back( new DeclStmt( noLabels, newBuf ) );
     
    15741578                }
    15751579
     1580                /// Returns an expression dereferenced n times
     1581                Expression *makeDerefdVar( Expression *derefdVar, long n ) {
     1582                        for ( int i = 1; i < n; ++i ) {
     1583                                UntypedExpr *derefExpr = new UntypedExpr( new NameExpr( "*?" ) );
     1584                                derefExpr->get_args().push_back( derefdVar );
     1585                                // xxx - should set results on derefExpr
     1586                                derefdVar = derefExpr;
     1587                        }
     1588                        return derefdVar;
     1589                }
     1590
    15761591                Expression *PolyGenericCalculator::mutate( MemberExpr *memberExpr ) {
    15771592                        // mutate, exiting early if no longer MemberExpr
     
    15801595                        if ( ! memberExpr ) return expr;
    15811596
     1597                        // get declaration for base struct, exiting early if not found
     1598                        int varDepth;
     1599                        VariableExpr *varExpr = getBaseVar( memberExpr->get_aggregate(), &varDepth );
     1600                        if ( ! varExpr ) return memberExpr;
     1601                        ObjectDecl *objectDecl = dynamic_cast< ObjectDecl* >( varExpr->get_var() );
     1602                        if ( ! objectDecl ) return memberExpr;
     1603
    15821604                        // only mutate member expressions for polymorphic types
    15831605                        int tyDepth;
    1584                         Type *objectType = hasPolyBase( memberExpr->get_aggregate()->get_result(), scopeTyVars, &tyDepth );
     1606                        Type *objectType = hasPolyBase( objectDecl->get_type(), scopeTyVars, &tyDepth );
    15851607                        if ( ! objectType ) return memberExpr;
    15861608                        findGeneric( objectType ); // ensure layout for this type is available
     
    16001622                                fieldLoc->get_args().push_back( aggr );
    16011623                                fieldLoc->get_args().push_back( makeOffsetIndex( objectType, i ) );
    1602                                 fieldLoc->set_result( memberExpr->get_result()->clone() );
    16031624                                newMemberExpr = fieldLoc;
    16041625                        } else if ( dynamic_cast< UnionInstType* >( objectType ) ) {
    1605                                 // union members are all at offset zero, so just use the aggregate expr
    1606                                 Expression * aggr = memberExpr->get_aggregate()->clone();
    1607                                 delete aggr->get_env(); // xxx - there's a problem with keeping the env for some reason, so for now just get rid of it
    1608                                 aggr->set_env( nullptr );
    1609                                 newMemberExpr = aggr;
    1610                                 newMemberExpr->set_result( memberExpr->get_result()->clone() );
     1626                                // union members are all at offset zero, so build appropriately-dereferenced variable
     1627                                newMemberExpr = makeDerefdVar( varExpr->clone(), varDepth );
    16111628                        } else return memberExpr;
    16121629                        assert( newMemberExpr );
     
    16161633                                // 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
    16171634                                CastExpr *ptrCastExpr = new CastExpr( newMemberExpr, new PointerType( Type::Qualifiers(), memberType->clone() ) );
    1618                                 UntypedExpr *derefExpr = UntypedExpr::createDeref( ptrCastExpr );
     1635                                UntypedExpr *derefExpr = new UntypedExpr( new NameExpr( "*?" ) );
     1636                                derefExpr->get_args().push_back( ptrCastExpr );
    16191637                                newMemberExpr = derefExpr;
    16201638                        }
  • src/tests/Makefile.am

    rad1770be rf2e746d  
    1717debug=yes
    1818
    19 quick_test=vector_test avl_test operators numericConstants expression enum array typeof cast dtor-early-exit init_once attributes
     19quick_test=vector_test avl_test operators numericConstants expression enum array typeof cast dtor-early-exit init_once
    2020
    2121if BUILD_CONCURRENCY
     
    3030# applies to both programs
    3131EXTRA_FLAGS =
    32 BUILD_FLAGS = -g -Wall -Wno-unused-function -quiet @CFA_FLAGS@ ${EXTRA_FLAGS}
     32BUILD_FLAGS = -g -Wall -Wno-unused-function @CFA_FLAGS@ ${EXTRA_FLAGS}
    3333TEST_FLAGS = $(if $(test), 2> .err/${@}.log, )
    3434CFLAGS = ${TEST_FLAGS} ${BUILD_FLAGS}
  • src/tests/Makefile.in

    rad1770be rf2e746d  
    226226quick_test = vector_test avl_test operators numericConstants \
    227227        expression enum array typeof cast dtor-early-exit init_once \
    228         attributes $(am__append_1)
     228        $(am__append_1)
    229229@BUILD_CONCURRENCY_FALSE@concurrent = no
    230230@BUILD_CONCURRENCY_TRUE@concurrent = yes
     
    234234# applies to both programs
    235235EXTRA_FLAGS =
    236 BUILD_FLAGS = -g -Wall -Wno-unused-function -quiet @CFA_FLAGS@ ${EXTRA_FLAGS}
     236BUILD_FLAGS = -g -Wall -Wno-unused-function @CFA_FLAGS@ ${EXTRA_FLAGS}
    237237TEST_FLAGS = $(if $(test), 2> .err/${@}.log, )
    238238fstream_test_SOURCES = fstream_test.c
  • src/tests/test.py

    rad1770be rf2e746d  
    2828        sh('echo "void ?{}(int*a,int b){}int main(){return 0;}" > .dummy.c')
    2929        ret, out = sh("make .dummy -s", print2stdout=True)
    30 
     30       
    3131        if ret != 0:
    3232                print("Failed to identify architecture:")
     
    161161
    162162        # build, skipping to next test on error
    163         make_ret, _ = sh("""%s test=yes EXTRA_FLAGS="%s" %s 2> %s 1> /dev/null""" % (make_cmd, options, test.name, out_file), dry_run)
     163        make_ret, _ = sh("""%s test=yes EXTRA_FLAGS="-quiet %s" %s 2> %s 1> /dev/null""" % (make_cmd, options, test.name, out_file), dry_run)
    164164
    165165        # if the make command succeds continue otherwise skip to diff
     
    192192                # fetch return code and error from the diff command
    193193                retcode, error = diff(".expect/%s.txt" % test.path, ".out/%s.log" % test.name, dry_run)
    194 
     194       
    195195        # clean the executable
    196196        sh("rm -f %s > /dev/null 2>&1" % test.name, dry_run)
     
    269269if __name__ == "__main__":
    270270        #always run from same folder
    271         chdir()
    272 
     271        chdir() 
     272       
    273273        # parse the command line arguments
    274274        options = getOptions()
Note: See TracChangeset for help on using the changeset viewer.