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

         typedef details::stringvar_node<T>* strvar_node_t;

         expression_node_ptr result   = error_node();
         strvar_node_t const_str_node = static_cast<strvar_node_t>(0);

         scope_element& se = sem_.get_active_element(symbol);

         if (scope_element::e_string == se.type)
         {
            se.active = true;
            result    = se.str_node;
            lodge_symbol(symbol, e_st_local_string);
         }
         else
         {
            typedef typename symtab_store::string_context str_ctxt_t;
            str_ctxt_t str_ctx = symtab_store_.get_string_context(symbol);

            if ((0 == str_ctx.str_var) || !symtab_store_.is_conststr_stringvar(symbol))
            {
               set_error(make_error(
                  parser_error::e_syntax,
                  current_token(),
                  "ERR121 - Unknown string symbol",
                  exprtk_error_location));

               return error_node();
            }

            assert(str_ctx.str_var != 0);
            assert(str_ctx.symbol_table != 0);

            result = str_ctx.str_var;

            if (symtab_store_.is_constant_string(symbol))
            {
               const_str_node = static_cast<strvar_node_t>(result);
               result = expression_generator_(const_str_node->str());
            }
            else if (symbol_table_t::e_immutable == str_ctx.symbol_table->mutability())
            {
               lodge_immutable_symbol(
                  current_token(),
                  make_memory_range(str_ctx.str_var->base(), str_ctx.str_var->size()));
            }

            lodge_symbol(symbol, e_st_string);
         }

         if (peek_token_is(token_t::e_lsqrbracket))
         {
            next_token();

            if (peek_token_is(token_t::e_rsqrbracket))
            {
               next_token();
               next_token();

               if (const_str_node)
               {
                  free_node(node_allocator_, result);

                  return expression_generator_(T(const_str_node->size()));
               }
               else
                  return node_allocator_.allocate<details::stringvar_size_node<T> >
                            (static_cast<details::stringvar_node<T>*>(result)->ref());
            }

            range_t rp;

            if (!parse_range(rp))
            {
               free_node(node_allocator_, result);

               return error_node();
            }
            else if (const_str_node)
            {
               free_node(node_allocator_, result);
               result = expression_generator_(const_str_node->ref(),rp);
            }
            else
               result = expression_generator_(static_cast<details::stringvar_node<T>*>
                           (result)->ref(), rp);

            if (result)
               rp.clear();
         }
         else
            next_token();

         return result;
      }

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x140, %rsp            # imm = 0x140
movq %rdi, %rbx
leaq 0x78(%rdi), %rsi
leaq 0x18(%rsp), %r14
movq %r14, %rdi
callq 0x1182f0
leaq 0x530(%rbx), %rdi
pushq $-0x1
popq %rdx
movq %r14, %rsi
callq 0x29dc9e
cmpl $0x5, 0x48(%rax)
jne 0x2a3fad
movb $0x1, 0x4c(%rax)
movq 0x68(%rax), %r15
movq %r15, 0x8(%rsp)
leaq 0x2b0(%rbx), %rdi
leaq 0x18(%rsp), %rsi
pushq $0x8
popq %rdx
callq 0x2089d0
xorl %r14d, %r14d
jmp 0x2a4124
leaq 0x298(%rbx), %r13
leaq 0x18(%rsp), %rsi
movq %r13, %rdi
callq 0x2a5f16
movq %rdx, %r14
leaq 0x70(%rbx), %r15
testq %rdx, %rdx
je 0x2a4039
movq %rax, %r12
leaq 0x18(%rsp), %rsi
movq %r13, %rdi
callq 0x2a5f94
testb %al, %al
je 0x2a4039
movq %r14, 0x8(%rsp)
leaq 0x18(%rsp), %rsi
movq %r13, %rdi
callq 0x2a6032
testb %al, %al
je 0x2a40db
leaq 0x98(%rsp), %rdi
movq %r14, %rsi
callq 0x22ccdc
leaq 0x220(%rbx), %rdi
leaq 0x98(%rsp), %rsi
callq 0x2a60ba
movq %rax, %r15
movq %rax, 0x8(%rsp)
leaq 0x98(%rsp), %rdi
callq 0x118648
jmp 0x2a4110
leaq 0x392e4(%rip), %rsi     # 0x2dd324
leaq 0x78(%rsp), %rdi
leaq 0x17(%rsp), %rdx
callq 0x127016
leaq 0x38(%rsp), %rdi
movl $0x6d98, %esi           # imm = 0x6D98
callq 0x1f7a3c
leaq 0x35b96(%rip), %rsi     # 0x2d9bfb
leaq 0x58(%rsp), %rdi
leaq 0x38(%rsp), %rdx
callq 0x1b4349
leaq 0x98(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x78(%rsp), %rcx
leaq 0x58(%rsp), %r8
movq %r15, %rdx
callq 0x1f7341
addq $0x308, %rbx            # imm = 0x308
leaq 0x98(%rsp), %rsi
movq %rbx, %rdi
callq 0x1f76ce
leaq 0x98(%rsp), %rdi
callq 0x1f5c4c
leaq 0x58(%rsp), %rdi
callq 0x118648
leaq 0x38(%rsp), %rdi
callq 0x118648
leaq 0x78(%rsp), %rdi
callq 0x118648
xorl %r15d, %r15d
jmp 0x2a427f
movq (%r12), %rax
testq %rax, %rax
je 0x2a410a
cmpq $0x0, 0x8(%rax)
je 0x2a410a
cmpl $0x2, 0x10(%rax)
jne 0x2a410a
movq 0x30(%r14), %rax
movq (%rax), %rdx
movq 0x8(%rax), %rcx
addq %rdx, %rcx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x29f2e4
movq %r14, %r15
xorl %r14d, %r14d
leaq 0x2b0(%rbx), %rdi
leaq 0x18(%rsp), %rsi
pushq $0x4
popq %rdx
callq 0x2089d0
movq 0x18(%rbx), %rax
leaq 0x28(%rbx), %r12
cmpq %rax, 0x8(%rbx)
cmoveq %r12, %rax
cmpl $0x5b, (%rax)
jne 0x2a41c6
movq %rbx, %rdi
callq 0x1f6d68
movq 0x18(%rbx), %rax
cmpq %rax, 0x8(%rbx)
cmovneq %rax, %r12
cmpl $0x5d, (%r12)
jne 0x2a41d3
movq %rbx, %rdi
callq 0x1f6d68
movq %rbx, %rdi
callq 0x1f6d68
leaq 0x290(%rbx), %rdi
testq %r14, %r14
je 0x2a4244
leaq 0x8(%rsp), %rsi
callq 0x1ad9c8
movq 0x30(%r14), %rax
movsd 0x8(%rax), %xmm0
unpcklps 0x29e7e(%rip), %xmm0    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]
addq $0x220, %rbx            # imm = 0x220
subpd 0x29e7f(%rip), %xmm0    # 0x2ce020
movapd %xmm0, %xmm1
unpckhpd %xmm0, %xmm1            # xmm1 = xmm1[1],xmm0[1]
addsd %xmm0, %xmm1
leaq 0x98(%rsp), %rsi
movsd %xmm1, (%rsi)
movq %rbx, %rdi
callq 0x1ad9fe
jmp 0x2a4252
movq %rbx, %rdi
callq 0x1f6d68
jmp 0x2a427f
xorl %eax, %eax
leaq 0x98(%rsp), %rsi
movb %al, (%rsi)
andq $0x0, 0x8(%rsi)
movb %al, 0x10(%rsi)
andq $0x0, 0x18(%rsi)
movb %al, 0x20(%rsi)
andq $0x0, 0x28(%rsi)
movb %al, 0x30(%rsi)
xorpd %xmm0, %xmm0
movupd %xmm0, 0x38(%rsi)
andq $0x0, 0x48(%rsi)
movq %rbx, %rdi
xorl %edx, %edx
callq 0x2a60f4
testb %al, %al
je 0x2a422b
testq %r14, %r14
je 0x2a4257
leaq 0x290(%rbx), %rdi
leaq 0x8(%rsp), %rsi
callq 0x1ad9c8
jmp 0x2a425c
addq $0x290, %rbx            # imm = 0x290
leaq 0x8(%rsp), %rsi
movq %rbx, %rdi
callq 0x1ad9c8
jmp 0x2a40d3
movq 0x8(%rsp), %rax
movq 0x30(%rax), %rsi
callq 0x2a60c4
movq %rax, %r15
jmp 0x2a427f
movq 0x8(%rsp), %r14
addq $0x220, %rbx            # imm = 0x220
movq 0x30(%r14), %rsi
leaq 0x98(%rsp), %rdx
movq %rbx, %rdi
callq 0x2a6802
movq %rax, %r15
movq %rax, 0x8(%rsp)
leaq 0x18(%rsp), %rdi
callq 0x118648
movq %r15, %rax
addq $0x140, %rsp            # imm = 0x140
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
movq %rax, %rbx
leaq 0x98(%rsp), %rdi
jmp 0x2a42e6
jmp 0x2a42f3
jmp 0x2a42f3
movq %rax, %rbx
leaq 0x98(%rsp), %rdi
callq 0x1f5c4c
jmp 0x2a42c3
movq %rax, %rbx
leaq 0x58(%rsp), %rdi
callq 0x118648
jmp 0x2a42d2
movq %rax, %rbx
leaq 0x38(%rsp), %rdi
callq 0x118648
jmp 0x2a42e1
movq %rax, %rbx
leaq 0x78(%rsp), %rdi
callq 0x118648
jmp 0x2a42f6
jmp 0x2a42f3
jmp 0x2a42f3
jmp 0x2a42f3
movq %rax, %rbx
leaq 0x18(%rsp), %rdi
callq 0x118648
movq %rbx, %rdi
callq 0x118360