Changes in src/InitTweak/InitTweak.cc [cad355a:6cf27a07]
- File:
-
- 1 edited
-
src/InitTweak/InitTweak.cc (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/InitTweak/InitTweak.cc
rcad355a r6cf27a07 57 57 (objDecl->get_init() == NULL || 58 58 ( objDecl->get_init() != NULL && objDecl->get_init()->get_maybeConstructed() )) && 59 ! isDesignated( objDecl->get_init() ); 59 ! isDesignated( objDecl->get_init() ) 60 && objDecl->get_storageClass() != DeclarationNode::Extern; 60 61 } 61 62 … … 160 161 else return NULL; 161 162 } 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 162 216 }
Note:
See TracChangeset
for help on using the changeset viewer.