@@ -144,6 +144,12 @@ struct primary_expression_node
144
144
std::unique_ptr<literal_node>
145
145
> expr;
146
146
147
+ auto is_expression_list() const
148
+ -> bool;
149
+
150
+ auto get_expression_list() const
151
+ -> expression_list_node const*;
152
+
147
153
auto template_args_count() -> int;
148
154
auto get_token() const -> token const*;
149
155
auto position() const -> source_position;
@@ -188,6 +194,12 @@ struct prefix_expression_node
188
194
std::vector<token const*> ops;
189
195
std::unique_ptr<postfix_expression_node> expr;
190
196
197
+ auto is_expression_list() const
198
+ -> bool;
199
+
200
+ auto get_expression_list() const
201
+ -> expression_list_node const*;
202
+
191
203
auto get_postfix_expression_node() const
192
204
-> postfix_expression_node *
193
205
{
@@ -217,6 +229,23 @@ struct binary_expression_node
217
229
};
218
230
std::vector<term> terms;
219
231
232
+ // API
233
+ //
234
+ auto is_expression_list() const
235
+ -> bool
236
+ {
237
+ return terms.empty() && expr->is_expression_list();
238
+ }
239
+
240
+ auto get_expression_list() const
241
+ -> expression_list_node const*
242
+ {
243
+ if (is_expression_list()) {
244
+ return expr->get_expression_list();
245
+ }
246
+ return {};
247
+ }
248
+
220
249
// Get left-hand postfix-expression
221
250
auto get_postfix_expression_node() const
222
251
-> postfix_expression_node *
@@ -325,6 +354,21 @@ struct expression_node
325
354
326
355
// API
327
356
//
357
+ auto is_expression_list() const
358
+ -> bool
359
+ {
360
+ return expr->is_expression_list();
361
+ }
362
+
363
+ auto get_expression_list() const
364
+ -> expression_list_node const*
365
+ {
366
+ if (is_expression_list()) {
367
+ return expr->get_expression_list();
368
+ }
369
+ return {};
370
+ }
371
+
328
372
auto get_lhs_rhs_if_simple_assignment() const
329
373
-> assignment_expression_lhs_rhs;
330
374
@@ -408,6 +452,21 @@ struct expression_list_node
408
452
}
409
453
};
410
454
455
+ auto primary_expression_node::is_expression_list() const
456
+ -> bool
457
+ {
458
+ return expr.index() == expression_list;
459
+ }
460
+
461
+ auto primary_expression_node::get_expression_list() const
462
+ -> expression_list_node const*
463
+ {
464
+ if (is_expression_list()) {
465
+ return std::get<expression_list>(expr).get();
466
+ }
467
+ return {};
468
+ }
469
+
411
470
412
471
struct expression_statement_node
413
472
{
@@ -483,6 +542,21 @@ struct postfix_expression_node
483
542
484
543
// API
485
544
//
545
+ auto is_expression_list() const
546
+ -> bool
547
+ {
548
+ return ops.empty() && expr->is_expression_list();
549
+ }
550
+
551
+ auto get_expression_list() const
552
+ -> expression_list_node const*
553
+ {
554
+ if (is_expression_list()) {
555
+ return expr->get_expression_list();
556
+ }
557
+ return {};
558
+ }
559
+
486
560
auto get_first_token_ignoring_this() const
487
561
-> token const*;
488
562
@@ -506,6 +580,21 @@ struct postfix_expression_node
506
580
auto visit(auto& v, int depth) -> void;
507
581
};
508
582
583
+ auto prefix_expression_node::is_expression_list() const
584
+ -> bool
585
+ {
586
+ return ops.empty() && expr->is_expression_list();
587
+ }
588
+
589
+ auto prefix_expression_node::get_expression_list() const
590
+ -> expression_list_node const*
591
+ {
592
+ if (is_expression_list()) {
593
+ return expr->get_expression_list();
594
+ }
595
+ return {};
596
+ }
597
+
509
598
auto prefix_expression_node::is_result_a_temporary_variable() const -> bool {
510
599
if (ops.empty()) {
511
600
return expr->is_result_a_temporary_variable();
@@ -833,6 +922,21 @@ struct is_as_expression_node
833
922
};
834
923
std::vector<term> ops;
835
924
925
+ auto is_expression_list() const
926
+ -> bool
927
+ {
928
+ return ops.empty() && expr->is_expression_list();
929
+ }
930
+
931
+ auto get_expression_list() const
932
+ -> expression_list_node const*
933
+ {
934
+ if (is_expression_list()) {
935
+ return expr->get_expression_list();
936
+ }
937
+ return {};
938
+ }
939
+
836
940
auto get_postfix_expression_node() const
837
941
-> postfix_expression_node *
838
942
{
0 commit comments