19 unsigned scalars_width = 0;
21 std::map<const IR::StructField *, cstring> scalarMetadataFields;
49 std::map<const cstring, IR::IndexedVector<IR::Parameter> *> args_struct_map;
50 std::map<const IR::Declaration_Instance *, cstring> csum_map;
51 std::map<cstring, int> error_map;
52 std::vector<const IR::Declaration_Instance *> externDecls;
53 std::map<cstring, std::vector<std::pair<cstring, cstring>>> key_map;
54 std::map<cstring, const IR::P4Table *> group_tables;
55 std::map<cstring, const IR::P4Table *> member_tables;
57 std::set<cstring> pipeline_controls;
58 std::set<cstring> non_pipeline_controls;
60 IR::Type_Struct *metadataStruct;
61 IR::Expression *ipsec_header;
62 cstring local_metadata_type = cstring::empty;
63 cstring header_type = cstring::empty;
70 void push_variable(
const IR::DpdkDeclaration *d) { variables.push_back(d); }
73 bool hasVisited(
const IR::Type_StructLike *st) {
74 if (
auto h = st->to<IR::Type_Header>())
75 return header_types.count(h->getName());
76 else if (
auto s = st->to<IR::Type_Struct>())
77 return metadata_types.count(s->getName());
78 else if (
auto u = st->to<IR::Type_HeaderUnion>())
79 return header_union_types.count(u->getName());
89 bool isPSA(
void) {
return (p4arch ==
"psa") ? true :
false; }
97 bool isPNA(
void) {
return (p4arch ==
"pna") ? true :
false; }
124 CHECK_NULL(structure);
127 bool preorder(
const IR::ToplevelBlock *block)
override;
128 bool preorder(
const IR::PackageBlock *block)
override;
129 void parse_psa_block(
const IR::PackageBlock *);
130 void parse_pna_block(
const IR::PackageBlock *);
133 structure->variables.clear();
134 structure->header_types.clear();
135 structure->metadata_types.clear();
136 structure->parsers.clear();
137 structure->deparsers.clear();
138 structure->pipelines.clear();
139 structure->actions.clear();
140 return Inspector::init_apply(root);
152 : refMap(refMap), typeMap(typeMap), structure(structure) {
153 CHECK_NULL(structure);
156 bool isHeaders(
const IR::Type_StructLike *st);
157 void addTypesAndInstances(
const IR::Type_StructLike *type,
bool meta);
158 void addHeaderType(
const IR::Type_StructLike *st);
159 void addHeaderInstance(
const IR::Type_StructLike *st,
cstring name);
160 bool preorder(
const IR::Declaration_Variable *dv)
override;
161 bool preorder(
const IR::Parameter *parameter)
override;
162 bool preorder(
const IR::P4Action *)
override;
163 bool isStandardMetadata(
cstring);
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition applyOptionsPragmas.cpp:24