| 97 | FunctionPtr func = nullptr; |
| 98 | public: |
| 99 | void MarkSideEffects ( Module & mod ) { |
| 100 | for ( auto & fn : mod.functions.each() ) { |
| 101 | if (!fn->isTemplate && !fn->builtIn) { |
| 102 | fn->knownSideEffects = false; |
| 103 | fn->sideEffectFlags &= ~uint32_t(SideEffects::inferredSideEffects); |
| 104 | } |
| 105 | } |
| 106 | for ( auto & fn : mod.functions.each() ) { |
| 107 | if (!fn->isTemplate && !fn->builtIn && !fn->knownSideEffects) { |
| 108 | asked.clear(); |
| 109 | getSideEffects(fn); |
| 110 | } |
| 111 | } |
| 112 | for ( auto & var : mod.globals.each() ) { |
| 113 | if ( var->init ) { |
| 114 | TrackVariableFlags vaf; |
| 115 | var->init = var->init->visit(vaf); |
| 116 | } |
| 117 | } |
| 118 | } |
| 119 | protected: |
| 120 | void propagateAt ( ExprAt * at ) { |
| 121 | if ( at->subexpr->type->isHandle() && at->subexpr->type->annotation->isIndexMutable(at->index->type) ) { |
no test coverage detected