41class ActionTranslationVisitorPSA :
public ActionTranslationVisitor,
42 public ControlBodyTranslatorPSA {
50 bool preorder(
const IR::PathExpression *pe)
override;
51 bool isActionParameter(
const IR::Expression *expression)
const;
54 cstring getParamInstanceName(
const IR::Expression *expression)
const override;
55 cstring getParamName(
const IR::PathExpression *)
override;
58class EBPFControlPSA :
public EBPFControl {
63 const IR::Parameter *user_metadata;
64 const IR::Parameter *inputStandardMetadata;
65 const IR::Parameter *outputStandardMetadata;
67 std::map<cstring, EBPFHashPSA *> hashes;
68 std::map<cstring, EBPFRandomPSA *> randoms;
69 std::map<cstring, EBPFRegisterPSA *> registers;
70 std::map<cstring, EBPFMeterPSA *> meters;
72 EBPFControlPSA(
const EBPFProgram *program,
const IR::ControlBlock *control,
73 const IR::Parameter *parserHeaders)
74 : EBPFControl(program, control, parserHeaders) {}
78 void emitTableInstances(
CodeBuilder *builder)
override;
79 void emitTableInitializers(
CodeBuilder *builder)
override;
82 auto result = ::P4::get(randoms, name);
83 BUG_CHECK(result !=
nullptr,
"No random generator named %1%", name);
87 EBPFRegisterPSA *getRegister(
cstring name)
const {
88 auto result = ::P4::get(registers, name);
89 BUG_CHECK(result !=
nullptr,
"No register named %1%", name);
93 EBPFHashPSA *getHash(cstring name)
const {
94 auto result = ::P4::get(hashes, name);
95 BUG_CHECK(result !=
nullptr,
"No hash named %1%", name);
99 EBPFMeterPSA *getMeter(cstring name)
const {
100 auto result = ::P4::get(meters, name);
101 BUG_CHECK(result !=
nullptr,
"No meter named %1%", name);
105 DECLARE_TYPEINFO(EBPFControlPSA, EBPFControl);