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

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

         lexer::token begin_token;
         lexer::token end_token;

         for ( ; ; )
         {
            state_.side_effect_present = false;

            begin_token = current_token();

            expression_node_ptr arg = parse_expression();

            if (0 == arg)
            {
               if (error_list_.empty())
               {
                  set_error(make_error(
                     parser_error::e_syntax,
                     current_token(),
                     "ERR009 - Invalid expression encountered",
                     exprtk_error_location));
               }

               return error_node();
            }
            else
            {
               arg_list.push_back(arg);

               side_effect_list.push_back(state_.side_effect_present);

               end_token = current_token();

               const std::string sub_expr = construct_subexpr(begin_token, end_token);

               exprtk_debug(("parse_corpus(%02d) Subexpr: %s\n",
                             static_cast<int>(arg_list.size() - 1),
                             sub_expr.c_str()));

               exprtk_debug(("parse_corpus(%02d) - Side effect present: %s\n",
                             static_cast<int>(arg_list.size() - 1),
                             state_.side_effect_present ? "true" : "false"));

               exprtk_debug(("-------------------------------------------------\n"));
            }

            if (token_is(token_t::e_eof,prsrhlpr_t::e_hold))
            {
               if (lexer().finished())
                  break;
               else
                  next_token();
            }
            else if (
                      !settings_.commutative_check_enabled() &&
                      (
                        current_token().type == token_t::e_symbol ||
                        current_token().type == token_t::e_number ||
                        current_token().type == token_t::e_string ||
                        token_is_bracket(prsrhlpr_t::e_hold)
                      )
                    )
            {
               set_error(make_error(
                  parser_error::e_syntax,
                  current_token(),
                  "ERR010 - Invalid syntax '" + current_token().value  + "' possible missing operator or context",
                  exprtk_error_location));

               return error_node();
            }
         }

         if (
              !arg_list.empty() &&
              is_return_node(arg_list.back())
            )
         {
            dec_.final_stmt_return_ = true;
         }

         const expression_node_ptr result = simplify(arg_list,side_effect_list);

         svd.delete_ptr = (0 == result);

         return result;
      }

// Assembly:
subq $0x3d8, %rsp            # imm = 0x3D8
movq %rdi, 0x3c8(%rsp)
movq 0x3c8(%rsp), %rax
movq %rax, 0x78(%rsp)
leaq 0x3b0(%rsp), %rdi
movq %rdi, 0x80(%rsp)
callq 0x3798f0
leaq 0x388(%rsp), %rdi
callq 0x379900
movq 0x78(%rsp), %rsi
movq 0x80(%rsp), %rdx
leaq 0x370(%rsp), %rdi
callq 0x379910
jmp 0x37371a
leaq 0x330(%rsp), %rdi
callq 0x251250
jmp 0x373729
leaq 0x300(%rsp), %rdi
callq 0x251250
jmp 0x373738
jmp 0x37373a
movq 0x78(%rsp), %rdi
movb $0x0, 0x3ac(%rdi)
callq 0x373e90
movq %rax, 0x70(%rsp)
jmp 0x373752
movq 0x70(%rsp), %rsi
leaq 0x330(%rsp), %rdi
callq 0x259470
jmp 0x373766
movq 0x78(%rsp), %rdi
xorl %esi, %esi
callq 0x379940
movq %rax, 0x68(%rsp)
jmp 0x373779
movq 0x68(%rsp), %rax
movq %rax, 0x2f8(%rsp)
xorl %eax, %eax
cmpq 0x2f8(%rsp), %rax
jne 0x3739d9
movq 0x78(%rsp), %rdi
addq $0x308, %rdi            # imm = 0x308
callq 0x3741c0
testb $0x1, %al
jne 0x3737b0
jmp 0x3739bc
movq 0x78(%rsp), %rdi
callq 0x373e90
movq %rax, 0x60(%rsp)
jmp 0x3737c1
leaq 0x22f(%rsp), %rdi
movq %rdi, 0x58(%rsp)
callq 0x11b6f0
movq 0x58(%rsp), %rdx
leaq 0x233936(%rip), %rsi    # 0x5a7115
leaq 0x230(%rsp), %rdi
callq 0x134520
jmp 0x3737ee
leaq 0x1e8(%rsp), %rdi
movl $0x6204, %esi           # imm = 0x6204
callq 0x371f20
jmp 0x373802
leaq 0x23370a(%rip), %rsi    # 0x5a6f13
leaq 0x208(%rsp), %rdi
leaq 0x1e8(%rsp), %rdx
callq 0x29dd70
jmp 0x373820
movq 0x60(%rsp), %rdx
leaq 0x250(%rsp), %rdi
movl $0x1, %esi
leaq 0x230(%rsp), %rcx
leaq 0x208(%rsp), %r8
callq 0x3741e0
jmp 0x373849
movq 0x78(%rsp), %rdi
leaq 0x250(%rsp), %rsi
callq 0x371e40
jmp 0x37385d
leaq 0x250(%rsp), %rdi
callq 0x371330
leaq 0x208(%rsp), %rdi
callq 0x11b838
leaq 0x1e8(%rsp), %rdi
callq 0x11b838
leaq 0x230(%rsp), %rdi
callq 0x11b838
leaq 0x22f(%rsp), %rdi
callq 0x11b820
jmp 0x3739bc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x368(%rsp)
movl %eax, 0x364(%rsp)
jmp 0x373e5f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x368(%rsp)
movl %eax, 0x364(%rsp)
jmp 0x373e52
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x368(%rsp)
movl %eax, 0x364(%rsp)
jmp 0x373e45
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x368(%rsp)
movl %eax, 0x364(%rsp)
jmp 0x373e38
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x368(%rsp)
movl %eax, 0x364(%rsp)
jmp 0x3739aa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x368(%rsp)
movl %eax, 0x364(%rsp)
jmp 0x37399d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x368(%rsp)
movl %eax, 0x364(%rsp)
jmp 0x373990
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x368(%rsp)
movl %eax, 0x364(%rsp)
jmp 0x373983
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x368(%rsp)
movl %eax, 0x364(%rsp)
leaq 0x250(%rsp), %rdi
callq 0x371330
leaq 0x208(%rsp), %rdi
callq 0x11b838
leaq 0x1e8(%rsp), %rdi
callq 0x11b838
leaq 0x230(%rsp), %rdi
callq 0x11b838
leaq 0x22f(%rsp), %rdi
callq 0x11b820
jmp 0x373e38
callq 0x2821f0
movq %rax, 0x3d0(%rsp)
movl $0x1, 0x1e4(%rsp)
jmp 0x373de7
leaq 0x3b0(%rsp), %rdi
leaq 0x2f8(%rsp), %rsi
callq 0x37d3b0
jmp 0x3739f0
movq 0x78(%rsp), %rax
movzbl 0x3ac(%rax), %esi
andl $0x1, %esi
leaq 0x388(%rsp), %rdi
callq 0x37d420
jmp 0x373a0e
movq 0x78(%rsp), %rdi
callq 0x373e90
movq %rax, 0x50(%rsp)
jmp 0x373a1f
movq 0x50(%rsp), %rsi
leaq 0x300(%rsp), %rdi
callq 0x259470
jmp 0x373a33
movq 0x78(%rsp), %rsi
leaq 0x1c0(%rsp), %rdi
leaq 0x330(%rsp), %rdx
leaq 0x300(%rsp), %rcx
movl $0x1, %r8d
callq 0x37d500
jmp 0x373a5d
leaq 0x1c0(%rsp), %rdi
callq 0x11b838
movq 0x78(%rsp), %rdi
movl $0x6, 0x1bc(%rsp)
leaq 0x1bc(%rsp), %rsi
xorl %edx, %edx
callq 0x37d640
movb %al, 0x4f(%rsp)
jmp 0x373a8f
movb 0x4f(%rsp), %al
testb $0x1, %al
jne 0x373a99
jmp 0x373ad3
movq 0x78(%rsp), %rdi
callq 0x3723b0
movq %rax, %rdi
callq 0x37d690
movb %al, 0x4e(%rsp)
jmp 0x373ab1
movb 0x4e(%rsp), %al
testb $0x1, %al
jne 0x373abb
jmp 0x373ac0
jmp 0x373d44
movq 0x78(%rsp), %rdi
callq 0x373690
jmp 0x373acc
jmp 0x373ace
jmp 0x373d3f
movq 0x78(%rsp), %rdi
addq $0xd0, %rdi
callq 0x25ee40
testb $0x1, %al
jne 0x373d3d
movq 0x78(%rsp), %rdi
callq 0x373e90
movq %rax, 0x40(%rsp)
jmp 0x373afd
movq 0x40(%rsp), %rax
cmpl $0x8, (%rax)
je 0x373b5c
movq 0x78(%rsp), %rdi
callq 0x373e90
movq %rax, 0x38(%rsp)
jmp 0x373b18
movq 0x38(%rsp), %rax
cmpl $0x7, (%rax)
je 0x373b5c
movq 0x78(%rsp), %rdi
callq 0x373e90
movq %rax, 0x30(%rsp)
jmp 0x373b33
movq 0x30(%rsp), %rax
cmpl $0x9, (%rax)
je 0x373b5c
movq 0x78(%rsp), %rdi
xorl %esi, %esi
callq 0x37d6d0
movb %al, 0x2f(%rsp)
jmp 0x373b4f
movb 0x2f(%rsp), %al
testb $0x1, %al
jne 0x373b5c
jmp 0x373d3d
movq 0x78(%rsp), %rdi
callq 0x373e90
movq %rax, 0x20(%rsp)
jmp 0x373b6d
movq 0x78(%rsp), %rdi
callq 0x373e90
movq %rax, 0x18(%rsp)
jmp 0x373b7e
movq 0x18(%rsp), %rdx
addq $0x8, %rdx
leaq 0x2335af(%rip), %rsi    # 0x5a713d
leaq 0xd0(%rsp), %rdi
callq 0x3784f0
jmp 0x373b9d
leaq 0x2335b3(%rip), %rdx    # 0x5a7157
leaq 0xf0(%rsp), %rdi
leaq 0xd0(%rsp), %rsi
callq 0x29dc30
jmp 0x373bbb
leaq 0x90(%rsp), %rdi
movl $0x6233, %esi           # imm = 0x6233
callq 0x371f20
jmp 0x373bcf
leaq 0x23333d(%rip), %rsi    # 0x5a6f13
leaq 0xb0(%rsp), %rdi
leaq 0x90(%rsp), %rdx
callq 0x29dd70
jmp 0x373bed
movq 0x20(%rsp), %rdx
leaq 0x110(%rsp), %rdi
movl $0x1, %esi
leaq 0xf0(%rsp), %rcx
leaq 0xb0(%rsp), %r8
callq 0x3741e0
jmp 0x373c16
movq 0x78(%rsp), %rdi
leaq 0x110(%rsp), %rsi
callq 0x371e40
jmp 0x373c2a
leaq 0x110(%rsp), %rdi
callq 0x371330
leaq 0xb0(%rsp), %rdi
callq 0x11b838
leaq 0x90(%rsp), %rdi
callq 0x11b838
leaq 0xf0(%rsp), %rdi
callq 0x11b838
leaq 0xd0(%rsp), %rdi
callq 0x11b838
callq 0x2821f0
movq %rax, 0x3d0(%rsp)
movl $0x1, 0x1e4(%rsp)
jmp 0x373de7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x368(%rsp)
movl %eax, 0x364(%rsp)
jmp 0x373d2b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x368(%rsp)
movl %eax, 0x364(%rsp)
jmp 0x373d1e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x368(%rsp)
movl %eax, 0x364(%rsp)
jmp 0x373d11
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x368(%rsp)
movl %eax, 0x364(%rsp)
jmp 0x373d04
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x368(%rsp)
movl %eax, 0x364(%rsp)
leaq 0x110(%rsp), %rdi
callq 0x371330
leaq 0xb0(%rsp), %rdi
callq 0x11b838
leaq 0x90(%rsp), %rdi
callq 0x11b838
leaq 0xf0(%rsp), %rdi
callq 0x11b838
leaq 0xd0(%rsp), %rdi
callq 0x11b838
jmp 0x373e38
jmp 0x373d3f
jmp 0x37373a
leaq 0x3b0(%rsp), %rdi
callq 0x37d750
testb $0x1, %al
jne 0x373d86
leaq 0x3b0(%rsp), %rdi
callq 0x37d7e0
movq (%rax), %rdi
callq 0x37d7a0
movb %al, 0x17(%rsp)
jmp 0x373d70
movb 0x17(%rsp), %al
testb $0x1, %al
jne 0x373d7a
jmp 0x373d86
movq 0x78(%rsp), %rax
movb $0x1, 0x2bc(%rax)
movq 0x78(%rsp), %rdi
leaq 0x3b0(%rsp), %rsi
leaq 0x388(%rsp), %rdx
xorl %ecx, %ecx
callq 0x37d820
movq %rax, 0x8(%rsp)
jmp 0x373da9
movq 0x8(%rsp), %rax
movq %rax, 0x88(%rsp)
xorl %eax, %eax
cmpq 0x88(%rsp), %rax
sete %al
andb $0x1, %al
movb %al, 0x370(%rsp)
movq 0x88(%rsp), %rax
movq %rax, 0x3d0(%rsp)
movl $0x1, 0x1e4(%rsp)
leaq 0x300(%rsp), %rdi
callq 0x2512e0
leaq 0x330(%rsp), %rdi
callq 0x2512e0
leaq 0x370(%rsp), %rdi
callq 0x37dec0
leaq 0x388(%rsp), %rdi
callq 0x37df80
leaq 0x3b0(%rsp), %rdi
callq 0x37df90
movq 0x3d0(%rsp), %rax
addq $0x3d8, %rsp            # imm = 0x3D8
retq
leaq 0x300(%rsp), %rdi
callq 0x2512e0
leaq 0x330(%rsp), %rdi
callq 0x2512e0
leaq 0x370(%rsp), %rdi
callq 0x37dec0
leaq 0x388(%rsp), %rdi
callq 0x37df80
leaq 0x3b0(%rsp), %rdi
callq 0x37df90
movq 0x368(%rsp), %rdi
callq 0x11b4e0
nopw %cs:(%rax,%rax)