// File: ArashPartow[P]exprtk/./exprtk.hpp
// Function: exprtk::lexer::generator::scan_string()
inline void scan_string()
         {
            details::char_cptr initial_itr = s_itr_ + 1;
            token_t t;

            if (std::distance(s_itr_,s_end_) < 2)
            {
               t.set_error(token::e_err_string, s_itr_, s_end_, base_itr_);
               token_list_.push_back(t);

               return;
            }

            ++s_itr_;

            bool escaped_found = false;
            bool escaped = false;

            while (!is_end(s_itr_))
            {
               if (!details::is_valid_string_char(*s_itr_))
               {
                  t.set_error(token::e_err_string, initial_itr, s_itr_, base_itr_);
                  token_list_.push_back(t);

                  return;
               }
               else if (!escaped && ('\\' == *s_itr_))
               {
                  escaped_found = true;
                  escaped = true;
                  ++s_itr_;

                  continue;
               }
               else if (!escaped)
               {
                  if ('\'' == *s_itr_)
                     break;
               }
               else if (escaped)
               {
                  if (
                       !is_end(s_itr_) && ('0' == *(s_itr_)) &&
                       ((s_itr_ + 4) <= s_end_)
                     )
                  {
                     const bool x_separator = ('X' == std::toupper(*(s_itr_ + 1)));

                     const bool both_digits = details::is_hex_digit(*(s_itr_ + 2)) &&
                                              details::is_hex_digit(*(s_itr_ + 3)) ;

                     if (!(x_separator && both_digits))
                     {
                        t.set_error(token::e_err_string, initial_itr, s_itr_, base_itr_);
                        token_list_.push_back(t);

                        return;
                     }
                     else
                        s_itr_ += 3;
                  }

                  escaped = false;
               }

               ++s_itr_;
            }

            if (is_end(s_itr_))
            {
               t.set_error(token::e_err_string, initial_itr, s_itr_, base_itr_);
               token_list_.push_back(t);

               return;
            }

            if (!escaped_found)
               t.set_string(initial_itr, s_itr_, base_itr_);
            else
            {
               std::string parsed_string(initial_itr,s_itr_);

               if (!details::cleanup_escapes(parsed_string))
               {
                  t.set_error(token::e_err_string, initial_itr, s_itr_, base_itr_);
                  token_list_.push_back(t);

                  return;
               }

               t.set_string(
                  parsed_string,
                  static_cast<std::size_t>(std::distance(base_itr_,initial_itr)));
            }

            token_list_.push_back(t);
            ++s_itr_;

            return;
         }

// Assembly:
subq $0xc8, %rsp
movq %rdi, 0xc0(%rsp)
movq 0xc0(%rsp), %rax
movq %rax, 0x38(%rsp)
movq 0x60(%rax), %rax
incq %rax
movq %rax, 0xb8(%rsp)
leaq 0x88(%rsp), %rdi
callq 0x251250
movq 0x38(%rsp), %rax
movq 0x60(%rax), %rdi
movq 0x68(%rax), %rsi
callq 0x22cb80
movq %rax, 0x40(%rsp)
jmp 0x377021
movq 0x40(%rsp), %rax
cmpq $0x2, %rax
jge 0x377088
movq 0x38(%rsp), %rax
movq 0x58(%rax), %r8
movq 0x60(%rax), %rdx
movq 0x68(%rax), %rcx
leaq 0x88(%rsp), %rdi
movl $0x4, %esi
callq 0x377580
jmp 0x377051
movq 0x38(%rsp), %rdi
leaq 0x88(%rsp), %rsi
callq 0x254cc0
jmp 0x377065
movl $0x1, 0x78(%rsp)
jmp 0x3774da
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x80(%rsp)
movl %eax, 0x7c(%rsp)
jmp 0x3774ef
movq 0x38(%rsp), %rax
movq 0x60(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x60(%rax)
movb $0x0, 0x77(%rsp)
movb $0x0, 0x76(%rsp)
movq 0x38(%rsp), %rdi
movq 0x60(%rdi), %rsi
callq 0x375a40
xorb $-0x1, %al
testb $0x1, %al
jne 0x3770bc
jmp 0x3772d7
movq 0x38(%rsp), %rax
movq 0x60(%rax), %rax
movsbl (%rax), %edi
callq 0x3778b0
movb %al, 0x37(%rsp)
jmp 0x3770d3
movb 0x37(%rsp), %al
testb $0x1, %al
jne 0x377127
jmp 0x3770dd
movq 0x38(%rsp), %rax
movq 0xb8(%rsp), %rdx
movq 0x58(%rax), %r8
movq 0x60(%rax), %rcx
leaq 0x88(%rsp), %rdi
movl $0x4, %esi
callq 0x377580
jmp 0x377106
movq 0x38(%rsp), %rdi
leaq 0x88(%rsp), %rsi
callq 0x254cc0
jmp 0x37711a
movl $0x1, 0x78(%rsp)
jmp 0x3774da
testb $0x1, 0x76(%rsp)
jne 0x377163
movq 0x38(%rsp), %rax
movq 0x60(%rax), %rax
movsbl (%rax), %ecx
movl $0x5c, %eax
cmpl %ecx, %eax
jne 0x377163
movq 0x38(%rsp), %rax
movb $0x1, 0x77(%rsp)
movb $0x1, 0x76(%rsp)
movq 0x60(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x60(%rax)
jmp 0x3770a3
testb $0x1, 0x76(%rsp)
jne 0x377189
movq 0x38(%rsp), %rax
movq 0x60(%rax), %rax
movsbl (%rax), %ecx
movl $0x27, %eax
cmpl %ecx, %eax
jne 0x377184
jmp 0x3772d7
jmp 0x3772bd
testb $0x1, 0x76(%rsp)
je 0x3772bb
movq 0x38(%rsp), %rdi
movq 0x60(%rdi), %rsi
callq 0x375a40
testb $0x1, %al
jne 0x3772b6
movq 0x38(%rsp), %rax
movq 0x60(%rax), %rax
movsbl (%rax), %ecx
movl $0x30, %eax
cmpl %ecx, %eax
jne 0x3772b6
movq 0x38(%rsp), %rcx
movq 0x60(%rcx), %rax
addq $0x4, %rax
cmpq 0x68(%rcx), %rax
ja 0x3772b6
movq 0x38(%rsp), %rax
movq 0x60(%rax), %rax
movsbl 0x1(%rax), %edi
callq 0x11b1b0
movl %eax, %ecx
movq 0x38(%rsp), %rax
subl $0x58, %ecx
sete 0x75(%rsp)
movq 0x60(%rax), %rax
movzbl 0x2(%rax), %edi
callq 0x3778f0
movb %al, 0x36(%rsp)
jmp 0x37720e
movb 0x36(%rsp), %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, 0x35(%rsp)
jne 0x37721f
jmp 0x377241
movq 0x38(%rsp), %rax
movq 0x60(%rax), %rax
movzbl 0x3(%rax), %edi
callq 0x3778f0
movb %al, 0x34(%rsp)
jmp 0x377237
movb 0x34(%rsp), %al
movb %al, 0x35(%rsp)
jmp 0x377241
movb 0x35(%rsp), %al
andb $0x1, %al
movb %al, 0x74(%rsp)
testb $0x1, 0x75(%rsp)
je 0x377259
testb $0x1, 0x74(%rsp)
jne 0x3772a3
movq 0x38(%rsp), %rax
movq 0xb8(%rsp), %rdx
movq 0x58(%rax), %r8
movq 0x60(%rax), %rcx
leaq 0x88(%rsp), %rdi
movl $0x4, %esi
callq 0x377580
jmp 0x377282
movq 0x38(%rsp), %rdi
leaq 0x88(%rsp), %rsi
callq 0x254cc0
jmp 0x377296
movl $0x1, 0x78(%rsp)
jmp 0x3774da
movq 0x38(%rsp), %rax
movq 0x60(%rax), %rcx
addq $0x3, %rcx
movq %rcx, 0x60(%rax)
jmp 0x3772b6
movb $0x0, 0x76(%rsp)
jmp 0x3772bd
jmp 0x3772bf
jmp 0x3772c1
movq 0x38(%rsp), %rax
movq 0x60(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x60(%rax)
jmp 0x3770a3
movq 0x38(%rsp), %rdi
movq 0x60(%rdi), %rsi
callq 0x375a40
testb $0x1, %al
jne 0x3772eb
jmp 0x377335
movq 0x38(%rsp), %rax
movq 0xb8(%rsp), %rdx
movq 0x58(%rax), %r8
movq 0x60(%rax), %rcx
leaq 0x88(%rsp), %rdi
movl $0x4, %esi
callq 0x377580
jmp 0x377314
movq 0x38(%rsp), %rdi
leaq 0x88(%rsp), %rsi
callq 0x254cc0
jmp 0x377328
movl $0x1, 0x78(%rsp)
jmp 0x3774da
testb $0x1, 0x77(%rsp)
jne 0x377365
movq 0x38(%rsp), %rax
movq 0xb8(%rsp), %rsi
movq 0x58(%rax), %rcx
movq 0x60(%rax), %rdx
leaq 0x88(%rsp), %rdi
callq 0x377970
jmp 0x377360
jmp 0x3774ad
movq 0x38(%rsp), %rax
movq 0xb8(%rsp), %rcx
movq %rcx, 0x18(%rsp)
movq 0x60(%rax), %rax
movq %rax, 0x20(%rsp)
leaq 0x4f(%rsp), %rdi
movq %rdi, 0x28(%rsp)
callq 0x11b6f0
movq 0x18(%rsp), %rsi
movq 0x20(%rsp), %rdx
movq 0x28(%rsp), %rcx
leaq 0x50(%rsp), %rdi
callq 0x3779e0
jmp 0x3773aa
leaq 0x4f(%rsp), %rdi
callq 0x11b820
leaq 0x50(%rsp), %rdi
callq 0x377a60
movb %al, 0x17(%rsp)
jmp 0x3773c4
movb 0x17(%rsp), %al
testb $0x1, %al
jne 0x377459
jmp 0x3773d2
movq 0x38(%rsp), %rax
movq 0xb8(%rsp), %rdx
movq 0x58(%rax), %r8
movq 0x60(%rax), %rcx
leaq 0x88(%rsp), %rdi
movl $0x4, %esi
callq 0x377580
jmp 0x3773fb
movq 0x38(%rsp), %rdi
leaq 0x88(%rsp), %rsi
callq 0x254cc0
jmp 0x37740f
movl $0x1, 0x78(%rsp)
jmp 0x377497
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x80(%rsp)
movl %eax, 0x7c(%rsp)
leaq 0x4f(%rsp), %rdi
callq 0x11b820
jmp 0x3774ef
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x80(%rsp)
movl %eax, 0x7c(%rsp)
leaq 0x50(%rsp), %rdi
callq 0x11b838
jmp 0x3774ef
movq 0x38(%rsp), %rax
movq 0x58(%rax), %rdi
movq 0xb8(%rsp), %rsi
callq 0x22cb80
movq %rax, 0x8(%rsp)
jmp 0x377476
movq 0x8(%rsp), %rdx
leaq 0x88(%rsp), %rdi
leaq 0x50(%rsp), %rsi
callq 0x377fe0
jmp 0x37748f
movl $0x0, 0x78(%rsp)
leaq 0x50(%rsp), %rdi
callq 0x11b838
movl 0x78(%rsp), %eax
testl %eax, %eax
jne 0x3774da
jmp 0x3774ab
jmp 0x3774ad
movq 0x38(%rsp), %rdi
leaq 0x88(%rsp), %rsi
callq 0x254cc0
jmp 0x3774c1
movq 0x38(%rsp), %rax
movq 0x60(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x60(%rax)
movl $0x1, 0x78(%rsp)
leaq 0x88(%rsp), %rdi
callq 0x2512e0
addq $0xc8, %rsp
retq
leaq 0x88(%rsp), %rdi
callq 0x2512e0
movq 0x80(%rsp), %rdi
callq 0x11b4e0
nopl (%rax)