P4C
The P4 Compiler
Loading...
Searching...
No Matches
tableKeyNames.h
1/*
2 * Copyright 2017 VMware, Inc.
3 * SPDX-FileCopyrightText: 2017 VMware, Inc.
4 *
5 * SPDX-License-Identifier: Apache-2.0
6 */
7
8#ifndef FRONTENDS_P4_TABLEKEYNAMES_H_
9#define FRONTENDS_P4_TABLEKEYNAMES_H_
10
11#include "frontends/p4/typeChecking/typeChecker.h"
12#include "frontends/p4/typeMap.h"
13#include "ir/ir.h"
14
15namespace P4 {
16
23class KeyNameGenerator : public Inspector {
24 std::map<const IR::Expression *, cstring> name;
25 const TypeMap *typeMap; // can be nullptr
26
27 public:
28 explicit KeyNameGenerator(const TypeMap *typeMap) : typeMap(typeMap) {
29 setName("KeyNameGenerator");
30 }
31 void error(const IR::Expression *expression);
32 void postorder(const IR::Expression *expression) override;
33 void postorder(const IR::PathExpression *expression) override;
34 void postorder(const IR::Member *expression) override;
35 void postorder(const IR::ArrayIndex *expression) override;
36 void postorder(const IR::Constant *expression) override;
37 void postorder(const IR::Slice *expression) override;
38 void postorder(const IR::BAnd *expression) override;
39 void postorder(const IR::MethodCallExpression *expression) override;
40 cstring getName(const IR::Expression *expression) { return ::P4::get(name, expression); }
41};
42
70class DoTableKeyNames final : public Transform {
71 const TypeMap *typeMap;
72
73 public:
74 explicit DoTableKeyNames(const TypeMap *typeMap) : typeMap(typeMap) {
75 CHECK_NULL(typeMap);
76 setName("DoTableKeyNames");
77 }
78 const IR::Node *postorder(IR::KeyElement *keyElement) override;
79};
80
81class TableKeyNames final : public PassManager {
82 public:
83 explicit TableKeyNames(TypeMap *typeMap) {
84 passes.push_back(new TypeChecking(nullptr, typeMap));
85 passes.push_back(new DoTableKeyNames(typeMap));
86 setName("TableKeyNames");
87 }
88};
89
90} // namespace P4
91
92#endif /* FRONTENDS_P4_TABLEKEYNAMES_H_ */
Definition tableKeyNames.h:70
Definition node.h:53
Definition visitor.h:418
Definition visitor.h:442
Definition typeChecker.h:55
Definition typeMap.h:32
Definition cstring.h:85
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition applyOptionsPragmas.cpp:13