P4C
The P4 Compiler
Loading...
Searching...
No Matches
typeSpecConverter.h
1/*
2 * SPDX-FileCopyrightText: 2018 Barefoot Networks, Inc.
3 * Copyright 2018-present Barefoot Networks, Inc.
4 *
5 * SPDX-License-Identifier: Apache-2.0
6 */
7
8#ifndef CONTROL_PLANE_TYPESPECCONVERTER_H_
9#define CONTROL_PLANE_TYPESPECCONVERTER_H_
10
11#include <map>
12#include <string>
13
14#include "ir/ir.h"
15#include "ir/visitor.h"
16#pragma GCC diagnostic push
17#pragma GCC diagnostic ignored "-Wunused-parameter"
18#pragma GCC diagnostic ignored "-Wpedantic"
19#include "p4/config/v1/p4info.pb.h"
20#pragma GCC diagnostic pop
21
22namespace p4 {
23
24class P4DataTypeSpec;
25class P4TypeInfo;
26
27} // namespace p4
28
29namespace P4 {
30
31class TypeMap;
32class ReferenceMap;
33
34namespace ControlPlaneAPI {
35
37class TypeSpecConverter : public Inspector {
38 private:
39 const P4::ReferenceMap *refMap;
40 P4::TypeMap *typeMap;
43 ::p4::config::v1::P4TypeInfo *p4RtTypeInfo;
46 std::map<const IR::Type *, ::p4::config::v1::P4DataTypeSpec *> map;
47
48 TypeSpecConverter(const P4::ReferenceMap *refMap, P4::TypeMap *typeMap,
49 ::p4::config::v1::P4TypeInfo *p4RtTypeInfo);
50
51 // fallback for unsupported types, should be unreachable
52 bool preorder(const IR::Type *type) override;
53
54 // anonymous types
55 bool preorder(const IR::Type_Bits *type) override;
56 bool preorder(const IR::Type_Varbits *type) override;
57 bool preorder(const IR::Type_Boolean *type) override;
58 bool preorder(const IR::Type_BaseList *type) override;
59 bool preorder(const IR::Type_Array *type) override;
60
61 bool preorder(const IR::Type_Name *type) override;
62 bool preorder(const IR::Type_Newtype *type) override;
63
64 // these methods do not update the "map", but update p4RtTypeInfo if it is
65 // not null.
66 bool preorder(const IR::Type_Struct *type) override;
67 bool preorder(const IR::Type_Header *type) override;
68 bool preorder(const IR::Type_HeaderUnion *type) override;
69 bool preorder(const IR::Type_Enum *type) override;
70 bool preorder(const IR::Type_SerEnum *type) override;
71 bool preorder(const IR::Type_Error *type) override;
72
73 public:
77 static const ::p4::config::v1::P4DataTypeSpec *convert(const P4::ReferenceMap *refMap,
78 P4::TypeMap *typeMap,
79 const IR::Type *type,
80 ::p4::config::v1::P4TypeInfo *typeInfo);
81};
82
85 enum Type { kBit, kString };
86 Type type; // Supported controller types are `string` and `bit<W>`.
87 int width; // 0 if type == kString.
88};
89
92 std::string original_type_uri;
93 ControllerType controller_type;
94};
95
99bool hasTranslationAnnotation(const IR::Type *type, TranslationAnnotation *payload);
100
103cstring getTypeName(const IR::Type *type, TypeMap *typeMap);
104
105} // namespace ControlPlaneAPI
106
107} // namespace P4
108
109#endif // CONTROL_PLANE_TYPESPECCONVERTER_H_
static const ::p4::config::v1::P4DataTypeSpec * convert(const P4::ReferenceMap *refMap, P4::TypeMap *typeMap, const IR::Type *type, ::p4::config::v1::P4TypeInfo *typeInfo)
Definition typeSpecConverter.cpp:377
Class used to encode maps from paths to declarations.
Definition referenceMap.h:67
Definition typeMap.h:32
Definition cstring.h:85
TODO(antonin): High level goals of the generator go here!!
Definition dpdk/control-plane/bfruntime_arch_handler.h:44
cstring getTypeName(const IR::Type *type, TypeMap *typeMap)
Definition typeSpecConverter.cpp:68
bool hasTranslationAnnotation(const IR::Type *type, TranslationAnnotation *payload)
Definition typeSpecConverter.cpp:32
Payload of @p4runtime_translation annotation.
Definition typeSpecConverter.h:91
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition applyOptionsPragmas.cpp:13
See section "User-defined types" in P4RT specification.
Definition typeSpecConverter.h:84