MCPcopy Create free account
hub / github.com/covscript/covscript / process_brackets

Method process_brackets

sources/compiler/lexer.cpp:615–708  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

613 }
614
615 void compiler_type::process_brackets(std::deque<token_base *> &tokens)
616 {
617 if (tokens.empty())
618 throw compile_error("Received empty token buffer.");
619 process_empty_brackets(tokens);
620 std::deque<token_base *> oldt;
621 std::swap(tokens, oldt);
622 tokens.clear();
623 std::deque<std::deque<token_base *>> blist;
624 std::deque<token_base *> btokens;
625 std::deque<int> blist_stack;
626 for (auto &ptr : oldt) {
627 if (ptr->get_type() == token_types::signal) {
628 switch (static_cast<token_signal *>(ptr)->get_signal()) {
629 default:
630 break;
631 case signal_types::slb_:
632 blist_stack.push_front(1);
633 if (blist_stack.size() == 1)
634 continue;
635 break;
636 case signal_types::mlb_:
637 blist_stack.push_front(2);
638 if (blist_stack.size() == 1)
639 continue;
640 break;
641 case signal_types::llb_:
642 blist_stack.push_front(3);
643 if (blist_stack.size() == 1)
644 continue;
645 break;
646 case signal_types::srb_:
647 if (blist_stack.empty())
648 throw compile_error("Parentheses do not match.");
649 if (blist_stack.front() != 1)
650 throw compile_error("The parentheses type does not match.(Request Small Bracket)");
651 blist_stack.pop_front();
652 if (blist_stack.empty()) {
653 process_brackets(btokens);
654 blist.push_back(btokens);
655 tokens.push_back(new token_sblist(blist));
656 blist.clear();
657 btokens.clear();
658 continue;
659 }
660 break;
661 case signal_types::mrb_:
662 if (blist_stack.empty())
663 throw compile_error("Parentheses do not match.");
664 if (blist_stack.front() != 2)
665 throw compile_error("The parentheses type does not match.(Request Middle Bracket)");
666 blist_stack.pop_front();
667 if (blist_stack.empty()) {
668 process_brackets(btokens);
669 blist.push_back(btokens);
670 tokens.push_back(new token_mblist(blist));
671 blist.clear();
672 btokens.clear();

Callers

nothing calls this directly

Calls 7

compile_errorClass · 0.85
get_signalMethod · 0.80
sizeMethod · 0.80
swapFunction · 0.50
emptyMethod · 0.45
clearMethod · 0.45
get_typeMethod · 0.45

Tested by

no test coverage detected