// File: ArashPartow[P]exprtk/./exprtk.hpp
// Function: exprtk::parser<double>::parse_define_string_statement(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, exprtk::details::expression_node<double>*)
inline expression_node_ptr parse_define_string_statement(const std::string& str_name, expression_node_ptr initialisation_expression)
      {
         stringvar_node_t* str_node = reinterpret_cast<stringvar_node_t*>(0);

         scope_element& se = sem_.get_element(str_name);

         if (se.name == str_name)
         {
            if (se.active)
            {
               set_error(make_error(
                  parser_error::e_syntax,
                  current_token(),
                  "ERR175 - Illegal redefinition of local variable: '" + str_name + "'",
                  exprtk_error_location));

               free_node(node_allocator_, initialisation_expression);

               return error_node();
            }
            else if (scope_element::e_string == se.type)
            {
               str_node  = se.str_node;
               se.active = true;
               se.depth  = state_.scope_depth;
               se.ref_count++;
            }
         }

         if (0 == str_node)
         {
            scope_element nse;
            nse.name      = str_name;
            nse.active    = true;
            nse.ref_count = 1;
            nse.type      = scope_element::e_string;
            nse.depth     = state_.scope_depth;
            nse.data      = new std::string;
            nse.str_node  = new stringvar_node_t(*reinterpret_cast<std::string*>(nse.data));

            if (!sem_.add_element(nse))
            {
               set_error(make_error(
                  parser_error::e_syntax,
                  current_token(),
                  "ERR176 - Failed to add new local string variable '" + str_name + "' to SEM",
                  exprtk_error_location));

               free_node(node_allocator_, initialisation_expression);

               sem_.free_element(nse);

               return error_node();
            }

            assert(sem_.total_local_symb_size_bytes() <= settings().max_total_local_symbol_size_bytes());

            str_node = nse.str_node;

            exprtk_debug(("parse_define_string_statement() - INFO - Added new local string variable: %s\n", nse.name.c_str()));
         }

         lodge_symbol(str_name, e_st_local_string);

         state_.activate_side_effect("parse_define_string_statement()");

         expression_node_ptr branch[2] = {0};

         branch[0] = str_node;
         branch[1] = initialisation_expression;

         return expression_generator_(details::e_assign,branch);
      }

// Assembly:
subq $0x3b8, %rsp            # imm = 0x3B8
movq %rdi, 0x3a8(%rsp)
movq %rsi, 0x3a0(%rsp)
movq %rdx, 0x398(%rsp)
movq 0x3a8(%rsp), %rax
movq %rax, 0x50(%rsp)
movq $0x0, 0x390(%rsp)
addq $0x530, %rax            # imm = 0x530
movq %rax, 0x58(%rsp)
movq 0x3a0(%rsp), %rax
movq %rax, 0x60(%rsp)
callq 0x237af0
movq 0x58(%rsp), %rdi
movq 0x60(%rsp), %rsi
movq %rax, %rdx
callq 0x4e82a0
movq %rax, 0x388(%rsp)
movq 0x388(%rsp), %rdi
movq 0x3a0(%rsp), %rsi
callq 0x43e9b0
testb $0x1, %al
jne 0x5134ad
jmp 0x5136fc
movq 0x388(%rsp), %rax
testb $0x1, 0x4c(%rax)
je 0x51369a
movq 0x50(%rsp), %rdi
callq 0x373e90
movq %rax, 0x40(%rsp)
movq 0x3a0(%rsp), %rdx
leaq 0x96439(%rip), %rsi     # 0x5a9916
leaq 0x2a0(%rsp), %rdi
movq %rdi, 0x48(%rsp)
callq 0x3784f0
movq 0x48(%rsp), %rsi
leaq 0x965b6(%rip), %rdx     # 0x5a9ab1
leaq 0x2c0(%rsp), %rdi
callq 0x29dc30
jmp 0x51350a
leaq 0x250(%rsp), %rdi
movl $0x7414, %esi           # imm = 0x7414
callq 0x371f20
jmp 0x51351e
leaq 0x939ee(%rip), %rsi     # 0x5a6f13
leaq 0x270(%rsp), %rdi
leaq 0x250(%rsp), %rdx
callq 0x29dd70
jmp 0x51353c
movq 0x40(%rsp), %rdx
leaq 0x2e0(%rsp), %rdi
movl $0x1, %esi
leaq 0x2c0(%rsp), %rcx
leaq 0x270(%rsp), %r8
callq 0x3741e0
jmp 0x513565
movq 0x50(%rsp), %rdi
leaq 0x2e0(%rsp), %rsi
callq 0x371e40
jmp 0x513579
leaq 0x2e0(%rsp), %rdi
callq 0x371330
leaq 0x270(%rsp), %rdi
callq 0x11b838
leaq 0x250(%rsp), %rdi
callq 0x11b838
leaq 0x2c0(%rsp), %rdi
callq 0x11b838
leaq 0x2a0(%rsp), %rdi
callq 0x11b838
movq 0x50(%rsp), %rdi
addq $0x290, %rdi            # imm = 0x290
leaq 0x398(%rsp), %rsi
callq 0x284bd0
callq 0x2821f0
movq %rax, 0x3b0(%rsp)
jmp 0x513b78
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x298(%rsp)
movl %eax, 0x294(%rsp)
jmp 0x513688
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x298(%rsp)
movl %eax, 0x294(%rsp)
jmp 0x51367b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x298(%rsp)
movl %eax, 0x294(%rsp)
jmp 0x51366e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x298(%rsp)
movl %eax, 0x294(%rsp)
jmp 0x513661
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x298(%rsp)
movl %eax, 0x294(%rsp)
leaq 0x2e0(%rsp), %rdi
callq 0x371330
leaq 0x270(%rsp), %rdi
callq 0x11b838
leaq 0x250(%rsp), %rdi
callq 0x11b838
leaq 0x2c0(%rsp), %rdi
callq 0x11b838
leaq 0x2a0(%rsp), %rdi
callq 0x11b838
jmp 0x513b88
movq 0x388(%rsp), %rcx
movl $0x5, %eax
cmpl 0x48(%rcx), %eax
jne 0x5136f8
movq 0x50(%rsp), %rax
movq 0x388(%rsp), %rcx
movq 0x68(%rcx), %rcx
movq %rcx, 0x390(%rsp)
movq 0x388(%rsp), %rcx
movb $0x1, 0x4c(%rcx)
movq 0x3b0(%rax), %rcx
movq 0x388(%rsp), %rax
movq %rcx, 0x30(%rax)
movq 0x388(%rsp), %rax
movq 0x38(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x38(%rax)
jmp 0x5136fa
jmp 0x5136fc
xorl %eax, %eax
cmpq 0x390(%rsp), %rax
jne 0x513a7d
leaq 0x1e0(%rsp), %rdi
movq %rdi, 0x38(%rsp)
callq 0x2535d0
movq 0x38(%rsp), %rdi
movq 0x3a0(%rsp), %rsi
callq 0x11b7c0
jmp 0x513732
movq 0x50(%rsp), %rax
movb $0x1, 0x22c(%rsp)
movq $0x1, 0x218(%rsp)
movl $0x5, 0x228(%rsp)
movq 0x3b0(%rax), %rax
movq %rax, 0x210(%rsp)
movl $0x20, %edi
callq 0x11b180
movq %rax, 0x30(%rsp)
jmp 0x513776
movq 0x30(%rsp), %rdi
callq 0x11b2b0
movq 0x30(%rsp), %rax
movq %rax, 0x230(%rsp)
movl $0x88, %edi
callq 0x11b180
movq %rax, 0x28(%rsp)
jmp 0x51379e
movq 0x28(%rsp), %rdi
movq 0x230(%rsp), %rsi
callq 0x5166a0
jmp 0x5137b2
movq 0x50(%rsp), %rdi
movq 0x28(%rsp), %rax
movq %rax, 0x248(%rsp)
addq $0x530, %rdi            # imm = 0x530
leaq 0x1e0(%rsp), %rsi
callq 0x4e84d0
movb %al, 0x27(%rsp)
jmp 0x5137de
movb 0x27(%rsp), %al
testb $0x1, %al
jne 0x513a2f
jmp 0x5137ec
movq 0x50(%rsp), %rdi
callq 0x373e90
movq %rax, 0x18(%rsp)
jmp 0x5137fd
movq 0x3a0(%rsp), %rdx
leaq 0x9613d(%rip), %rsi     # 0x5a9949
leaq 0xf8(%rsp), %rdi
callq 0x3784f0
jmp 0x51381b
leaq 0x95279(%rip), %rdx     # 0x5a8a9b
leaq 0x118(%rsp), %rdi
leaq 0xf8(%rsp), %rsi
callq 0x29dc30
jmp 0x513839
leaq 0xb8(%rsp), %rdi
movl $0x7434, %esi           # imm = 0x7434
callq 0x371f20
jmp 0x51384d
leaq 0x936bf(%rip), %rsi     # 0x5a6f13
leaq 0xd8(%rsp), %rdi
leaq 0xb8(%rsp), %rdx
callq 0x29dd70
jmp 0x51386b
movq 0x18(%rsp), %rdx
leaq 0x138(%rsp), %rdi
movl $0x1, %esi
leaq 0x118(%rsp), %rcx
leaq 0xd8(%rsp), %r8
callq 0x3741e0
jmp 0x513894
movq 0x50(%rsp), %rdi
leaq 0x138(%rsp), %rsi
callq 0x371e40
jmp 0x5138a8
leaq 0x138(%rsp), %rdi
callq 0x371330
leaq 0xd8(%rsp), %rdi
callq 0x11b838
leaq 0xb8(%rsp), %rdi
callq 0x11b838
leaq 0x118(%rsp), %rdi
callq 0x11b838
leaq 0xf8(%rsp), %rdi
callq 0x11b838
movq 0x50(%rsp), %rdi
addq $0x290, %rdi            # imm = 0x290
leaq 0x398(%rsp), %rsi
callq 0x284bd0
jmp 0x513904
movq 0x50(%rsp), %rdi
addq $0x530, %rdi            # imm = 0x530
leaq 0x1e0(%rsp), %rsi
callq 0x3745b0
jmp 0x51391f
callq 0x2821f0
movq %rax, 0x3b0(%rsp)
movl $0x1, 0xb4(%rsp)
jmp 0x513a4a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x298(%rsp)
movl %eax, 0x294(%rsp)
jmp 0x513a6b
movq 0x28(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x298(%rsp)
movl %eax, 0x294(%rsp)
movl $0x88, %esi
callq 0x11b130
jmp 0x513a6b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x298(%rsp)
movl %eax, 0x294(%rsp)
jmp 0x513a20
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x298(%rsp)
movl %eax, 0x294(%rsp)
jmp 0x513a13
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x298(%rsp)
movl %eax, 0x294(%rsp)
jmp 0x513a06
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x298(%rsp)
movl %eax, 0x294(%rsp)
jmp 0x5139f9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x298(%rsp)
movl %eax, 0x294(%rsp)
leaq 0x138(%rsp), %rdi
callq 0x371330
leaq 0xd8(%rsp), %rdi
callq 0x11b838
leaq 0xb8(%rsp), %rdi
callq 0x11b838
leaq 0x118(%rsp), %rdi
callq 0x11b838
leaq 0xf8(%rsp), %rdi
callq 0x11b838
jmp 0x513a6b
movq 0x248(%rsp), %rax
movq %rax, 0x390(%rsp)
movl $0x0, 0xb4(%rsp)
leaq 0x1e0(%rsp), %rdi
callq 0x2538b0
movl 0xb4(%rsp), %eax
testl %eax, %eax
je 0x513a69
jmp 0x513a64
jmp 0x513b78
jmp 0x513a7d
leaq 0x1e0(%rsp), %rdi
callq 0x2538b0
jmp 0x513b88
movq 0x50(%rsp), %rdi
movq 0x3a0(%rsp), %rsi
movl $0x8, %edx
callq 0x39aef0
movq 0x50(%rsp), %rax
addq $0x3a8, %rax            # imm = 0x3A8
movq %rax, 0x8(%rsp)
leaq 0x8f(%rsp), %rdi
movq %rdi, 0x10(%rsp)
callq 0x11b6f0
movq 0x10(%rsp), %rdx
leaq 0x95eba(%rip), %rsi     # 0x5a997c
leaq 0x90(%rsp), %rdi
callq 0x134520
jmp 0x513ad1
movq 0x8(%rsp), %rdi
leaq 0x90(%rsp), %rsi
callq 0x3eb500
leaq 0x90(%rsp), %rdi
callq 0x11b838
leaq 0x8f(%rsp), %rdi
callq 0x11b820
leaq 0x70(%rsp), %rdi
xorl %esi, %esi
movl $0x10, %edx
callq 0x11b290
movq 0x50(%rsp), %rdi
movq 0x390(%rsp), %rax
movq %rax, 0x70(%rsp)
movq 0x398(%rsp), %rax
movq %rax, 0x78(%rsp)
addq $0x220, %rdi            # imm = 0x220
movl $0x51, 0x6c(%rsp)
leaq 0x6c(%rsp), %rsi
leaq 0x70(%rsp), %rdx
callq 0x3ad9f0
movq %rax, 0x3b0(%rsp)
jmp 0x513b78
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x298(%rsp)
movl %eax, 0x294(%rsp)
leaq 0x8f(%rsp), %rdi
callq 0x11b820
jmp 0x513b88
movq 0x3b0(%rsp), %rax
addq $0x3b8, %rsp            # imm = 0x3B8
retq
movq 0x298(%rsp), %rdi
callq 0x11b4e0
nopw %cs:(%rax,%rax)
nop