Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/InitTweak/InitTweak.cc

    r6cf27a07 rcad355a  
    5757                        (objDecl->get_init() == NULL ||
    5858                                ( objDecl->get_init() != NULL && objDecl->get_init()->get_maybeConstructed() )) &&
    59                         ! isDesignated( objDecl->get_init() )
    60                         && objDecl->get_storageClass() != DeclarationNode::Extern;
     59                        ! isDesignated( objDecl->get_init() );
    6160        }
    6261
     
    161160                else return NULL;
    162161        }
    163 
    164         class ConstExprChecker : public Visitor {
    165         public:
    166                 ConstExprChecker() : isConstExpr( true ) {}
    167 
    168                 virtual void visit( ApplicationExpr *applicationExpr ) { isConstExpr = false; }
    169                 virtual void visit( UntypedExpr *untypedExpr ) { isConstExpr = false; }
    170                 virtual void visit( NameExpr *nameExpr ) { isConstExpr = false; }
    171                 virtual void visit( CastExpr *castExpr ) { isConstExpr = false; }
    172                 virtual void visit( LabelAddressExpr *labAddressExpr ) { isConstExpr = false; }
    173                 virtual void visit( UntypedMemberExpr *memberExpr ) { isConstExpr = false; }
    174                 virtual void visit( MemberExpr *memberExpr ) { isConstExpr = false; }
    175                 virtual void visit( VariableExpr *variableExpr ) { isConstExpr = false; }
    176                 virtual void visit( ConstantExpr *constantExpr ) { /* bottom out */ }
    177                 // these might be okay?
    178                 // virtual void visit( SizeofExpr *sizeofExpr );
    179                 // virtual void visit( AlignofExpr *alignofExpr );
    180                 // virtual void visit( UntypedOffsetofExpr *offsetofExpr );
    181                 // virtual void visit( OffsetofExpr *offsetofExpr );
    182                 // virtual void visit( OffsetPackExpr *offsetPackExpr );
    183                 // virtual void visit( AttrExpr *attrExpr );
    184                 // virtual void visit( CommaExpr *commaExpr );
    185                 // virtual void visit( LogicalExpr *logicalExpr );
    186                 // virtual void visit( ConditionalExpr *conditionalExpr );
    187                 virtual void visit( TupleExpr *tupleExpr ) { isConstExpr = false; }
    188                 virtual void visit( SolvedTupleExpr *tupleExpr ) { isConstExpr = false; }
    189                 virtual void visit( TypeExpr *typeExpr ) { isConstExpr = false; }
    190                 virtual void visit( AsmExpr *asmExpr ) { isConstExpr = false; }
    191                 virtual void visit( UntypedValofExpr *valofExpr ) { isConstExpr = false; }
    192                 virtual void visit( CompoundLiteralExpr *compLitExpr ) { isConstExpr = false; }
    193 
    194                 bool isConstExpr;
    195         };
    196 
    197         bool isConstExpr( Expression * expr ) {
    198                 if ( expr ) {
    199                         ConstExprChecker checker;
    200                         expr->accept( checker );
    201                         return checker.isConstExpr;
    202                 }
    203                 return true;
    204         }
    205 
    206         bool isConstExpr( Initializer * init ) {
    207                 if ( init ) {
    208                         ConstExprChecker checker;
    209                         init->accept( checker );
    210                         return checker.isConstExpr;
    211                 } // if
    212                 // for all intents and purposes, no initializer means const expr
    213                 return true;
    214         }
    215 
    216162}
Note: See TracChangeset for help on using the changeset viewer.