| 1076 | } |
| 1077 | |
| 1078 | std::any ParserVisitor::visitCreateMessage( |
| 1079 | CelParser::CreateMessageContext* ctx) { |
| 1080 | std::vector<std::string> parts; |
| 1081 | parts.reserve(ctx->ids.size()); |
| 1082 | for (const auto* id : ctx->ids) { |
| 1083 | parts.push_back(id->getText()); |
| 1084 | } |
| 1085 | std::string name; |
| 1086 | if (ctx->leadingDot) { |
| 1087 | name.push_back('.'); |
| 1088 | name.append(absl::StrJoin(parts, ".")); |
| 1089 | } else { |
| 1090 | name = absl::StrJoin(parts, "."); |
| 1091 | } |
| 1092 | int64_t obj_id = factory_.NextId(SourceRangeFromToken(ctx->op)); |
| 1093 | std::vector<StructExprField> fields; |
| 1094 | if (ctx->entries) { |
| 1095 | fields = visitFields(ctx->entries); |
| 1096 | } |
| 1097 | return ExprToAny( |
| 1098 | factory_.NewStruct(obj_id, std::move(name), std::move(fields))); |
| 1099 | } |
| 1100 | |
| 1101 | std::any ParserVisitor::visitFieldInitializerList( |
| 1102 | CelParser::FieldInitializerListContext* ctx) { |