| 520 | } |
| 521 | |
| 522 | void compiler_type::process_empty_brackets(std::deque<token_base *> &tokens) |
| 523 | { |
| 524 | if (tokens.empty()) |
| 525 | throw compile_error("Received empty token buffer."); |
| 526 | std::deque<token_base *> oldt; |
| 527 | std::swap(tokens, oldt); |
| 528 | tokens.clear(); |
| 529 | std::deque<int> blist_stack; |
| 530 | bool empty_bracket = false; |
| 531 | auto insert_bracket = [&]() { |
| 532 | switch (blist_stack.front()) { |
| 533 | case 1: |
| 534 | tokens.push_back(new token_signal(signal_types::slb_)); |
| 535 | break; |
| 536 | case 2: |
| 537 | tokens.push_back(new token_signal(signal_types::mlb_)); |
| 538 | break; |
| 539 | case 3: |
| 540 | tokens.push_back(new token_signal(signal_types::llb_)); |
| 541 | break; |
| 542 | } |
| 543 | }; |
| 544 | for (auto &ptr : oldt) { |
| 545 | if (ptr->get_type() == token_types::signal) { |
| 546 | switch (static_cast<token_signal *>(ptr)->get_signal()) { |
| 547 | default: |
| 548 | break; |
| 549 | case signal_types::slb_: |
| 550 | if (empty_bracket) |
| 551 | insert_bracket(); |
| 552 | blist_stack.push_front(1); |
| 553 | empty_bracket = true; |
| 554 | continue; |
| 555 | case signal_types::mlb_: |
| 556 | if (empty_bracket) |
| 557 | insert_bracket(); |
| 558 | blist_stack.push_front(2); |
| 559 | empty_bracket = true; |
| 560 | continue; |
| 561 | case signal_types::llb_: |
| 562 | if (empty_bracket) |
| 563 | insert_bracket(); |
| 564 | blist_stack.push_front(3); |
| 565 | empty_bracket = true; |
| 566 | continue; |
| 567 | case signal_types::srb_: |
| 568 | if (blist_stack.empty()) |
| 569 | throw compile_error("Parentheses do not match."); |
| 570 | if (blist_stack.front() != 1) |
| 571 | throw compile_error("The parentheses type does not match.(Request Small Bracket)"); |
| 572 | blist_stack.pop_front(); |
| 573 | if (empty_bracket) { |
| 574 | empty_bracket = false; |
| 575 | tokens.push_back(new token_signal(signal_types::esb_)); |
| 576 | continue; |
| 577 | } |
| 578 | break; |
| 579 | case signal_types::mrb_: |
nothing calls this directly
no test coverage detected