P4C
The P4 Compiler
Loading...
Searching...
No Matches
header_type.h
1/*
2 * SPDX-FileCopyrightText: 2013 Barefoot Networks, Inc.
3 * Copyright 2013-present Barefoot Networks, Inc.
4 *
5 * SPDX-License-Identifier: Apache-2.0
6 */
7
8#ifndef FRONTENDS_P4_14_HEADER_TYPE_H_
9#define FRONTENDS_P4_14_HEADER_TYPE_H_
10
11#include "ir/ir.h"
12#include "ir/visitor.h"
13
14namespace P4 {
15
16class CheckHeaderTypes : public Modifier {
17 const IR::V1Program *global = nullptr;
18
19 public:
20 CheckHeaderTypes() { setName("CheckHeaderTypes"); }
21 bool preorder(IR::V1Program *glob) override {
22 global = glob;
23 return true;
24 }
25 bool preorder(IR::Metadata *meta) override {
26 if (auto type = global->get<IR::v1HeaderType>(meta->type_name))
27 meta->type = type->as_metadata;
28 else
29 error(ErrorType::ERR_TYPE_ERROR, "%s: No header type %s", meta->srcInfo,
30 meta->type_name);
31 return true;
32 }
33 bool preorder(IR::HeaderOrMetadata *hdr) override {
34 if (auto type = global->get<IR::v1HeaderType>(hdr->type_name))
35 hdr->type = type->as_header;
36 else
37 error(ErrorType::ERR_TYPE_ERROR, "%s: No header type %s", hdr->srcInfo, hdr->type_name);
38 return true;
39 }
40};
41
43 public:
44 bool preorder(IR::Type_StructLike *hdr_type) override;
45};
46
47} // namespace P4
48
49#endif /* FRONTENDS_P4_14_HEADER_TYPE_H_ */
Definition header_type.h:42
Definition visitor.h:385
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition applyOptionsPragmas.cpp:13
void error(const char *format, Args &&...args)
Report an error with the given message.
Definition lib/error.h:58