Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/InitTweak/InitTweak.cc

    r65dc863 r175ad32b  
    1414                public:
    1515                        bool hasDesignations = false;
    16                         template<typename Init>
    17                         void handleInit( Init * init ) {
    18                                 if ( ! init->get_designators().empty() ) hasDesignations = true;
    19                                 else Visitor::visit( init );
    20                         }
    21                         virtual void visit( SingleInit * singleInit ) { handleInit( singleInit); }
    22                         virtual void visit( ListInit * listInit ) { handleInit( listInit); }
     16                        virtual void visit( Designation * des ) {
     17                                if ( ! des->get_designators().empty() ) hasDesignations = true;
     18                                else Visitor::visit( des );
     19                        }
    2320                };
    2421
     
    173170
    174171                        UntypedExpr * increment = new UntypedExpr( new NameExpr( "++?" ) );
    175                         increment->get_args().push_back( new AddressExpr( index->clone() ) );
     172                        increment->get_args().push_back( index->clone() );
    176173                        *out++ = new ExprStmt( noLabels, increment );
    177174                }
     
    383380                template<typename CallExpr>
    384381                Expression *& callArg( CallExpr * callExpr, unsigned int pos ) {
    385                         if ( pos >= callExpr->get_args().size() ) assertf( false, "asking for argument that doesn't exist. Return NULL/throw exception?" );
     382                        if ( pos >= callExpr->get_args().size() ) assertf( false, "getCallArg for argument that doesn't exist: (%u); %s.", pos, toString( callExpr ).c_str() );
    386383                        for ( Expression *& arg : callExpr->get_args() ) {
    387384                                if ( pos == 0 ) return arg;
     
    461458                } else if ( ArrayType * arrayType = dynamic_cast< ArrayType * >( type ) ) {
    462459                        return arrayType->get_base();
     460                } else if ( ReferenceType * refType = dynamic_cast< ReferenceType * >( type ) ) {
     461                        return refType->get_base();
    463462                } else {
    464463                        return NULL;
     
    546545                if ( ftype->get_parameters().size() != 2 ) return 0;
    547546
    548                 Type * t1 = ftype->get_parameters().front()->get_type();
     547                Type * t1 = getPointerBase( ftype->get_parameters().front()->get_type() );
    549548                Type * t2 = ftype->get_parameters().back()->get_type();
    550                 PointerType * ptrType = dynamic_cast< PointerType * > ( t1 );
    551                 assert( ptrType );
    552 
    553                 if ( ResolvExpr::typesCompatibleIgnoreQualifiers( ptrType->get_base(), t2, SymTab::Indexer() ) ) {
     549                assert( t1 );
     550
     551                if ( ResolvExpr::typesCompatibleIgnoreQualifiers( t1, t2, SymTab::Indexer() ) ) {
    554552                        return function;
    555553                } else {
Note: See TracChangeset for help on using the changeset viewer.