P4C
The P4 Compiler
 
Loading...
Searching...
No Matches
bindVariables.h
1#ifndef FRONTENDS_P4_TYPECHECKING_BINDVARIABLES_H_
2#define FRONTENDS_P4_TYPECHECKING_BINDVARIABLES_H_
3
4#include "frontends/common/resolveReferences/resolveReferences.h"
5#include "frontends/p4/typeChecking/typeChecker.h"
6#include "frontends/p4/typeMap.h"
7#include "ir/ir.h"
8
9namespace P4 {
10
11// Insert explicit type specializations where they are missing
12class DoBindTypeVariables : public Transform {
13 IR::IndexedVector<IR::Node> *newTypes;
14 TypeMap *typeMap;
15 const IR::Type *getVarValue(const IR::Type_Var *var, const IR::Node *errorPosition) const;
16 const IR::Node *insertTypes(const IR::Node *node);
17
18 public:
19 explicit DoBindTypeVariables(TypeMap *typeMap) : typeMap(typeMap) {
20 CHECK_NULL(typeMap);
21 setName("DoBindTypeVariables");
22 newTypes = new IR::IndexedVector<IR::Node>();
23 }
24 const IR::Node *postorder(IR::Expression *expression) override;
25 const IR::Node *postorder(IR::Declaration_Instance *decl) override;
26 const IR::Node *postorder(IR::MethodCallExpression *expression) override;
27 const IR::Node *postorder(IR::ConstructorCallExpression *expression) override;
28 const IR::Node *postorder(IR::P4Parser *parser) override { return insertTypes(parser); }
29 const IR::Node *postorder(IR::P4Control *control) override { return insertTypes(control); }
30};
31
32class BindTypeVariables : public PassManager {
33 public:
34 BindTypeVariables(ReferenceMap *refMap, TypeMap *typeMap) {
35 CHECK_NULL(refMap);
36 CHECK_NULL(typeMap);
37 passes.push_back(new ClearTypeMap(typeMap));
38 passes.push_back(new ResolveReferences(refMap));
39 passes.push_back(new TypeInference(refMap, typeMap, false)); // may insert casts
40 passes.push_back(new DoBindTypeVariables(typeMap));
41 passes.push_back(new ClearTypeMap(typeMap, true));
42 setName("BindTypeVariables");
43 }
44};
45
46} // namespace P4
47
48#endif /* FRONTENDS_P4_TYPECHECKING_BINDVARIABLES_H_ */
Definition bindVariables.h:32
Definition typeChecker.h:37
Definition bindVariables.h:12
Class used to encode maps from paths to declarations.
Definition referenceMap.h:66
Definition resolveReferences.h:119
Definition typeChecker.h:83
Definition typeMap.h:42
Definition applyOptionsPragmas.cpp:24