19class hasSideEffects :
public Inspector,
public ResolutionContext {
23 bool preorder(
const IR::BaseAssignmentStatement *)
override {
27 bool preorder(
const IR::MethodCallExpression *mc)
override {
28 if (result)
return false;
34 if (bm->name == IR::Type_Header::isValid)
return true;
36 if (em->method->hasAnnotation(IR::Annotation::noSideEffectsAnnotation))
return true;
44 bool preorder(
const IR::Primitive *)
override {
49 bool preorder(
const IR::Expression *)
override {
return !result; }
52 explicit hasSideEffects(
const IR::Expression *e) { e->apply(*
this); }
53 hasSideEffects(
P4::TypeMap *tm,
const IR::Expression *e,
const Visitor::Context *ctxt)
55 e->apply(*
this, ctxt);
57 bool operator()(
const IR::Expression *e) {
62 explicit operator bool() {
return result; }
static MethodInstance * resolve(const IR::MethodCallExpression *mce, const DeclarationLookup *refMap, TypeMap *typeMap, bool useExpressionType=false, const Visitor::Context *ctxt=nullptr, bool incomplete=false)
Definition methodInstance.cpp:16
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition applyOptionsPragmas.cpp:13