// File: ArashPartow[P]exprtk/./exprtk.hpp
// Function: exprtk::parser<double>::parse_vector()
inline expression_node_ptr parse_vector()
      {
         const std::string vector_name = current_token().value;

         vector_holder_ptr vec = vector_holder_ptr(0);

         const scope_element& se = sem_.get_active_element(vector_name);

         if (
              !details::imatch(se.name, vector_name) ||
              (se.depth > state_.scope_depth)   ||
              (scope_element::e_vector != se.type)
            )
         {
            typedef typename symtab_store::vector_context vec_ctxt_t;
            vec_ctxt_t vec_ctx = symtab_store_.get_vector_context(vector_name);

            if (0 == vec_ctx.vector_holder)
            {
               set_error(make_error(
                  parser_error::e_syntax,
                  current_token(),
                  "ERR125 - Symbol '" + vector_name + " not a vector",
                  exprtk_error_location));

               return error_node();
            }

            assert(0 != vec_ctx.vector_holder);
            assert(0 != vec_ctx.symbol_table );

            vec = vec_ctx.vector_holder;

            if (symbol_table_t::e_immutable == vec_ctx.symbol_table->mutability())
            {
               lodge_immutable_symbol(
                  current_token(),
                  make_memory_range(vec->data(), vec->size()));
            }
         }
         else
         {
            vec = se.vec_node;
         }

         assert(0 != vec);

         next_token();

         if (!token_is(token_t::e_lsqrbracket))
         {
            return node_allocator_.allocate<vector_node_t>(vec);
         }
         else if (token_is(token_t::e_rsqrbracket))
         {
            return (vec->rebaseable()) ?
               node_allocator_.allocate<vector_size_node_t>(vec) :
               expression_generator_(T(vec->size()));
         }

         expression_node_ptr index_expr = parse_vector_index(vector_name);

         if (index_expr)
         {
            expression_node_ptr vec_node = node_allocator_.allocate<vector_node_t>(vec);

            return synthesize_vector_element(vector_name, vec, vec_node, index_expr);
         }

         return error_node();
      }

// Assembly:
subq $0x288, %rsp            # imm = 0x288
movq %rdi, 0x278(%rsp)
movq 0x278(%rsp), %rdi
movq %rdi, 0xa8(%rsp)
callq 0x373e90
movq %rax, %rsi
addq $0x8, %rsi
leaq 0x258(%rsp), %rdi
movq %rdi, 0xb8(%rsp)
callq 0x11b140
movq 0xa8(%rsp), %rax
movq $0x0, 0x250(%rsp)
addq $0x530, %rax            # imm = 0x530
movq %rax, 0xb0(%rsp)
callq 0x237af0
movq 0xb0(%rsp), %rdi
movq 0xb8(%rsp), %rsi
movq %rax, %rdx
callq 0x513c70
movq %rax, 0xc0(%rsp)
jmp 0x5169c9
movq 0xc0(%rsp), %rax
movq %rax, 0x248(%rsp)
movq 0x248(%rsp), %rdi
leaq 0x258(%rsp), %rsi
callq 0x37fb20
movb %al, 0xa7(%rsp)
jmp 0x5169f7
movb 0xa7(%rsp), %al
testb $0x1, %al
jne 0x516a04
jmp 0x516a37
movq 0xa8(%rsp), %rcx
movq 0x248(%rsp), %rax
movq 0x30(%rax), %rax
cmpq 0x3b0(%rcx), %rax
ja 0x516a37
movq 0x248(%rsp), %rcx
movl $0x3, %eax
cmpl 0x48(%rcx), %eax
je 0x516d64
movq 0xa8(%rsp), %rdi
addq $0x298, %rdi            # imm = 0x298
leaq 0x258(%rsp), %rsi
callq 0x517110
movq %rdx, 0x90(%rsp)
movq %rax, 0x98(%rsp)
jmp 0x516a65
movq 0x90(%rsp), %rax
movq 0x98(%rsp), %rcx
movq %rcx, 0x228(%rsp)
movq %rax, 0x230(%rsp)
xorl %eax, %eax
cmpq 0x230(%rsp), %rax
jne 0x516c89
movq 0xa8(%rsp), %rdi
callq 0x373e90
movq %rax, 0x88(%rsp)
jmp 0x516aac
leaq 0x9340a(%rip), %rsi     # 0x5a9ebd
leaq 0x140(%rsp), %rdi
leaq 0x258(%rsp), %rdx
callq 0x3784f0
jmp 0x516aca
leaq 0x933fe(%rip), %rdx     # 0x5a9ecf
leaq 0x160(%rsp), %rdi
leaq 0x140(%rsp), %rsi
callq 0x29dc30
jmp 0x516ae8
leaq 0x100(%rsp), %rdi
movl $0x6e63, %esi           # imm = 0x6E63
callq 0x371f20
jmp 0x516afc
leaq 0x90410(%rip), %rsi     # 0x5a6f13
leaq 0x120(%rsp), %rdi
leaq 0x100(%rsp), %rdx
callq 0x29dd70
jmp 0x516b1a
movq 0x88(%rsp), %rdx
leaq 0x180(%rsp), %rdi
movl $0x1, %esi
leaq 0x160(%rsp), %rcx
leaq 0x120(%rsp), %r8
callq 0x3741e0
jmp 0x516b46
movq 0xa8(%rsp), %rdi
leaq 0x180(%rsp), %rsi
callq 0x371e40
jmp 0x516b5d
leaq 0x180(%rsp), %rdi
callq 0x371330
leaq 0x120(%rsp), %rdi
callq 0x11b838
leaq 0x100(%rsp), %rdi
callq 0x11b838
leaq 0x160(%rsp), %rdi
callq 0x11b838
leaq 0x140(%rsp), %rdi
callq 0x11b838
callq 0x2821f0
movq %rax, 0x280(%rsp)
movl $0x1, 0xfc(%rsp)
jmp 0x516fed
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x240(%rsp)
movl %eax, 0x23c(%rsp)
jmp 0x51700a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x240(%rsp)
movl %eax, 0x23c(%rsp)
jmp 0x516c77
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x240(%rsp)
movl %eax, 0x23c(%rsp)
jmp 0x516c6a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x240(%rsp)
movl %eax, 0x23c(%rsp)
jmp 0x516c5d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x240(%rsp)
movl %eax, 0x23c(%rsp)
jmp 0x516c50
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x240(%rsp)
movl %eax, 0x23c(%rsp)
leaq 0x180(%rsp), %rdi
callq 0x371330
leaq 0x120(%rsp), %rdi
callq 0x11b838
leaq 0x100(%rsp), %rdi
callq 0x11b838
leaq 0x160(%rsp), %rdi
callq 0x11b838
leaq 0x140(%rsp), %rdi
callq 0x11b838
jmp 0x51700a
movq 0x230(%rsp), %rax
movq %rax, 0x250(%rsp)
movq 0x228(%rsp), %rdi
callq 0x517200
movl %eax, 0x84(%rsp)
jmp 0x516caf
movl 0x84(%rsp), %ecx
movl $0x2, %eax
cmpl %ecx, %eax
jne 0x516d62
movq 0xa8(%rsp), %rdi
callq 0x373e90
movq %rax, 0x78(%rsp)
jmp 0x516cd7
movq 0x250(%rsp), %rdi
callq 0x3ea570
movq %rax, 0x70(%rsp)
jmp 0x516ceb
movq 0x250(%rsp), %rdi
callq 0x3a19c0
movq %rax, 0x68(%rsp)
jmp 0x516cff
movq 0x68(%rsp), %rdx
movq 0x70(%rsp), %rsi
movq 0xa8(%rsp), %rdi
callq 0x5172c0
movq %rdx, 0x58(%rsp)
movq %rax, 0x60(%rsp)
jmp 0x516d22
movq 0x78(%rsp), %rsi
movq 0xa8(%rsp), %rdi
movq 0x58(%rsp), %rax
movq 0x60(%rsp), %rcx
movq %rcx, 0xe8(%rsp)
movq %rax, 0xf0(%rsp)
movq 0xe8(%rsp), %rdx
movq 0xf0(%rsp), %rcx
callq 0x517240
jmp 0x516d60
jmp 0x516d62
jmp 0x516d78
movq 0x248(%rsp), %rax
movq 0x60(%rax), %rax
movq %rax, 0x250(%rsp)
movq 0xa8(%rsp), %rdi
callq 0x373690
jmp 0x516d87
movq 0xa8(%rsp), %rdi
movl $0x5b, 0xe4(%rsp)
leaq 0xe4(%rsp), %rsi
movl $0x1, %edx
callq 0x37d640
movb %al, 0x57(%rsp)
jmp 0x516db2
movb 0x57(%rsp), %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x516dbe
jmp 0x516dfe
movq 0xa8(%rsp), %rdi
addq $0x290, %rdi            # imm = 0x290
leaq 0x250(%rsp), %rsi
callq 0x514330
movq %rax, 0x48(%rsp)
jmp 0x516de1
movq 0x48(%rsp), %rax
movq %rax, 0x280(%rsp)
movl $0x1, 0xfc(%rsp)
jmp 0x516fed
movq 0xa8(%rsp), %rdi
movl $0x5d, 0xe0(%rsp)
leaq 0xe0(%rsp), %rsi
movl $0x1, %edx
callq 0x37d640
movb %al, 0x47(%rsp)
jmp 0x516e29
movb 0x47(%rsp), %al
testb $0x1, %al
jne 0x516e36
jmp 0x516f23
movq 0x250(%rsp), %rdi
callq 0x3b8910
movb %al, 0x46(%rsp)
jmp 0x516e49
movb 0x46(%rsp), %al
testb $0x1, %al
jne 0x516e53
jmp 0x516e85
movq 0xa8(%rsp), %rdi
addq $0x290, %rdi            # imm = 0x290
leaq 0x250(%rsp), %rsi
callq 0x517310
movq %rax, 0x38(%rsp)
jmp 0x516e76
movq 0x38(%rsp), %rax
movq %rax, 0x30(%rsp)
jmp 0x516f06
movq 0xa8(%rsp), %rax
addq $0x220, %rax            # imm = 0x220
movq %rax, 0x20(%rsp)
movq 0x250(%rsp), %rdi
callq 0x3a19c0
movq %rax, 0x28(%rsp)
jmp 0x516eac
movq 0x20(%rsp), %rdi
movq 0x28(%rsp), %rax
movq %rax, %xmm0
movaps 0x842de(%rip), %xmm1    # 0x59b1a0
punpckldq %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
movapd 0x842e2(%rip), %xmm1    # 0x59b1b0
subpd %xmm1, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movsd %xmm0, 0xd8(%rsp)
leaq 0xd8(%rsp), %rsi
callq 0x284c20
movq %rax, 0x18(%rsp)
jmp 0x516efa
movq 0x18(%rsp), %rax
movq %rax, 0x30(%rsp)
jmp 0x516f06
movq 0x30(%rsp), %rax
movq %rax, 0x280(%rsp)
movl $0x1, 0xfc(%rsp)
jmp 0x516fed
jmp 0x516f25
movq 0xa8(%rsp), %rdi
leaq 0x258(%rsp), %rsi
callq 0x517390
movq %rax, 0x10(%rsp)
jmp 0x516f41
movq 0x10(%rsp), %rax
movq %rax, 0xd0(%rsp)
cmpq $0x0, 0xd0(%rsp)
je 0x516fd5
movq 0xa8(%rsp), %rdi
addq $0x290, %rdi            # imm = 0x290
leaq 0x250(%rsp), %rsi
callq 0x514330
movq %rax, 0x8(%rsp)
jmp 0x516f7c
movq 0xa8(%rsp), %rdi
movq 0x8(%rsp), %rax
movq %rax, 0xc8(%rsp)
movq 0x250(%rsp), %rdx
movq 0xc8(%rsp), %rcx
movq 0xd0(%rsp), %r8
leaq 0x258(%rsp), %rsi
callq 0x5177c0
movq %rax, (%rsp)
jmp 0x516fbc
movq (%rsp), %rax
movq %rax, 0x280(%rsp)
movl $0x1, 0xfc(%rsp)
jmp 0x516fed
callq 0x2821f0
movq %rax, 0x280(%rsp)
movl $0x1, 0xfc(%rsp)
leaq 0x258(%rsp), %rdi
callq 0x11b838
movq 0x280(%rsp), %rax
addq $0x288, %rsp            # imm = 0x288
retq
leaq 0x258(%rsp), %rdi
callq 0x11b838
movq 0x240(%rsp), %rdi
callq 0x11b4e0
nopw %cs:(%rax,%rax)
nop