MCPcopy Create free account
hub / github.com/GaijinEntertainment/daScript / propagateRead

Method propagateRead

src/ast/ast_unused.cpp:140–193  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

138 return false;
139 }
140 void propagateRead ( Expression * expr ) {
141 if ( expr->rtti_isVar() ) {
142 auto var = (ExprVar *) expr;
143 var->r2cr = true;
144 if ( var->variable->loop_source ) {
145 propagateRead(var->variable->loop_source);
146 }
147 } else if ( expr->rtti_isField() || expr->rtti_isSafeField()
148 || expr->rtti_isAsVariant() || expr->rtti_isIsVariant()
149 || expr->rtti_isSafeAsVariant() ) {
150 auto field = (ExprField *) expr;
151 field->r2cr = true;
152 propagateRead(field->value);
153 if ( func && field->value->type->isPointer() ) func->sideEffectFlags |= uint32_t(SideEffects::accessExternal);
154 } else if ( expr->rtti_isSwizzle() ) {
155 auto swiz = (ExprSwizzle *) expr;
156 swiz->r2cr = true;
157 propagateRead(swiz->value);
158 } else if ( expr->rtti_isAt() ) {
159 auto at = (ExprAt *) expr;
160 at->r2cr = true;
161 propagateAt(at);
162 } else if ( expr->rtti_isSafeAt() ) {
163 auto at = (ExprSafeAt *) expr;
164 at->r2cr = true;
165 propagateRead(at->subexpr);
166 propagateRead(at->index);
167 } else if ( expr->rtti_isOp3() ) {
168 auto op3 = (ExprOp3 *) expr;
169 propagateRead(op3->left);
170 propagateRead(op3->right);
171 } else if ( expr->rtti_isNullCoalescing() ) {
172 auto nc = (ExprNullCoalescing *) expr;
173 propagateRead(nc->subexpr);
174 propagateRead(nc->defaultValue);
175 } else if ( expr->rtti_isCast() ) {
176 auto ca = (ExprCast *) expr;
177 if ( isConstCast(ca->castType) ) {
178 propagateRead(ca->subexpr);
179 } else {
180 propagateWrite(ca->subexpr);
181 }
182 } else if ( expr->rtti_isRef2Ptr() ) {
183 auto rr = (ExprRef2Ptr *)expr;
184 propagateRead(rr->subexpr);
185 } else if ( expr->rtti_isPtr2Ref() ) {
186 auto rr = (ExprPtr2Ref *)expr;
187 propagateRead(rr->subexpr);
188 if ( func ) func->sideEffectFlags |= uint32_t(SideEffects::accessExternal);
189 } else if ( expr->rtti_isR2V() ) {
190 auto rr = (ExprRef2Value *)expr;
191 propagateRead(rr->subexpr);
192 }
193 }
194 void propagateWrite ( Expression * expr ) {
195 if ( expr->rtti_isVar() ) {
196 auto var = (ExprVar *) expr;

Callers

nothing calls this directly

Calls 1

isPointerMethod · 0.80

Tested by

no test coverage detected