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

         if (!details::imatch(current_token().value,"switch"))
         {
            set_error(make_error(
               parser_error::e_syntax,
               current_token(),
               "ERR090 - Expected keyword 'switch'",
               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(),
               "ERR091 - Expected '{' for call to switch statement",
               exprtk_error_location));

            return error_node();
         }

         expression_node_ptr default_statement = error_node();

         scoped_expression_delete defstmt_delete((*this), default_statement);

         for ( ; ; )
         {
            if (details::imatch("case",current_token().value))
            {
               next_token();

               expression_node_ptr condition = parse_expression();

               if (0 == condition)
                  return error_node();
               else if (!token_is(token_t::e_colon))
               {
                  set_error(make_error(
                     parser_error::e_syntax,
                     current_token(),
                     "ERR092 - Expected ':' for case of switch statement",
                     exprtk_error_location));

                  free_node(node_allocator_, condition);

                  return error_node();
               }

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

               if (0 == consequent)
               {
                  free_node(node_allocator_, condition);

                  return error_node();
               }
               else if (!token_is(token_t::e_eof))
               {
                  set_error(make_error(
                     parser_error::e_syntax,
                     current_token(),
                     "ERR093 - Expected ';' at end of case for switch statement",
                     exprtk_error_location));

                  free_node(node_allocator_, condition );
                  free_node(node_allocator_, consequent);

                  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);
               }

            }
            else if (details::imatch("default",current_token().value))
            {
               if (0 != default_statement)
               {
                  set_error(make_error(
                     parser_error::e_syntax,
                     current_token(),
                     "ERR094 - Multiple default cases for switch statement",
                     exprtk_error_location));

                  return error_node();
               }

               next_token();

               if (!token_is(token_t::e_colon))
               {
                  set_error(make_error(
                     parser_error::e_syntax,
                     current_token(),
                     "ERR095 - Expected ':' for default of switch statement",
                     exprtk_error_location));

                  return error_node();
               }

               default_statement =
                  (token_is(token_t::e_lcrlbracket,prsrhlpr_t::e_hold)) ?
                  parse_multi_sequence("switch-default"):
                  parse_expression();

               if (0 == default_statement)
                  return error_node();
               else if (!token_is(token_t::e_eof))
               {
                  set_error(make_error(
                     parser_error::e_syntax,
                     current_token(),
                     "ERR096 - Expected ';' at end of default for switch statement",
                     exprtk_error_location));

                  return error_node();
               }
            }
            else if (token_is(token_t::e_rcrlbracket))
               break;
            else
            {
               set_error(make_error(
                  parser_error::e_syntax,
                  current_token(),
                  "ERR097 - Expected '}' at end of switch statement",
                  exprtk_error_location));

               return error_node();
            }
         }

         const bool default_statement_present = (0 != default_statement);

         if (default_statement_present)
         {
            arg_list.push_back(default_statement);
         }
         else
         {
            arg_list.push_back(node_allocator_.allocate_c<literal_node_t>(std::numeric_limits<T>::quiet_NaN()));
         }

         expression_node_ptr result = expression_generator_.switch_statement(arg_list, (0 != default_statement));

         svd.delete_ptr = (0 == result);
         defstmt_delete.delete_ptr = (0 == result);

         return result;
      }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x188, %rsp            # imm = 0x188
movq %rdi, %rbx
xorpd %xmm0, %xmm0
movapd %xmm0, 0x90(%rsp)
andq $0x0, 0xa0(%rsp)
leaq 0xd927e(%rip), %rsi     # 0x2da3c3
leaq 0xe0(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0x127016
leaq 0x70(%rbx), %rax
movq %rax, 0x28(%rsp)
leaq 0x78(%rbx), %rbp
leaq 0xe0(%rsp), %r14
movq %rbp, %rdi
movq %r14, %rsi
callq 0x1fbcc5
movl %eax, %r15d
movq %r14, %rdi
callq 0x118648
testb %r15b, %r15b
je 0x2014f1
movb $0x1, 0xc8(%rsp)
movq %rbx, 0xd0(%rsp)
leaq 0x90(%rsp), %rax
movq %rax, 0xd8(%rsp)
movq %rbx, %rdi
callq 0x1f6d68
leaq 0xe0(%rsp), %rsi
movl $0x7b, (%rsi)
pushq $0x1
popq %rdx
movq %rbx, %rdi
callq 0x1fae6e
testb %al, %al
je 0x201598
leaq 0x50(%rsp), %rax
andq $0x0, (%rax)
movb $0x1, 0xb0(%rsp)
movq %rbx, 0xb8(%rsp)
movq %rax, 0xc0(%rsp)
leaq 0x290(%rbx), %rax
movq %rax, 0x80(%rsp)
leaq 0xe0(%rsp), %r14
leaq 0x8(%rsp), %r12
xorl %r13d, %r13d
movq %r14, %rdi
leaq 0xd1ff8(%rip), %rsi     # 0x2d3216
movq %r12, %rdx
callq 0x127016
movq %r14, %rdi
movq %rbp, %rsi
callq 0x1fbcc5
movl %eax, %r15d
movq %r14, %rdi
callq 0x118648
testb %r15b, %r15b
je 0x2012d3
movq %rbx, %rdi
callq 0x1f6d68
movq %rbx, %rdi
xorl %esi, %esi
callq 0x1f9016
movq %rax, (%rsp)
testq %rax, %rax
je 0x201990
movl $0x3a, 0xe0(%rsp)
movq %rbx, %rdi
movq %r14, %rsi
pushq $0x1
popq %rdx
callq 0x1fae6e
testb %al, %al
je 0x2016f7
movl $0x7b, 0x8(%rsp)
movq %rbx, %rdi
movq %r12, %rsi
xorl %edx, %edx
callq 0x1fae6e
testb %al, %al
je 0x20138e
movq %r14, %rdi
leaq 0xd9154(%rip), %rsi     # 0x2da400
leaq 0x30(%rsp), %rdx
callq 0x127016
movq %rbx, %rdi
movq %r14, %rsi
xorl %edx, %edx
callq 0x206ecc
movq %rax, %r15
movq %r14, %rdi
callq 0x118648
jmp 0x20139b
movq %r14, %rdi
leaq 0xda7de(%rip), %rsi     # 0x2dbabb
movq %r12, %rdx
callq 0x127016
movq %r14, %rdi
movq %rbp, %rsi
callq 0x1fbcc5
movl %eax, %r15d
movq %r14, %rdi
callq 0x118648
testb %r15b, %r15b
je 0x20163f
cmpq $0x0, 0x50(%rsp)
jne 0x201683
movq %rbx, %rdi
callq 0x1f6d68
movl $0x3a, 0xe0(%rsp)
movq %rbx, %rdi
movq %r14, %rsi
pushq $0x1
popq %rdx
callq 0x1fae6e
testb %al, %al
je 0x2017ab
movl $0x7b, 0x8(%rsp)
movq %rbx, %rdi
movq %r12, %rsi
xorl %edx, %edx
callq 0x1fae6e
testb %al, %al
je 0x201444
movq %r14, %rdi
leaq 0xda754(%rip), %rsi     # 0x2dbab4
leaq 0x30(%rsp), %rdx
callq 0x127016
movq %rbx, %rdi
movq %r14, %rsi
xorl %edx, %edx
callq 0x206ecc
movq %rax, 0x50(%rsp)
movq %r14, %rdi
callq 0x118648
movq 0x50(%rsp), %rax
jmp 0x201453
movq %rbx, %rdi
xorl %esi, %esi
callq 0x1f9016
movq %rax, %r15
movq %r15, 0x88(%rsp)
testq %r15, %r15
je 0x20181f
movl $0x6, 0xe0(%rsp)
movq %rbx, %rdi
movq %r14, %rsi
pushq $0x1
popq %rdx
callq 0x1fae6e
testb %al, %al
je 0x20182f
movq (%rsp), %rdi
callq 0x208267
testb %al, %al
je 0x20141a
movq (%rsp), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
ucomisd 0xccebc(%rip), %xmm0    # 0x2ce2a8
jne 0x20141a
jp 0x20141a
movq 0x80(%rsp), %rdi
movq %rsp, %rsi
callq 0x1ad9c8
movq 0x80(%rsp), %rdi
leaq 0x88(%rsp), %rsi
callq 0x1ad9c8
jmp 0x201214
leaq 0x90(%rsp), %rdi
movq %rsp, %rsi
callq 0x1fadc0
leaq 0x90(%rsp), %rdi
leaq 0x88(%rsp), %rsi
callq 0x1fadc0
jmp 0x201214
movq %rbx, %rdi
xorl %esi, %esi
callq 0x1f9016
movq %rax, 0x50(%rsp)
testq %rax, %rax
je 0x201993
movl $0x6, 0xe0(%rsp)
movq %rbx, %rdi
movq %r14, %rsi
pushq $0x1
popq %rdx
callq 0x1fae6e
testb %al, %al
jne 0x201214
leaq 0xda63f(%rip), %rsi     # 0x2dbac3
leaq 0x8(%rsp), %rdi
movq %rsp, %rdx
callq 0x127016
leaq 0x58(%rsp), %rdi
movl $0x6a92, %esi           # imm = 0x6A92
callq 0x1f7a3c
leaq 0xd8754(%rip), %rsi     # 0x2d9bfb
leaq 0x30(%rsp), %rdi
leaq 0x58(%rsp), %rdx
callq 0x1b4349
leaq 0xe0(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x8(%rsp), %rcx
leaq 0x30(%rsp), %r8
movq 0x28(%rsp), %rdx
callq 0x1f7341
addq $0x308, %rbx            # imm = 0x308
leaq 0xe0(%rsp), %rsi
movq %rbx, %rdi
callq 0x1f76ce
jmp 0x201965
leaq 0xda48e(%rip), %rsi     # 0x2db986
leaq 0x8(%rsp), %rdi
leaq 0xc8(%rsp), %rdx
callq 0x127016
leaq 0x58(%rsp), %rdi
movl $0x6a16, %esi           # imm = 0x6A16
callq 0x1f7a3c
leaq 0xd86db(%rip), %rsi     # 0x2d9bfb
leaq 0x30(%rsp), %rdi
leaq 0x58(%rsp), %rdx
callq 0x1b4349
leaq 0xe0(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x8(%rsp), %rcx
leaq 0x30(%rsp), %r8
movq 0x28(%rsp), %rdx
callq 0x1f7341
addq $0x308, %rbx            # imm = 0x308
leaq 0xe0(%rsp), %rsi
movq %rbx, %rdi
callq 0x1f76ce
leaq 0xe0(%rsp), %rdi
callq 0x1f5c4c
leaq 0x30(%rsp), %rdi
callq 0x118648
leaq 0x58(%rsp), %rdi
callq 0x118648
leaq 0x8(%rsp), %rdi
callq 0x118648
xorl %r13d, %r13d
jmp 0x2019ad
leaq 0xda40a(%rip), %rsi     # 0x2db9a9
leaq 0x8(%rsp), %rdi
leaq 0xb0(%rsp), %rdx
callq 0x127016
leaq 0x58(%rsp), %rdi
movl $0x6a25, %esi           # imm = 0x6A25
callq 0x1f7a3c
leaq 0xd8634(%rip), %rsi     # 0x2d9bfb
leaq 0x30(%rsp), %rdi
leaq 0x58(%rsp), %rdx
callq 0x1b4349
leaq 0xe0(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x8(%rsp), %rcx
leaq 0x30(%rsp), %r8
movq 0x28(%rsp), %rdx
callq 0x1f7341
addq $0x308, %rbx            # imm = 0x308
leaq 0xe0(%rsp), %rsi
movq %rbx, %rdi
callq 0x1f76ce
leaq 0xe0(%rsp), %rdi
callq 0x1f5c4c
leaq 0x30(%rsp), %rdi
callq 0x118648
leaq 0x58(%rsp), %rdi
callq 0x118648
leaq 0x8(%rsp), %rdi
callq 0x118648
xorl %r13d, %r13d
jmp 0x2019a0
leaq 0xe0(%rsp), %rsi
movl $0x7d, (%rsi)
pushq $0x1
popq %rdx
movq %rbx, %rdi
callq 0x1fae6e
testb %al, %al
je 0x2018f6
cmpq $0x0, 0x50(%rsp)
je 0x2019cf
leaq 0x90(%rsp), %rdi
leaq 0x50(%rsp), %rsi
callq 0x1fadc0
jmp 0x201a06
leaq 0xda3bf(%rip), %rsi     # 0x2dba49
leaq 0x8(%rsp), %rdi
movq %rsp, %rdx
callq 0x127016
leaq 0x58(%rsp), %rdi
movl $0x6a73, %esi           # imm = 0x6A73
callq 0x1f7a3c
leaq 0xd854e(%rip), %rsi     # 0x2d9bfb
leaq 0x30(%rsp), %rdi
leaq 0x58(%rsp), %rdx
callq 0x1b4349
leaq 0xe0(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x8(%rsp), %rcx
leaq 0x30(%rsp), %r8
movq 0x28(%rsp), %rdx
callq 0x1f7341
addq $0x308, %rbx            # imm = 0x308
leaq 0xe0(%rsp), %rsi
movq %rbx, %rdi
callq 0x1f76ce
jmp 0x201965
leaq 0xda2de(%rip), %rsi     # 0x2db9dc
leaq 0x8(%rsp), %rdi
leaq 0x88(%rsp), %rdx
callq 0x127016
leaq 0x58(%rsp), %rdi
movl $0x6a3e, %esi           # imm = 0x6A3E
callq 0x1f7a3c
leaq 0xd84d5(%rip), %rsi     # 0x2d9bfb
leaq 0x30(%rsp), %rdi
leaq 0x58(%rsp), %rdx
callq 0x1b4349
leaq 0xe0(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x8(%rsp), %rcx
leaq 0x30(%rsp), %r8
movq 0x28(%rsp), %rdx
callq 0x1f7341
addq $0x308, %rbx            # imm = 0x308
leaq 0xe0(%rsp), %rsi
movq %rbx, %rdi
callq 0x1f76ce
leaq 0xe0(%rsp), %rdi
callq 0x1f5c4c
leaq 0x30(%rsp), %rdi
callq 0x118648
leaq 0x58(%rsp), %rdi
callq 0x118648
leaq 0x8(%rsp), %rdi
callq 0x118648
movq %rsp, %rsi
movq 0x80(%rsp), %rdi
callq 0x1ad9c8
jmp 0x201990
leaq 0xda2cc(%rip), %rsi     # 0x2dba7e
leaq 0x8(%rsp), %rdi
movq %rsp, %rdx
callq 0x127016
leaq 0x58(%rsp), %rdi
movl $0x6a80, %esi           # imm = 0x6A80
callq 0x1f7a3c
leaq 0xd8426(%rip), %rsi     # 0x2d9bfb
leaq 0x30(%rsp), %rdi
leaq 0x58(%rsp), %rdx
callq 0x1b4349
leaq 0xe0(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x8(%rsp), %rcx
leaq 0x30(%rsp), %r8
movq 0x28(%rsp), %rdx
callq 0x1f7341
addq $0x308, %rbx            # imm = 0x308
leaq 0xe0(%rsp), %rsi
movq %rbx, %rdi
callq 0x1f76ce
jmp 0x201965
movq %rsp, %r14
movq 0x80(%rsp), %rbx
jmp 0x2018e6
leaq 0xda1d9(%rip), %rsi     # 0x2dba0f
leaq 0x8(%rsp), %rdi
leaq 0x7f(%rsp), %rdx
callq 0x127016
leaq 0x58(%rsp), %rdi
movl $0x6a56, %esi           # imm = 0x6A56
callq 0x1f7a3c
leaq 0x88(%rsp), %r14
leaq 0xd8398(%rip), %rsi     # 0x2d9bfb
leaq 0x30(%rsp), %rdi
leaq 0x58(%rsp), %rdx
callq 0x1b4349
leaq 0xe0(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x8(%rsp), %rcx
leaq 0x30(%rsp), %r8
movq 0x28(%rsp), %rdx
callq 0x1f7341
addq $0x308, %rbx            # imm = 0x308
leaq 0xe0(%rsp), %rsi
movq %rbx, %rdi
callq 0x1f76ce
leaq 0xe0(%rsp), %rdi
callq 0x1f5c4c
leaq 0x30(%rsp), %rdi
callq 0x118648
leaq 0x58(%rsp), %rdi
callq 0x118648
leaq 0x8(%rsp), %rdi
callq 0x118648
movq %rsp, %rsi
movq 0x80(%rsp), %rbx
movq %rbx, %rdi
callq 0x1ad9c8
movq %rbx, %rdi
movq %r14, %rsi
callq 0x1ad9c8
jmp 0x201990
leaq 0xda203(%rip), %rsi     # 0x2dbb00
leaq 0x8(%rsp), %rdi
movq %rsp, %rdx
callq 0x127016
leaq 0x58(%rsp), %rdi
movl $0x6a9f, %esi           # imm = 0x6A9F
callq 0x1f7a3c
leaq 0xd82db(%rip), %rsi     # 0x2d9bfb
leaq 0x30(%rsp), %rdi
leaq 0x58(%rsp), %rdx
callq 0x1b4349
leaq 0xe0(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x8(%rsp), %rcx
leaq 0x30(%rsp), %r8
movq 0x28(%rsp), %rdx
callq 0x1f7341
addq $0x308, %rbx            # imm = 0x308
leaq 0xe0(%rsp), %rsi
movq %rbx, %rdi
callq 0x1f76ce
leaq 0xe0(%rsp), %rdi
callq 0x1f5c4c
leaq 0x30(%rsp), %rdi
callq 0x118648
leaq 0x58(%rsp), %rdi
callq 0x118648
leaq 0x8(%rsp), %rdi
callq 0x118648
xorl %r13d, %r13d
leaq 0xb0(%rsp), %rdi
callq 0x28e1d2
leaq 0xc8(%rsp), %rdi
callq 0x1fb1b8
leaq 0x90(%rsp), %rdi
callq 0x29e264
movq %r13, %rax
addq $0x188, %rsp            # imm = 0x188
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movabsq $0x7ff8000000000000, %rax # imm = 0x7FF8000000000000
leaq 0x8(%rsp), %rsi
movq %rax, (%rsi)
movq 0x80(%rsp), %rdi
callq 0x1ae9f6
leaq 0xe0(%rsp), %rsi
movq %rax, (%rsi)
leaq 0x90(%rsp), %rdi
callq 0x28e1f8
addq $0x220, %rbx            # imm = 0x220
xorl %edx, %edx
cmpq $0x0, 0x50(%rsp)
setne %dl
leaq 0x90(%rsp), %rsi
movq %rbx, %rdi
callq 0x28e0e0
movq %rax, %r13
testq %rax, %rax
sete 0xc8(%rsp)
sete 0xb0(%rsp)
jmp 0x201993
jmp 0x201ba2
jmp 0x201ba2
jmp 0x201a91
jmp 0x201aa5
jmp 0x201ab9
jmp 0x201ba2
jmp 0x201ac8
jmp 0x201ba2
jmp 0x201a91
jmp 0x201aa5
jmp 0x201ab9
jmp 0x201ac8
jmp 0x201ba2
jmp 0x201a91
jmp 0x201aa5
jmp 0x201ab9
jmp 0x201ac8
jmp 0x201ba2
jmp 0x201a91
jmp 0x201aa5
jmp 0x201ab9
jmp 0x201ac8
jmp 0x201ba2
jmp 0x201ba2
jmp 0x201a91
jmp 0x201aa5
jmp 0x201ab9
movq %rax, %rbx
leaq 0xe0(%rsp), %rdi
callq 0x1f5c4c
jmp 0x201aa8
jmp 0x201ac8
movq %rax, %rbx
leaq 0x30(%rsp), %rdi
callq 0x118648
jmp 0x201abc
jmp 0x201ba2
movq %rax, %rbx
leaq 0x58(%rsp), %rdi
callq 0x118648
jmp 0x201acb
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
jmp 0x201b36
jmp 0x201ba2
jmp 0x201ba2
jmp 0x201ba2
movq %rax, %rbx
leaq 0xe0(%rsp), %rdi
callq 0x1f5c4c
jmp 0x201af6
movq %rax, %rbx
leaq 0x30(%rsp), %rdi
callq 0x118648
jmp 0x201b05
movq %rax, %rbx
leaq 0x58(%rsp), %rdi
callq 0x118648
jmp 0x201b14
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0x118648
jmp 0x201bb2
jmp 0x201b84
jmp 0x201b2b
jmp 0x201ba2
jmp 0x201ba2
movq %rax, %rbx
leaq 0xe0(%rsp), %rdi
callq 0x118648
jmp 0x201ba5
jmp 0x201ba2
jmp 0x201ba2
movq %rax, %rbx
leaq 0xe0(%rsp), %rdi
callq 0x1f5c4c
jmp 0x201b56
movq %rax, %rbx
leaq 0x30(%rsp), %rdi
callq 0x118648
jmp 0x201b65
movq %rax, %rbx
leaq 0x58(%rsp), %rdi
callq 0x118648
jmp 0x201b74
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0x118648
jmp 0x201bbf
jmp 0x201b84
jmp 0x201b99
movq %rax, %rbx
jmp 0x201bb2
jmp 0x201ba2
jmp 0x201ba2
jmp 0x201ba2
jmp 0x201ba2
jmp 0x201ba2
jmp 0x201ba2
jmp 0x201ba2
jmp 0x201ba2
movq %rax, %rbx
jmp 0x201bbf
jmp 0x201ba2
jmp 0x201ba2
movq %rax, %rbx
leaq 0xb0(%rsp), %rdi
callq 0x28e1d2
leaq 0xc8(%rsp), %rdi
callq 0x1fb1b8
leaq 0x90(%rsp), %rdi
callq 0x29e264
movq %rbx, %rdi
callq 0x118360