30 std::set<const IR::Parameter *> toDereference;
31 std::vector<cstring> saveAction;
34 std::vector<UBPFRegister *> registersLookups;
36 explicit UBPFControlBodyTranslator(
const UBPFControl *control);
42 bool preorder(
const IR::PathExpression *expression)
override;
43 bool preorder(
const IR::MethodCallStatement *s)
override;
44 bool preorder(
const IR::MethodCallExpression *expression)
override;
45 bool preorder(
const IR::BaseAssignmentStatement *a)
override {
return notSupported(a); }
46 bool preorder(
const IR::AssignmentStatement *a)
override;
47 bool preorder(
const IR::BlockStatement *s)
override;
48 bool preorder(
const IR::ExitStatement *)
override;
49 bool preorder(
const IR::ReturnStatement *)
override;
50 bool preorder(
const IR::IfStatement *statement)
override;
51 bool preorder(
const IR::SwitchStatement *statement)
override;
52 bool preorder(
const IR::Operation_Binary *b)
override;
53 bool comparison(
const IR::Operation_Relation *b);
54 bool preorder(
const IR::Member *expression)
override;
56 void emitAssignmentStatement(
const IR::AssignmentStatement *a);
57 bool emitRegisterRead(
const IR::AssignmentStatement *a,
const IR::MethodCallExpression *method);
63 const IR::ControlBlock *controlBlock;
64 const IR::Parameter *headers;
65 const IR::Parameter *parserHeaders;
70 std::set<const IR::Parameter *> toDereference;
71 std::map<cstring, UBPFTable *> tables;
72 std::map<cstring, UBPFRegister *> registers;
74 UBPFControl(
const UBPFProgram *program,
const IR::ControlBlock *block,
75 const IR::Parameter *parserHeaders);
85 auto result = ::P4::get(tables, name);
86 BUG_CHECK(result !=
nullptr,
"No table named %1%", name);
91 auto result = ::P4::get(registers, name);
92 BUG_CHECK(result !=
nullptr,
"No register named %1%", name);
Definition ebpfControl.h:28
Definition ubpfControl.h:27