| 
| 
  | CmdStepper (ExecutionState &state, AbstractSolver &solver, const ProgramInfo &programInfo) | 
|   | 
| 
bool  | preorder (const IR::AssignmentStatement *assign) override | 
|   | 
| 
bool  | preorder (const IR::BlockStatement *block) override | 
|   | 
| 
bool  | preorder (const IR::EmptyStatement *empty) override | 
|   | 
| 
bool  | preorder (const IR::ExitStatement *e) override | 
|   | 
| 
bool  | preorder (const IR::IfStatement *ifStatement) override | 
|   | 
| 
bool  | preorder (const IR::MethodCallStatement *methodCallStatement) override | 
|   | 
| 
bool  | preorder (const IR::P4Control *p4control) override | 
|   | 
| 
bool  | preorder (const IR::P4Parser *p4parser) override | 
|   | 
| bool  | preorder (const IR::P4Program *program) override | 
|   | 
| 
bool  | preorder (const IR::ParserState *parserState) override | 
|   | 
| bool  | preorder (const IR::SwitchStatement *switchStatement) override | 
|   | 
| 
  | AbstractStepper (ExecutionState &state, AbstractSolver &solver, const ProgramInfo &programInfo) | 
|   | 
| bool  | preorder (const IR::Node *) override | 
|   | Provides generic handling of unsupported nodes.  
  | 
|   | 
| Result  | step (const IR::Node *) | 
|   | 
| const IR::Node *  | apply_visitor (const IR::Node *, const char *name=0) override | 
|   | 
| profile_t  | init_apply (const IR::Node *root) override | 
|   | 
| 
virtual void  | loop_revisit (const IR::Node *) | 
|   | 
| 
virtual void  | postorder (const IR::Node *) | 
|   | 
| 
virtual void  | revisit (const IR::Node *) | 
|   | 
| 
void  | revisit_visited () | 
|   | 
| 
bool  | visit_in_progress (const IR::Node *n) const | 
|   | 
| void  | visitAgain () const override | 
|   | 
| void  | visitOnce () const override | 
|   | 
| 
virtual bool  | check_global (cstring) | 
|   | 
| 
virtual void  | clear_globals () | 
|   | 
| 
virtual Visitor *  | clone () const | 
|   | 
| 
virtual ControlFlowVisitor *  | controlFlowVisitor () | 
|   | 
| 
virtual void  | end_apply () | 
|   | 
| 
virtual void  | end_apply (const IR::Node *root) | 
|   | 
| 
virtual void  | erase_global (cstring) | 
|   | 
| 
template<class T >  | 
| const T *  | findContext () const | 
|   | 
| 
template<class T >  | 
| const T *  | findContext (const Context *&c) const | 
|   | 
| 
template<class T >  | 
| const T *  | findOrigCtxt () const | 
|   | 
| 
template<class T >  | 
| const T *  | findOrigCtxt (const Context *&c) const | 
|   | 
| 
virtual Visitor &  | flow_clone () | 
|   | 
| virtual void  | flow_merge (Visitor &) | 
|   | 
| 
virtual bool  | flow_merge_closure (Visitor &) | 
|   | 
| 
virtual void  | flow_merge_global_from (cstring) | 
|   | 
| virtual void  | flow_merge_global_to (cstring) | 
|   | 
| 
const Context *  | getChildContext () const | 
|   | 
| 
int  | getChildrenVisited () const | 
|   | 
| 
const Context *  | getContext () const | 
|   | 
| 
int  | getContextDepth () const | 
|   | 
| const IR::Node *  | getCurrentNode () const | 
|   | 
| 
template<class T >  | 
| const T *  | getCurrentNode () const | 
|   | 
| 
const IR::Node *  | getOriginal () const | 
|   | 
| 
template<class T >  | 
| const T *  | getOriginal () const | 
|   | 
| 
template<class T >  | 
| const T *  | getParent () const | 
|   | 
| 
virtual bool  | has_flow_joins () const | 
|   | 
| 
profile_t  | init_apply (const IR::Node *root, const Context *parent_context) | 
|   | 
| 
bool  | isInContext (const IR::Node *n) const | 
|   | 
| 
virtual const char *  | name () const | 
|   | 
| 
template<class T >  | 
| void  | parallel_visit (const IR::Vector< T > &v, const char *name, int cidx) | 
|   | 
| 
template<class T >  | 
| void  | parallel_visit (const IR::Vector< T > &v, const char *name=0) | 
|   | 
| 
template<class T >  | 
| void  | parallel_visit (IR::Vector< T > &v, const char *name, int cidx) | 
|   | 
| 
template<class T >  | 
| void  | parallel_visit (IR::Vector< T > &v, const char *name=0) | 
|   | 
| 
void  | print_context () const | 
|   | 
| 
const Visitor &  | setCalledBy (const Visitor *visitor) | 
|   | 
| 
void  | setName (const char *name) | 
|   | 
| 
void  | visit (const IR::Node &n, const char *name, int cidx) | 
|   | 
| 
void  | visit (const IR::Node &n, const char *name=0) | 
|   | 
| 
void  | visit (const IR::Node *&n, const char *name, int cidx) | 
|   | 
| 
void  | visit (const IR::Node *&n, const char *name=0) | 
|   | 
| 
void  | visit (const IR::Node *const &n, const char *name, int cidx) | 
|   | 
| 
void  | visit (const IR::Node *const &n, const char *name=0) | 
|   | 
| 
void  | visit (IR::Node &n, const char *name, int cidx) | 
|   | 
| 
void  | visit (IR::Node &n, const char *name=0) | 
|   | 
| 
void  | visit (IR::Node *&, const char *=0, int=0) | 
|   | 
| 
template<class T , typename  = std::enable_if_t<Util::has_SourceInfo_v<T>>, class... Args>  | 
| void  | warn (const int kind, const char *format, const T &node, Args &&...args) | 
|   | The const ref variant of the above. 
  | 
|   | 
| 
template<class T , typename  = std::enable_if_t<Util::has_SourceInfo_v<T>>, class... Args>  | 
| void  | warn (const int kind, const char *format, const T *node, Args &&...args) | 
|   | 
| bool  | warning_enabled (int warning_kind) const | 
|   | 
 | 
| virtual std::map< Continuation::Exception, Continuation >  | getExceptionHandlers (const IR::P4Parser *parser, Continuation::Body normalContinuation, const ExecutionState &state) const =0 | 
|   | 
| virtual void  | initializeTargetEnvironment (ExecutionState &state) const =0 | 
|   | 
| const Constraint *  | startParser (const IR::P4Parser *parser, ExecutionState &state) | 
|   | 
| virtual std::optional< const Constraint * >  | startParserImpl (const IR::P4Parser *parser, ExecutionState &state) const =0 | 
|   | 
| void  | declareBaseType (ExecutionState &nextState, const IR::StateVariable ¶mPath, const IR::Type_Base *baseType) const | 
|   | 
| void  | declareStructLike (ExecutionState &nextState, const IR::StateVariable &parentExpr, bool forceTaint=false) const | 
|   | 
| const IR::Literal *  | evaluateExpression (const IR::Expression *expr, std::optional< const IR::Expression * > cond) const | 
|   | 
| virtual std::string  | getClassName ()=0 | 
|   | 
| 
virtual const ProgramInfo &  | getProgramInfo () const | 
|   | 
| 
void  | logStep (const IR::Node *node) | 
|   | Helper function for debugging execution of small stepper. 
  | 
|   | 
| void  | setHeaderValidity (const IR::StateVariable &headerRef, bool validity, ExecutionState &state) | 
|   | 
| void  | setTargetUninitialized (ExecutionState &nextState, const IR::StateVariable &ref, bool forceTaint) const | 
|   | 
| bool  | stepGetHeaderValidity (const IR::StateVariable &headerRef) | 
|   | 
| bool  | stepSetHeaderValidity (const IR::StateVariable &headerRef, bool validity) | 
|   | 
| bool  | stepStackPushPopFront (const IR::Expression *stackRef, const IR::Vector< IR::Argument > *args, bool isPush=true) | 
|   | 
| bool  | stepSymbolicValue (const IR::Node *) | 
|   | 
| bool  | stepToException (Continuation::Exception) | 
|   | 
| 
virtual void  | init_join_flows (const IR::Node *) | 
|   | 
| virtual bool  | join_flows (const IR::Node *) | 
|   | 
| virtual void  | post_join_flows (const IR::Node *, const IR::Node *) | 
|   | 
| 
void  | visit_children (const IR::Node *, std::function< void()> fn) | 
|   | 
 | 
| 
using  | Branch = SmallStepEvaluator::Branch | 
|   | 
| 
using  | Result = SmallStepEvaluator::Result | 
|   | 
| 
typedef Visitor_Context  | Context | 
|   | 
| 
static cstring  | demangle (const char *) | 
|   | 
| static bool  | warning_enabled (const Visitor *visitor, int warning_kind) | 
|   | 
| 
const Visitor *  | called_by = nullptr | 
|   | 
| 
cstring  | internalName | 
|   | 
| 
SplitFlowVisit_base *&  | split_link | 
|   | 
| 
SplitFlowVisit_base *  | split_link_mem = nullptr | 
|   | 
| static void  | checkMemberInvariant (const IR::Node *node) | 
|   | 
| static bool  | stepToListSubexpr (const IR::BaseListExpression *subexpr, SmallStepEvaluator::Result &result, const ExecutionState &state, std::function< const Continuation::Command(const IR::BaseListExpression *)> rebuildCmd) | 
|   | 
| static bool  | stepToStructSubexpr (const IR::StructExpression *subexpr, SmallStepEvaluator::Result &result, const ExecutionState &state, std::function< const Continuation::Command(const IR::StructExpression *)> rebuildCmd) | 
|   | 
| static bool  | stepToSubexpr (const IR::Expression *subexpr, SmallStepEvaluator::Result &result, const ExecutionState &state, std::function< const Continuation::Command(const Continuation::Parameter *)> rebuildCmd) | 
|   | 
| 
const ProgramInfo &  | programInfo | 
|   | Target-specific information about the P4 program being evaluated. 
  | 
|   | 
| 
Result  | result | 
|   | The output of the evaluation. 
  | 
|   | 
| 
AbstractSolver &  | solver | 
|   | The solver backing the state being executed. 
  | 
|   | 
| 
ExecutionState &  | state | 
|   | The state being evaluated. 
  | 
|   | 
| 
bool  | dontForwardChildrenBeforePreorder = false | 
|   | 
| 
bool  | joinFlows = false | 
|   | 
| 
bool  | visitDagOnce = true | 
|   | 
Implements small-step operational semantics for commands.