@@ -20,18 +20,20 @@ limitations under the License.
20
20
21
21
namespace BMV2 {
22
22
23
+ using namespace P4 ::literals;
24
+
23
25
cstring ActionConverter::jsonAssignment (const IR::Type *type) {
24
- if (type->is <IR::Type_Varbits>()) return " assign_VL" ;
25
- if (type->is <IR::Type_HeaderUnion>()) return " assign_union" ;
26
- if (type->is <IR::Type_Header>() || type->is <IR::Type_Struct>()) return " assign_header" ;
26
+ if (type->is <IR::Type_Varbits>()) return " assign_VL" _cs ;
27
+ if (type->is <IR::Type_HeaderUnion>()) return " assign_union" _cs ;
28
+ if (type->is <IR::Type_Header>() || type->is <IR::Type_Struct>()) return " assign_header" _cs ;
27
29
if (auto ts = type->to <IR::Type_Stack>()) {
28
30
auto et = ts->elementType ;
29
31
if (et->is <IR::Type_HeaderUnion>())
30
- return " assign_union_stack" ;
32
+ return " assign_union_stack" _cs ;
31
33
else
32
- return " assign_header_stack" ;
34
+ return " assign_header_stack" _cs ;
33
35
}
34
- return " assign" ;
36
+ return " assign" _cs ;
35
37
}
36
38
37
39
void ActionConverter::convertActionBody (const IR::Vector<IR::StatOrDecl> *body,
@@ -98,9 +100,9 @@ void ActionConverter::convertActionBody(const IR::Vector<IR::StatOrDecl> *body,
98
100
} else if (s->is <IR::ReturnStatement>()) {
99
101
break ;
100
102
} else if (s->is <IR::ExitStatement>()) {
101
- auto primitive = mkPrimitive (" exit" , result);
103
+ auto primitive = mkPrimitive (" exit" _cs , result);
102
104
(void )mkParameters (primitive);
103
- primitive->emplace_non_null (" source_info" , s->sourceInfoJsonObj ());
105
+ primitive->emplace_non_null (" source_info" _cs , s->sourceInfoJsonObj ());
104
106
break ;
105
107
} else if (s->is <IR::AssignmentStatement>()) {
106
108
const IR::Expression *l, *r;
@@ -111,7 +113,7 @@ void ActionConverter::convertActionBody(const IR::Vector<IR::StatOrDecl> *body,
111
113
cstring operation = jsonAssignment (type);
112
114
auto primitive = mkPrimitive (operation, result);
113
115
auto parameters = mkParameters (primitive);
114
- primitive->emplace_non_null (" source_info" , assign->sourceInfoJsonObj ());
116
+ primitive->emplace_non_null (" source_info" _cs , assign->sourceInfoJsonObj ());
115
117
bool convertBool = type->is <IR::Type_Boolean>();
116
118
Util::IJson *left;
117
119
if (ctxt->conv ->isArrayIndexRuntime (l)) {
@@ -141,25 +143,25 @@ void ActionConverter::convertActionBody(const IR::Vector<IR::StatOrDecl> *body,
141
143
parameters->append (obj);
142
144
143
145
if (builtin->name == IR::Type_Header::setValid) {
144
- prim = " add_header" ;
146
+ prim = " add_header" _cs ;
145
147
} else if (builtin->name == IR::Type_Header::setInvalid) {
146
- prim = " remove_header" ;
148
+ prim = " remove_header" _cs ;
147
149
} else if (builtin->name == IR::Type_Stack::push_front) {
148
150
BUG_CHECK (mc->arguments ->size () == 1 , " Expected 1 argument for %1%" , mc);
149
151
auto arg = ctxt->conv ->convert (mc->arguments ->at (0 )->expression );
150
- prim = " push" ;
152
+ prim = " push" _cs ;
151
153
parameters->append (arg);
152
154
} else if (builtin->name == IR::Type_Stack::pop_front) {
153
155
BUG_CHECK (mc->arguments ->size () == 1 , " Expected 1 argument for %1%" , mc);
154
156
auto arg = ctxt->conv ->convert (mc->arguments ->at (0 )->expression );
155
- prim = " pop" ;
157
+ prim = " pop" _cs ;
156
158
parameters->append (arg);
157
159
} else {
158
160
BUG (" %1%: Unexpected built-in method" , s);
159
161
}
160
162
auto primitive = mkPrimitive (prim, result);
161
- primitive->emplace (" parameters" , parameters);
162
- primitive->emplace_non_null (" source_info" , s->sourceInfoJsonObj ());
163
+ primitive->emplace (" parameters" _cs , parameters);
164
+ primitive->emplace_non_null (" source_info" _cs , s->sourceInfoJsonObj ());
163
165
continue ;
164
166
} else if (mi->is <P4::ExternMethod>()) {
165
167
auto em = mi->to <P4::ExternMethod>();
@@ -190,14 +192,14 @@ void ActionConverter::convertActionParams(const IR::ParameterList *parameters,
190
192
warn (ErrorType::WARN_UNUSED, " Unused action parameter %1%" , p);
191
193
192
194
auto param = new Util::JsonObject ();
193
- param->emplace (" name" , p->externalName ());
195
+ param->emplace (" name" _cs , p->externalName ());
194
196
auto type = ctxt->typeMap ->getType (p, true );
195
197
// TODO: added IR::Type_Enum here to support PSA_MeterColor_t
196
198
// should re-consider how to support action parameters that is neither bit<> nor int<>
197
199
if (!(type->is <IR::Type_Bits>() || type->is <IR::Type_Enum>()))
198
200
::error (ErrorType::ERR_INVALID,
199
201
" %1%: action parameters must be bit<> or int<> on this target" , p);
200
- param->emplace (" bitwidth" , type->width_bits ());
202
+ param->emplace (" bitwidth" _cs , type->width_bits ());
201
203
params->append (param);
202
204
}
203
205
}
0 commit comments