22 std::set<const IR::Parameter *> toDereference;
23 std::vector<cstring> saveAction;
27 explicit ControlBodyTranslator(
const EBPFControl *control);
39 bool preorder(
const IR::PathExpression *expression)
override;
40 bool preorder(
const IR::MethodCallExpression *expression)
override;
41 bool preorder(
const IR::ExitStatement *)
override;
42 bool preorder(
const IR::ReturnStatement *)
override;
43 bool preorder(
const IR::IfStatement *statement)
override;
44 bool preorder(
const IR::SwitchStatement *statement)
override;
45 bool preorder(
const IR::StructExpression *expr)
override;
51 const IR::ControlBlock *controlBlock;
52 const IR::Parameter *headers;
53 const IR::Parameter *accept;
54 const IR::Parameter *xdpInputMeta;
55 const IR::Parameter *xdpOutputMeta;
56 const IR::Parameter *parserHeaders;
60 const bool emitExterns;
62 std::set<const IR::Parameter *> toDereference;
63 std::map<cstring, EBPFTable *> tables;
64 std::map<cstring, EBPFCounterTable *> counters;
66 EBPFControl(
const EBPFProgram *program,
const IR::ControlBlock *block,
67 const IR::Parameter *parserHeaders);
69 virtual void emitDeclaration(
CodeBuilder *builder,
const IR::Declaration *decl);
71 virtual void emitTableInitializers(
CodeBuilder *builder);
72 virtual void emitTableInstances(
CodeBuilder *builder);
75 auto result = ::P4::get(tables, name);
76 BUG_CHECK(result !=
nullptr,
"No table named %1%", name);
80 auto result = ::P4::get(counters, name);
81 BUG_CHECK(result !=
nullptr,
"No counter named %1%", name);
88 DECLARE_TYPEINFO(EBPFControl, EBPFObject);
Definition ebpfControl.h:19
virtual void compileEmitField(const IR::Expression *expr, cstring field, unsigned alignment, EBPFType *type)
Handle the packet_out.emit method.
Definition ebpfControl.cpp:144