32class ActionTranslationVisitorPSA :
public ActionTranslationVisitor,
33 public ControlBodyTranslatorPSA {
41 bool preorder(
const IR::PathExpression *pe)
override;
42 bool isActionParameter(
const IR::Expression *expression)
const;
45 cstring getParamInstanceName(
const IR::Expression *expression)
const override;
46 cstring getParamName(
const IR::PathExpression *)
override;
49class EBPFControlPSA :
public EBPFControl {
54 const IR::Parameter *user_metadata;
55 const IR::Parameter *inputStandardMetadata;
56 const IR::Parameter *outputStandardMetadata;
58 std::map<cstring, EBPFHashPSA *> hashes;
59 std::map<cstring, EBPFRandomPSA *> randoms;
60 std::map<cstring, EBPFRegisterPSA *> registers;
61 std::map<cstring, EBPFMeterPSA *> meters;
63 EBPFControlPSA(
const EBPFProgram *program,
const IR::ControlBlock *control,
64 const IR::Parameter *parserHeaders)
65 : EBPFControl(program, control, parserHeaders) {}
69 void emitTableInstances(
CodeBuilder *builder)
override;
70 void emitTableInitializers(
CodeBuilder *builder)
override;
73 auto result = ::P4::get(randoms, name);
74 BUG_CHECK(result !=
nullptr,
"No random generator named %1%", name);
78 EBPFRegisterPSA *getRegister(
cstring name)
const {
79 auto result = ::P4::get(registers, name);
80 BUG_CHECK(result !=
nullptr,
"No register named %1%", name);
84 EBPFHashPSA *getHash(cstring name)
const {
85 auto result = ::P4::get(hashes, name);
86 BUG_CHECK(result !=
nullptr,
"No hash named %1%", name);
90 EBPFMeterPSA *getMeter(cstring name)
const {
91 auto result = ::P4::get(meters, name);
92 BUG_CHECK(result !=
nullptr,
"No meter named %1%", name);
96 DECLARE_TYPEINFO(EBPFControlPSA, EBPFControl);