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

Method process_empty_brackets

sources/compiler/lexer.cpp:522–613  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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_:

Callers

nothing calls this directly

Calls 6

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

Tested by

no test coverage detected