42 std::unordered_set<cstring> uniqueUnaryOperators;
43 std::unordered_set<cstring> uniqueBinaryOperators;
44 std::unordered_multiset<cstring> uniqueOperands;
45 std::unordered_set<cstring> structFields;
46 std::unordered_set<cstring> uniqueFields;
47 std::vector<std::unordered_set<cstring>> scopedOperands;
48 const std::unordered_set<P4::cstring> reservedKeywords = {
49 "extract"_cs,
"emit"_cs,
"isValid"_cs,
"setValid"_cs,
"setInvalid"_cs,
50 "push_front"_cs,
"pop_front"_cs,
"next"_cs,
"last"_cs,
"apply"_cs,
51 "hit"_cs,
"miss"_cs,
"action_run"_cs,
"accept"_cs,
"mark_to_drop"_cs,
52 "read"_cs,
"write"_cs,
"count"_cs,
"execute"_cs,
"clear"_cs,
53 "update"_cs,
"get"_cs,
"verify"_cs,
"clone"_cs,
"resubmit"_cs,
54 "recirculate"_cs,
"transition"_cs,
"size"_cs,
"max_length"_cs,
"length"_cs};
56 const std::unordered_set<P4::cstring> matchTypes = {
"exact"_cs,
"lpm"_cs,
"ternary"_cs,
57 "range"_cs,
"optional"_cs};
61 void addOperand(
const cstring &operand);
62 void addUnaryOperator(
const cstring &op);
63 void addBinaryOperator(
const cstring &op);
66 explicit HalsteadMetricsPass(
Metrics &metricsRef) : metrics(metricsRef.halsteadMetrics) {
67 setName(
"HalsteadMetricsPass");
72 bool preorder(
const IR::P4Control * )
override;
73 void postorder(
const IR::P4Control * )
override;
74 bool preorder(
const IR::P4Parser * )
override;
75 void postorder(
const IR::P4Parser * )
override;
76 bool preorder(
const IR::Function * )
override;
77 void postorder(
const IR::Function * )
override;
81 void postorder(
const IR::Type_Header *headerType)
override;
82 void postorder(
const IR::Type_Struct *structType)
override;
83 bool preorder(
const IR::PathExpression *pathExpr)
override;
84 bool preorder(
const IR::Member *member)
override;
85 void postorder(
const IR::Constant *constant)
override;
86 void postorder(
const IR::ConstructorCallExpression *ctorCall)
override;
87 bool preorder(
const IR::MethodCallExpression *methodCall)
override;
88 void postorder(
const IR::AssignmentStatement * )
override;
89 void postorder(
const IR::IfStatement *stmt)
override;
90 void postorder(
const IR::SwitchStatement * )
override;
91 void postorder(
const IR::SwitchCase * )
override;
92 void postorder(
const IR::ForStatement * )
override;
93 void postorder(
const IR::ForInStatement * )
override;
94 void postorder(
const IR::ReturnStatement * )
override;
95 void postorder(
const IR::ExitStatement * )
override;
96 bool preorder(
const IR::Operation_Unary *op)
override;
97 void postorder(
const IR::Operation_Binary *op)
override;
98 void postorder(
const IR::ParserState *state)
override;
99 void postorder(
const IR::SelectExpression * )
override;
100 bool preorder(
const IR::SelectCase *selectCase)
override;
101 void postorder(
const IR::P4Table *table)
override;
104 void postorder(
const IR::P4Program * )
override;
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition applyOptionsPragmas.cpp:24