| 4460 | } |
| 4461 | |
| 4462 | void Jakt::parser::Parser::parse_export(Jakt::parser::ParsedNamespace& parent) { |
| 4463 | { |
| 4464 | Jakt::lexer::Token __jakt_tmp10 = this->current(); |
| 4465 | if (__jakt_tmp10.__jakt_init_index() == 1 /* QuotedString */){ |
| 4466 | ByteString const filename = __jakt_tmp10.as.QuotedString.quote; |
| 4467 | Jakt::utility::Span const filename_span = __jakt_tmp10.as.QuotedString.span; |
| 4468 | this->index++; |
| 4469 | Jakt::parser::ParsedExport result = Jakt::parser::ParsedExport(Jakt::parser::ParsedName(filename,filename_span),DynamicArray<JaktInternal::DynamicArray<Jakt::parser::ParsedName>>::create_with({})); |
| 4470 | if (this->current().__jakt_init_index() == 9 /* LCurly */){ |
| 4471 | this->index++; |
| 4472 | bool has_doublecolon = false; |
| 4473 | JaktInternal::DynamicArray<Jakt::parser::ParsedName> current_ns = DynamicArray<Jakt::parser::ParsedName>::create_with({}); |
| 4474 | for (;;){ |
| 4475 | {auto&& __jakt_match_variant = this->current(); |
| 4476 | switch(__jakt_match_variant.__jakt_init_index()) { |
| 4477 | case 55 /* Eol */:{ |
| 4478 | this->index++; |
| 4479 | continue; |
| 4480 | } |
| 4481 | goto __jakt_label_23;case 10 /* RCurly */:{ |
| 4482 | this->index++; |
| 4483 | break; |
| 4484 | } |
| 4485 | goto __jakt_label_23;case 3 /* Identifier */: { |
| 4486 | auto&& __jakt_match_value = __jakt_match_variant.as.Identifier;ByteString const& name = __jakt_match_value.name; |
| 4487 | Jakt::utility::Span const& span = __jakt_match_value.span; |
| 4488 | { |
| 4489 | if ((!current_ns.is_empty()) && (!has_doublecolon)){ |
| 4490 | this->error(ByteString::from_utf8_without_validation("Expected ',' between exported names"sv),span); |
| 4491 | result.names.push(current_ns); |
| 4492 | current_ns = DynamicArray<Jakt::parser::ParsedName>::create_with({}); |
| 4493 | } |
| 4494 | current_ns.push(Jakt::parser::ParsedName(name,span)); |
| 4495 | has_doublecolon = false; |
| 4496 | this->index++; |
| 4497 | continue; |
| 4498 | } |
| 4499 | goto __jakt_label_23;};/*case end*/ |
| 4500 | case 6 /* ColonColon */: { |
| 4501 | auto&& __jakt_match_value = __jakt_match_variant.as.ColonColon;Jakt::utility::Span const& span = __jakt_match_value.value; |
| 4502 | { |
| 4503 | if (current_ns.is_empty()){ |
| 4504 | this->error(ByteString::from_utf8_without_validation("Expected name before '::'"sv),span); |
| 4505 | } |
| 4506 | has_doublecolon = true; |
| 4507 | this->index++; |
| 4508 | continue; |
| 4509 | } |
| 4510 | goto __jakt_label_23;};/*case end*/ |
| 4511 | case 52 /* Comma */: { |
| 4512 | auto&& __jakt_match_value = __jakt_match_variant.as.Comma;Jakt::utility::Span const& span = __jakt_match_value.value; |
| 4513 | { |
| 4514 | if (current_ns.is_empty() || has_doublecolon){ |
| 4515 | this->error(ByteString::from_utf8_without_validation("Expected name before ','"sv),span); |
| 4516 | } |
| 4517 | else { |
| 4518 | result.names.push(current_ns); |
| 4519 | current_ns = DynamicArray<Jakt::parser::ParsedName>::create_with({}); |
no test coverage detected