25 unsigned scalars_width = 0;
27 std::map<const IR::StructField *, cstring> scalarMetadataFields;
56 std::map<const cstring, IR::IndexedVector<IR::Parameter> *> args_struct_map;
57 std::map<const IR::Declaration_Instance *, cstring> csum_map;
58 std::map<cstring, int> error_map;
59 std::vector<const IR::Declaration_Instance *> externDecls;
60 std::map<cstring, std::vector<std::pair<cstring, cstring>>> key_map;
61 std::map<cstring, const IR::P4Table *> group_tables;
62 std::map<cstring, const IR::P4Table *> member_tables;
64 std::set<cstring> pipeline_controls;
65 std::set<cstring> non_pipeline_controls;
67 IR::Type_Struct *metadataStruct;
68 IR::Expression *ipsec_header;
69 cstring local_metadata_type = cstring::empty;
70 cstring header_type = cstring::empty;
77 void push_variable(
const IR::DpdkDeclaration *d) { variables.push_back(d); }
80 void addHeaderInstances(
const IR::DpdkHeaderInstance *d) {
81 if (header_instances.find(d->name->toString()) == header_instances.end()) {
82 header_instances.emplace(d->name->toString(), d);
86 bool hasVisited(
const IR::Type_StructLike *st) {
87 if (
auto h = st->to<IR::Type_Header>())
88 return header_types.count(h->getName());
89 else if (
auto s = st->to<IR::Type_Struct>())
90 return metadata_types.count(s->getName());
91 else if (
auto u = st->to<IR::Type_HeaderUnion>())
92 return header_union_types.count(u->getName());
102 bool isPSA(
void) {
return (p4arch ==
"psa") ? true :
false; }
110 bool isPNA(
void) {
return (p4arch ==
"pna") ? true :
false; }
137 CHECK_NULL(structure);
140 bool preorder(
const IR::ToplevelBlock *block)
override;
141 bool preorder(
const IR::PackageBlock *block)
override;
142 void parse_psa_block(
const IR::PackageBlock *);
143 void parse_pna_block(
const IR::PackageBlock *);
146 structure->variables.clear();
147 structure->header_types.clear();
148 structure->metadata_types.clear();
149 structure->parsers.clear();
150 structure->deparsers.clear();
151 structure->pipelines.clear();
152 structure->actions.clear();
153 return Inspector::init_apply(root);
165 : refMap(refMap), typeMap(typeMap), structure(structure) {
166 CHECK_NULL(structure);
169 bool isHeaders(
const IR::Type_StructLike *st);
170 void addTypesAndInstances(
const IR::Type_StructLike *type,
bool meta);
171 void addHeaderType(
const IR::Type_StructLike *st);
172 void addHeaderInstance(
const IR::Type_StructLike *st,
cstring name);
173 bool preorder(
const IR::Declaration_Variable *dv)
override;
174 bool preorder(
const IR::Parameter *parameter)
override;
175 bool preorder(
const IR::P4Action *)
override;
176 bool isStandardMetadata(
cstring);
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition applyOptionsPragmas.cpp:13