Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/InitTweak/InitTweak.cc

    ra61ad31 r65dc863  
    1414                public:
    1515                        bool hasDesignations = false;
    16                         virtual void visit( Designation * des ) {
    17                                 if ( ! des->get_designators().empty() ) hasDesignations = true;
    18                                 else Visitor::visit( des );
    19                         }
     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); }
    2023                };
    2124
     
    380383                template<typename CallExpr>
    381384                Expression *& callArg( CallExpr * callExpr, unsigned int pos ) {
    382                         if ( pos >= callExpr->get_args().size() ) assertf( false, "getCallArg for argument that doesn't exist: (%u); %s.", pos, toString( callExpr ).c_str() );
     385                        if ( pos >= callExpr->get_args().size() ) assertf( false, "asking for argument that doesn't exist. Return NULL/throw exception?" );
    383386                        for ( Expression *& arg : callExpr->get_args() ) {
    384387                                if ( pos == 0 ) return arg;
     
    458461                } else if ( ArrayType * arrayType = dynamic_cast< ArrayType * >( type ) ) {
    459462                        return arrayType->get_base();
    460                 } else if ( ReferenceType * refType = dynamic_cast< ReferenceType * >( type ) ) {
    461                         return refType->get_base();
    462463                } else {
    463464                        return NULL;
     
    545546                if ( ftype->get_parameters().size() != 2 ) return 0;
    546547
    547                 Type * t1 = getPointerBase( ftype->get_parameters().front()->get_type() );
     548                Type * t1 = ftype->get_parameters().front()->get_type();
    548549                Type * t2 = ftype->get_parameters().back()->get_type();
    549                 assert( t1 );
    550 
    551                 if ( ResolvExpr::typesCompatibleIgnoreQualifiers( t1, t2, SymTab::Indexer() ) ) {
     550                PointerType * ptrType = dynamic_cast< PointerType * > ( t1 );
     551                assert( ptrType );
     552
     553                if ( ResolvExpr::typesCompatibleIgnoreQualifiers( ptrType->get_base(), t2, SymTab::Indexer() ) ) {
    552554                        return function;
    553555                } else {
Note: See TracChangeset for help on using the changeset viewer.