Changes in src/InitTweak/InitTweak.cc [aedfd91:cad355a]
- File:
-
- 1 edited
-
src/InitTweak/InitTweak.cc (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/InitTweak/InitTweak.cc
raedfd91 rcad355a 57 57 (objDecl->get_init() == NULL || 58 58 ( 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() ); 61 60 } 62 61 … … 85 84 } 86 85 } 87 namespace {88 VariableExpr * getCalledFunction( ApplicationExpr * appExpr ) {89 assert( appExpr );90 return dynamic_cast< VariableExpr * >( appExpr->get_function() );91 }92 }93 94 ApplicationExpr * isIntrinsicCallExpr( Expression * expr ) {95 ApplicationExpr * appExpr = dynamic_cast< ApplicationExpr * >( expr );96 if ( ! appExpr ) return NULL;97 VariableExpr * function = getCalledFunction( appExpr );98 assert( function );99 // check for Intrinsic only - don't want to remove all overridable ctor/dtors because autogenerated ctor/dtor100 // will call all member dtors, and some members may have a user defined dtor.101 return function->get_var()->get_linkage() == LinkageSpec::Intrinsic ? appExpr : NULL;102 }103 86 104 87 bool isInstrinsicSingleArgCallStmt( Statement * stmt ) { 105 88 Expression * callExpr = getCtorDtorCall( stmt ); 106 89 if ( ! callExpr ) return false; 107 if ( ApplicationExpr * appExpr = isIntrinsicCallExpr( callExpr ) ) { 108 assert( ! appExpr->get_function()->get_results().empty() ); 109 FunctionType *funcType = GenPoly::getFunctionType( appExpr->get_function()->get_results().front() ); 110 assert( funcType ); 111 return funcType->get_parameters().size() == 1; 112 } 113 return false; 90 ApplicationExpr * appExpr = dynamic_cast< ApplicationExpr * >( callExpr ); 91 assert( appExpr ); 92 VariableExpr * function = dynamic_cast< VariableExpr * >( appExpr->get_function() ); 93 assert( function ); 94 // check for Intrinsic only - don't want to remove all overridable ctor/dtors because autogenerated ctor/dtor 95 // will call all member dtors, and some members may have a user defined dtor. 96 FunctionType * funcType = GenPoly::getFunctionType( function->get_var()->get_type() ); 97 assert( funcType ); 98 return function->get_var()->get_linkage() == LinkageSpec::Intrinsic && funcType->get_parameters().size() == 1; 114 99 } 115 100 … … 175 160 else return NULL; 176 161 } 177 178 class ConstExprChecker : public Visitor {179 public:180 ConstExprChecker() : isConstExpr( true ) {}181 182 virtual void visit( ApplicationExpr *applicationExpr ) { isConstExpr = false; }183 virtual void visit( UntypedExpr *untypedExpr ) { isConstExpr = false; }184 virtual void visit( NameExpr *nameExpr ) { isConstExpr = false; }185 virtual void visit( CastExpr *castExpr ) { isConstExpr = false; }186 virtual void visit( LabelAddressExpr *labAddressExpr ) { isConstExpr = false; }187 virtual void visit( UntypedMemberExpr *memberExpr ) { isConstExpr = false; }188 virtual void visit( MemberExpr *memberExpr ) { isConstExpr = false; }189 virtual void visit( VariableExpr *variableExpr ) { isConstExpr = false; }190 virtual void visit( ConstantExpr *constantExpr ) { /* bottom out */ }191 // these might be okay?192 // virtual void visit( SizeofExpr *sizeofExpr );193 // virtual void visit( AlignofExpr *alignofExpr );194 // virtual void visit( UntypedOffsetofExpr *offsetofExpr );195 // virtual void visit( OffsetofExpr *offsetofExpr );196 // virtual void visit( OffsetPackExpr *offsetPackExpr );197 // virtual void visit( AttrExpr *attrExpr );198 // virtual void visit( CommaExpr *commaExpr );199 // virtual void visit( LogicalExpr *logicalExpr );200 // virtual void visit( ConditionalExpr *conditionalExpr );201 virtual void visit( TupleExpr *tupleExpr ) { isConstExpr = false; }202 virtual void visit( SolvedTupleExpr *tupleExpr ) { isConstExpr = false; }203 virtual void visit( TypeExpr *typeExpr ) { isConstExpr = false; }204 virtual void visit( AsmExpr *asmExpr ) { isConstExpr = false; }205 virtual void visit( UntypedValofExpr *valofExpr ) { isConstExpr = false; }206 virtual void visit( CompoundLiteralExpr *compLitExpr ) { isConstExpr = false; }207 208 bool isConstExpr;209 };210 211 bool isConstExpr( Expression * expr ) {212 if ( expr ) {213 ConstExprChecker checker;214 expr->accept( checker );215 return checker.isConstExpr;216 }217 return true;218 }219 220 bool isConstExpr( Initializer * init ) {221 if ( init ) {222 ConstExprChecker checker;223 init->accept( checker );224 return checker.isConstExpr;225 } // if226 // for all intents and purposes, no initializer means const expr227 return true;228 }229 230 162 }
Note:
See TracChangeset
for help on using the changeset viewer.