// File: /workspace/github_cpp_makefile_star2_O2/ArashPartow[P]exprtk/./exprtk.hpp
// Function: exprtk::parser<double>::parse_multi_switch_statement()
inline expression_node_ptr parse_multi_switch_statement()
      {
         std::vector<expression_node_ptr> arg_list;

         if (!details::imatch(current_token().value,"[*]"))
         {
            set_error(make_error(
               parser_error::e_syntax,
               current_token(),
               "ERR098 - Expected token '[*]'",
               exprtk_error_location));

            return error_node();
         }

         scoped_vec_delete<expression_node_t> svd((*this), arg_list);

         next_token();

         if (!token_is(token_t::e_lcrlbracket))
         {
            set_error(make_error(
               parser_error::e_syntax,
               current_token(),
               "ERR099 - Expected '{' for call to [*] statement",
               exprtk_error_location));

            return error_node();
         }

         for ( ; ; )
         {
            if (!details::imatch("case",current_token().value))
            {
               set_error(make_error(
                  parser_error::e_syntax,
                  current_token(),
                  "ERR100 - Expected a 'case' statement for multi-switch",
                  exprtk_error_location));

               return error_node();
            }

            next_token();

            expression_node_ptr condition = parse_expression();

            if (0 == condition)
               return error_node();

            if (!token_is(token_t::e_colon))
            {
               set_error(make_error(
                  parser_error::e_syntax,
                  current_token(),
                  "ERR101 - Expected ':' for case of [*] statement",
                  exprtk_error_location));

               return error_node();
            }

            expression_node_ptr consequent =
               (token_is(token_t::e_lcrlbracket,prsrhlpr_t::e_hold)) ?
               parse_multi_sequence("multi-switch-consequent") :
               parse_expression();

            if (0 == consequent)
               return error_node();

            if (!token_is(token_t::e_eof))
            {
               set_error(make_error(
                  parser_error::e_syntax,
                  current_token(),
                  "ERR102 - Expected ';' at end of case for [*] statement",
                  exprtk_error_location));

               return error_node();
            }

            // Can we optimise away the case statement?
            if (is_constant_node(condition) && is_false(condition))
            {
               free_node(node_allocator_, condition );
               free_node(node_allocator_, consequent);
            }
            else
            {
               arg_list.push_back(condition );
               arg_list.push_back(consequent);
            }

            if (token_is(token_t::e_rcrlbracket,prsrhlpr_t::e_hold))
            {
               break;
            }
         }

         if (!token_is(token_t::e_rcrlbracket))
         {
            set_error(make_error(
               parser_error::e_syntax,
               current_token(),
               "ERR103 - Expected '}' at end of [*] statement",
               exprtk_error_location));

            return error_node();
         }

         const expression_node_ptr result = expression_generator_.multi_switch_statement(arg_list);

         svd.delete_ptr = (0 == result);

         return result;
      }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x168, %rsp            # imm = 0x168
movq %rdi, %rbx
xorpd %xmm0, %xmm0
movapd %xmm0, 0x90(%rsp)
andq $0x0, 0xa0(%rsp)
leaq 0xe103a(%rip), %rsi     # 0x2e8547
leaq 0xc0(%rsp), %rdi
leaq 0x20(%rsp), %rdx
callq 0x127016
leaq 0x70(%rbx), %rax
movq %rax, 0x18(%rsp)
leaq 0x78(%rbx), %r15
leaq 0xc0(%rsp), %r14
movq %r15, %rdi
movq %r14, %rsi
callq 0x1fbcc5
movl %eax, %ebp
movq %r14, %rdi
callq 0x118648
testb %bpl, %bpl
je 0x207793
movb $0x1, 0xa8(%rsp)
movq %rbx, 0xb0(%rsp)
leaq 0x90(%rsp), %rax
movq %rax, 0xb8(%rsp)
movq %rbx, %rdi
callq 0x1f6d68
leaq 0xc0(%rsp), %rsi
movl $0x7b, (%rsi)
pushq $0x1
popq %rdx
movq %rbx, %rdi
callq 0x1fae6e
testb %al, %al
je 0x207839
leaq 0x290(%rbx), %rax
movq %rax, 0x88(%rsp)
leaq 0xc0(%rsp), %rbp
leaq 0x20(%rsp), %r14
pushq $0x1
popq %r13
movq %rbp, %rdi
leaq 0xcbc51(%rip), %rsi     # 0x2d3216
movq %r14, %rdx
callq 0x127016
movq %rbp, %rdi
movq %r15, %rsi
callq 0x1fbcc5
movl %eax, %r12d
movq %rbp, %rdi
callq 0x118648
testb %r12b, %r12b
je 0x207906
movq %rbx, %rdi
callq 0x1f6d68
movq %rbx, %rdi
xorl %esi, %esi
callq 0x1f9016
movq %rax, 0x8(%rsp)
testq %rax, %rax
je 0x2078d5
movl $0x3a, 0xc0(%rsp)
movq %rbx, %rdi
movq %rbp, %rsi
movl %r13d, %edx
callq 0x1fae6e
testb %al, %al
je 0x20797c
movl $0x7b, 0x20(%rsp)
movq %rbx, %rdi
movq %r14, %rsi
xorl %edx, %edx
callq 0x1fae6e
testb %al, %al
je 0x207674
movq %rbp, %rdi
leaq 0xd2daa(%rip), %rsi     # 0x2da3fa
leaq 0x40(%rsp), %rdx
callq 0x127016
movq %rbx, %rdi
movq %rbp, %rsi
xorl %edx, %edx
callq 0x206ecc
movq %rax, %r12
movq %rbp, %rdi
callq 0x118648
jmp 0x207681
movq %rbx, %rdi
xorl %esi, %esi
callq 0x1f9016
movq %rax, %r12
movq %r12, 0x80(%rsp)
testq %r12, %r12
je 0x2078d5
movl $0x6, 0xc0(%rsp)
movq %rbx, %rdi
movq %rbp, %rsi
movl %r13d, %edx
callq 0x1fae6e
testb %al, %al
je 0x2079f5
movq 0x8(%rsp), %rdi
callq 0x208267
testb %al, %al
je 0x207701
movq 0x8(%rsp), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
ucomisd 0xc6bd4(%rip), %xmm0    # 0x2ce2a8
jne 0x207701
jp 0x207701
movq 0x88(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x1ad9c8
movq 0x88(%rsp), %rdi
leaq 0x80(%rsp), %rsi
callq 0x1ad9c8
jmp 0x207728
leaq 0x90(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x1fadc0
leaq 0x90(%rsp), %rdi
leaq 0x80(%rsp), %rsi
callq 0x1fadc0
movl $0x7d, 0xc0(%rsp)
movq %rbx, %rdi
movq %rbp, %rsi
xorl %edx, %edx
callq 0x1fae6e
testb %al, %al
je 0x2075bb
leaq 0xc0(%rsp), %rsi
movl $0x7d, (%rsi)
pushq $0x1
popq %rdx
movq %rbx, %rdi
callq 0x1fae6e
testb %al, %al
je 0x207a6b
addq $0x220, %rbx            # imm = 0x220
leaq 0x90(%rsp), %rsi
movq %rbx, %rdi
callq 0x208294
movq %rax, %rbx
testq %rax, %rax
sete 0xa8(%rsp)
jmp 0x2078d7
leaq 0xd2bac(%rip), %rsi     # 0x2da346
leaq 0x20(%rsp), %rdi
leaq 0xa8(%rsp), %rdx
callq 0x127016
leaq 0x60(%rsp), %rdi
movl $0x6ac2, %esi           # imm = 0x6AC2
callq 0x1f7a3c
leaq 0xd2439(%rip), %rsi     # 0x2d9bfb
leaq 0x40(%rsp), %rdi
leaq 0x60(%rsp), %rdx
callq 0x1b4349
leaq 0xc0(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x20(%rsp), %rcx
leaq 0x40(%rsp), %r8
movq 0x18(%rsp), %rdx
callq 0x1f7341
addq $0x308, %rbx            # imm = 0x308
leaq 0xc0(%rsp), %rsi
movq %rbx, %rdi
callq 0x1f76ce
leaq 0xc0(%rsp), %rdi
callq 0x1f5c4c
leaq 0x40(%rsp), %rdi
callq 0x118648
leaq 0x60(%rsp), %rdi
callq 0x118648
leaq 0x20(%rsp), %rdi
callq 0x118648
xorl %ebx, %ebx
jmp 0x2078e4
leaq 0xd2b24(%rip), %rsi     # 0x2da364
leaq 0x20(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0x127016
leaq 0x60(%rsp), %rdi
movl $0x6ad1, %esi           # imm = 0x6AD1
callq 0x1f7a3c
leaq 0xd2396(%rip), %rsi     # 0x2d9bfb
leaq 0x40(%rsp), %rdi
leaq 0x60(%rsp), %rdx
callq 0x1b4349
leaq 0xc0(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x20(%rsp), %rcx
leaq 0x40(%rsp), %r8
movq 0x18(%rsp), %rdx
callq 0x1f7341
addq $0x308, %rbx            # imm = 0x308
leaq 0xc0(%rsp), %rsi
movq %rbx, %rdi
callq 0x1f76ce
leaq 0xc0(%rsp), %rdi
callq 0x1f5c4c
leaq 0x40(%rsp), %rdi
callq 0x118648
leaq 0x60(%rsp), %rdi
callq 0x118648
leaq 0x20(%rsp), %rdi
callq 0x118648
xorl %ebx, %ebx
leaq 0xa8(%rsp), %rdi
callq 0x1fb1b8
leaq 0x90(%rsp), %rdi
callq 0x29e264
movq %rbx, %rax
addq $0x168, %rsp            # imm = 0x168
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0xd2a87(%rip), %rsi     # 0x2da394
leaq 0x20(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0x127016
leaq 0x60(%rsp), %rdi
movl $0x6ade, %esi           # imm = 0x6ADE
callq 0x1f7a3c
leaq 0xd22c9(%rip), %rsi     # 0x2d9bfb
leaq 0x40(%rsp), %rdi
leaq 0x60(%rsp), %rdx
callq 0x1b4349
leaq 0xc0(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x20(%rsp), %rcx
leaq 0x40(%rsp), %r8
movq 0x18(%rsp), %rdx
callq 0x1f7341
addq $0x308, %rbx            # imm = 0x308
leaq 0xc0(%rsp), %rsi
movq %rbx, %rdi
callq 0x1f76ce
jmp 0x2078aa
leaq 0xd2a47(%rip), %rsi     # 0x2da3ca
leaq 0x20(%rsp), %rdi
leaq 0x80(%rsp), %rdx
callq 0x127016
leaq 0x60(%rsp), %rdi
movl $0x6af0, %esi           # imm = 0x6AF0
callq 0x1f7a3c
leaq 0xd2250(%rip), %rsi     # 0x2d9bfb
leaq 0x40(%rsp), %rdi
leaq 0x60(%rsp), %rdx
callq 0x1b4349
leaq 0xc0(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x20(%rsp), %rcx
leaq 0x40(%rsp), %r8
movq 0x18(%rsp), %rdx
callq 0x1f7341
addq $0x308, %rbx            # imm = 0x308
leaq 0xc0(%rsp), %rsi
movq %rbx, %rdi
callq 0x1f76ce
jmp 0x2078aa
leaq 0xd2a16(%rip), %rsi     # 0x2da412
leaq 0x20(%rsp), %rdi
leaq 0x17(%rsp), %rdx
callq 0x127016
leaq 0x60(%rsp), %rdi
movl $0x6b03, %esi           # imm = 0x6B03
callq 0x1f7a3c
leaq 0xd21da(%rip), %rsi     # 0x2d9bfb
leaq 0x40(%rsp), %rdi
leaq 0x60(%rsp), %rdx
callq 0x1b4349
leaq 0xc0(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x20(%rsp), %rcx
leaq 0x40(%rsp), %r8
movq 0x18(%rsp), %rdx
callq 0x1f7341
addq $0x308, %rbx            # imm = 0x308
leaq 0xc0(%rsp), %rsi
movq %rbx, %rdi
callq 0x1f76ce
jmp 0x2078aa
leaq 0xd29d7(%rip), %rsi     # 0x2da449
leaq 0x20(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0x127016
leaq 0x60(%rsp), %rdi
movl $0x6b20, %esi           # imm = 0x6B20
callq 0x1f7a3c
leaq 0xd2164(%rip), %rsi     # 0x2d9bfb
leaq 0x40(%rsp), %rdi
leaq 0x60(%rsp), %rdx
callq 0x1b4349
leaq 0xc0(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x20(%rsp), %rcx
leaq 0x40(%rsp), %r8
movq 0x18(%rsp), %rdx
callq 0x1f7341
addq $0x308, %rbx            # imm = 0x308
leaq 0xc0(%rsp), %rsi
movq %rbx, %rdi
callq 0x1f76ce
jmp 0x2078aa
jmp 0x207b1f
jmp 0x207b31
jmp 0x207b40
jmp 0x207b4f
jmp 0x207bc9
jmp 0x207bc9
jmp 0x207bc9
jmp 0x207b1f
jmp 0x207b31
jmp 0x207b40
jmp 0x207b4f
jmp 0x207bc9
jmp 0x207b1f
jmp 0x207b31
jmp 0x207b40
jmp 0x207b4f
jmp 0x207bc9
jmp 0x207b1f
jmp 0x207b31
jmp 0x207b40
jmp 0x207b4f
jmp 0x207bc9
movq %rax, %rbx
leaq 0xc0(%rsp), %rdi
callq 0x1f5c4c
jmp 0x207b34
movq %rax, %rbx
leaq 0x40(%rsp), %rdi
callq 0x118648
jmp 0x207b43
movq %rax, %rbx
leaq 0x60(%rsp), %rdi
callq 0x118648
jmp 0x207b52
movq %rax, %rbx
leaq 0x20(%rsp), %rdi
jmp 0x207bab
jmp 0x207bc9
movq %rax, %rbx
leaq 0xc0(%rsp), %rdi
callq 0x1f5c4c
jmp 0x207b70
movq %rax, %rbx
leaq 0x40(%rsp), %rdi
callq 0x118648
jmp 0x207b7f
movq %rax, %rbx
leaq 0x60(%rsp), %rdi
callq 0x118648
jmp 0x207b8e
movq %rax, %rbx
leaq 0x20(%rsp), %rdi
callq 0x118648
jmp 0x207bd9
jmp 0x207bc9
jmp 0x207bb6
jmp 0x207bc9
movq %rax, %rbx
leaq 0xc0(%rsp), %rdi
callq 0x118648
jmp 0x207bcc
jmp 0x207bc9
jmp 0x207bc9
movq %rax, %rbx
jmp 0x207bd9
jmp 0x207bc9
jmp 0x207bc9
jmp 0x207bc9
jmp 0x207bc9
jmp 0x207bc9
jmp 0x207bc9
jmp 0x207bc9
movq %rax, %rbx
leaq 0xa8(%rsp), %rdi
callq 0x1fb1b8
leaq 0x90(%rsp), %rdi
callq 0x29e264
movq %rbx, %rdi
callq 0x118360