29 std::map<const IR::IDeclaration *, cstring> newName;
31 std::map<const IR::MethodCallExpression *, const IR::P4Action *> actionCall;
34 void setNewName(
const IR::IDeclaration *decl,
cstring name);
35 cstring getName(
const IR::IDeclaration *decl)
const {
37 BUG_CHECK(newName.find(decl) != newName.end(),
"%1%: no new name", decl);
38 auto result = ::get(newName, decl);
41 bool toRename(
const IR::IDeclaration *decl)
const {
43 return newName.find(decl) != newName.end();
45 void foundInTable(
const IR::P4Action *action);
46 void markActionCall(
const IR::P4Action *action,
const IR::MethodCallExpression *call);
47 const IR::P4Action *actionCalled(
const IR::MethodCallExpression *expression)
const;
68 bool isTopLevel()
const {
69 return findContext<IR::P4Parser>() ==
nullptr && findContext<IR::P4Control>() ==
nullptr;
73 CHECK_NULL(renameMap);
74 setName(
"FindSymbols");
76 void doDecl(
const IR::Declaration *decl) {
78 renameMap->setNewName(decl, newName);
80 void postorder(
const IR::Declaration_Variable *decl)
override { doDecl(decl); }
81 void postorder(
const IR::Declaration_Constant *decl)
override {
85 if (decl->getName().name.startsWith(
"__") && getParent<IR::P4Program>())
return;
88 void postorder(
const IR::Declaration_Instance *decl)
override {
89 if (!isTopLevel()) doDecl(decl);
91 void postorder(
const IR::P4Table *decl)
override { doDecl(decl); }
92 void postorder(
const IR::P4Action *decl)
override {
93 if (!isTopLevel()) doDecl(decl);
95 void postorder(
const IR::P4ValueSet *decl)
override {
96 if (!isTopLevel()) doDecl(decl);
104 IR::ID *getName()
const;
108 : refMap(refMap), renameMap(renameMap) {
110 CHECK_NULL(renameMap);
111 visitDagOnce =
false;
112 setName(
"RenameSymbols");
114 const IR::Node *postorder(IR::Declaration_Variable *decl)
override;
115 const IR::Node *postorder(IR::Declaration_Constant *decl)
override;
116 const IR::Node *postorder(IR::PathExpression *expression)
override;
117 const IR::Node *postorder(IR::Declaration_Instance *decl)
override;
118 const IR::Node *postorder(IR::P4Table *decl)
override;
119 const IR::Node *postorder(IR::P4Action *decl)
override;
120 const IR::Node *postorder(IR::P4ValueSet *decl)
override;
121 const IR::Node *postorder(IR::Parameter *param)
override;
122 const IR::Node *postorder(IR::Argument *argument)
override;
cstring newName(cstring base) override
Generate a name from base that fresh for the program.
Definition referenceMap.cpp:96