42class ActionTranslationVisitorPSA :
public ActionTranslationVisitor,
43 public ControlBodyTranslatorPSA {
51 bool preorder(
const IR::PathExpression *pe)
override;
52 bool isActionParameter(
const IR::Expression *expression)
const;
55 cstring getParamInstanceName(
const IR::Expression *expression)
const override;
56 cstring getParamName(
const IR::PathExpression *)
override;
59class EBPFControlPSA :
public EBPFControl {
64 const IR::Parameter *user_metadata;
65 const IR::Parameter *inputStandardMetadata;
66 const IR::Parameter *outputStandardMetadata;
68 std::map<cstring, EBPFHashPSA *> hashes;
69 std::map<cstring, EBPFRandomPSA *> randoms;
70 std::map<cstring, EBPFRegisterPSA *> registers;
71 std::map<cstring, EBPFMeterPSA *> meters;
73 EBPFControlPSA(
const EBPFProgram *program,
const IR::ControlBlock *control,
74 const IR::Parameter *parserHeaders)
75 : EBPFControl(program, control, parserHeaders) {}
79 void emitTableInstances(
CodeBuilder *builder)
override;
80 void emitTableInitializers(
CodeBuilder *builder)
override;
83 auto result = ::P4::get(randoms, name);
84 BUG_CHECK(result !=
nullptr,
"No random generator named %1%", name);
88 EBPFRegisterPSA *getRegister(
cstring name)
const {
89 auto result = ::P4::get(registers, name);
90 BUG_CHECK(result !=
nullptr,
"No register named %1%", name);
94 EBPFHashPSA *getHash(cstring name)
const {
95 auto result = ::P4::get(hashes, name);
96 BUG_CHECK(result !=
nullptr,
"No hash named %1%", name);
100 EBPFMeterPSA *getMeter(cstring name)
const {
101 auto result = ::P4::get(meters, name);
102 BUG_CHECK(result !=
nullptr,
"No meter named %1%", name);
106 DECLARE_TYPEINFO(EBPFControlPSA, EBPFControl);