17 unsigned scalars_width = 0;
19 std::map<const IR::StructField *, cstring> scalarMetadataFields;
47 std::map<const cstring, IR::IndexedVector<IR::Parameter> *> args_struct_map;
48 std::map<const IR::Declaration_Instance *, cstring> csum_map;
49 std::map<cstring, int> error_map;
50 std::vector<const IR::Declaration_Instance *> externDecls;
51 std::map<cstring, std::vector<std::pair<cstring, cstring>>> key_map;
52 std::map<cstring, const IR::P4Table *> group_tables;
53 std::map<cstring, const IR::P4Table *> member_tables;
55 std::set<cstring> pipeline_controls;
56 std::set<cstring> non_pipeline_controls;
58 IR::Type_Struct *metadataStruct;
59 IR::Expression *ipsec_header;
60 cstring local_metadata_type = cstring::empty;
61 cstring header_type = cstring::empty;
68 void push_variable(
const IR::DpdkDeclaration *d) { variables.push_back(d); }
71 bool hasVisited(
const IR::Type_StructLike *st) {
72 if (
auto h = st->to<IR::Type_Header>())
73 return header_types.count(h->getName());
74 else if (
auto s = st->to<IR::Type_Struct>())
75 return metadata_types.count(s->getName());
76 else if (
auto u = st->to<IR::Type_HeaderUnion>())
77 return header_union_types.count(u->getName());
87 bool isPSA(
void) {
return (p4arch ==
"psa") ? true :
false; }
95 bool isPNA(
void) {
return (p4arch ==
"pna") ? true :
false; }
122 CHECK_NULL(structure);
125 bool preorder(
const IR::ToplevelBlock *block)
override;
126 bool preorder(
const IR::PackageBlock *block)
override;
127 void parse_psa_block(
const IR::PackageBlock *);
128 void parse_pna_block(
const IR::PackageBlock *);
131 structure->variables.clear();
132 structure->header_types.clear();
133 structure->metadata_types.clear();
134 structure->parsers.clear();
135 structure->deparsers.clear();
136 structure->pipelines.clear();
137 structure->actions.clear();
138 return Inspector::init_apply(root);
150 : refMap(refMap), typeMap(typeMap), structure(structure) {
151 CHECK_NULL(structure);
154 bool isHeaders(
const IR::Type_StructLike *st);
155 void addTypesAndInstances(
const IR::Type_StructLike *type,
bool meta);
156 void addHeaderType(
const IR::Type_StructLike *st);
157 void addHeaderInstance(
const IR::Type_StructLike *st,
cstring name);
158 bool preorder(
const IR::Declaration_Variable *dv)
override;
159 bool preorder(
const IR::Parameter *parameter)
override;
160 bool preorder(
const IR::P4Action *)
override;
161 bool isStandardMetadata(
cstring);