// File: ArashPartow[P]exprtk/./exprtk.hpp
// Function: exprtk::lexer::generator::scan_number()
inline void scan_number()
         {
            /*
               Attempt to match a valid numeric value in one of the following formats:
               (01) 123456
               (02) 123456.
               (03) 123.456
               (04) 123.456e3
               (05) 123.456E3
               (06) 123.456e+3
               (07) 123.456E+3
               (08) 123.456e-3
               (09) 123.456E-3
               (00) .1234
               (11) .1234e3
               (12) .1234E+3
               (13) .1234e+3
               (14) .1234E-3
               (15) .1234e-3
            */

            details::char_cptr initial_itr = s_itr_;
            bool dot_found                 = false;
            bool e_found                   = false;
            bool post_e_sign_found         = false;
            bool post_e_digit_found        = false;
            token_t t;

            while (!is_end(s_itr_))
            {
               if ('.' == (*s_itr_))
               {
                  if (dot_found)
                  {
                     t.set_error(token::e_err_number, initial_itr, s_itr_, base_itr_);
                     token_list_.push_back(t);

                     return;
                  }

                  dot_found = true;
                  ++s_itr_;

                  continue;
               }
               else if ('e' == std::tolower(*s_itr_))
               {
                  const char_t& c = *(s_itr_ + 1);

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

                     return;
                  }
                  else if (
                            ('+' != c) &&
                            ('-' != c) &&
                            !details::is_digit(c)
                          )
                  {
                     t.set_error(token::e_err_number, initial_itr, s_itr_, base_itr_);
                     token_list_.push_back(t);

                     return;
                  }

                  e_found = true;
                  ++s_itr_;

                  continue;
               }
               else if (e_found && details::is_sign(*s_itr_) && !post_e_digit_found)
               {
                  if (post_e_sign_found)
                  {
                     t.set_error(token::e_err_number, initial_itr, s_itr_, base_itr_);
                     token_list_.push_back(t);

                     return;
                  }

                  post_e_sign_found = true;
                  ++s_itr_;

                  continue;
               }
               else if (e_found && details::is_digit(*s_itr_))
               {
                  post_e_digit_found = true;
                  ++s_itr_;

                  continue;
               }
               else if (('.' != (*s_itr_)) && !details::is_digit(*s_itr_))
                  break;
               else
                  ++s_itr_;
            }

            t.set_numeric(initial_itr, s_itr_, base_itr_);
            token_list_.push_back(t);

            return;
         }

// Assembly:
subq $0x78, %rsp
movq %rdi, 0x70(%rsp)
movq 0x70(%rsp), %rax
movq %rax, 0x10(%rsp)
movq 0x60(%rax), %rax
movq %rax, 0x68(%rsp)
movb $0x0, 0x67(%rsp)
movb $0x0, 0x66(%rsp)
movb $0x0, 0x65(%rsp)
movb $0x0, 0x64(%rsp)
leaq 0x30(%rsp), %rdi
callq 0x251250
movq 0x10(%rsp), %rdi
movq 0x60(%rdi), %rsi
callq 0x375a40
xorb $-0x1, %al
testb $0x1, %al
jne 0x376a83
jmp 0x376d4c
movq 0x10(%rsp), %rax
movq 0x60(%rax), %rax
movsbl (%rax), %ecx
movl $0x2e, %eax
cmpl %ecx, %eax
jne 0x376b1c
testb $0x1, 0x67(%rsp)
je 0x376b01
movq 0x10(%rsp), %rax
movq 0x68(%rsp), %rdx
movq 0x58(%rax), %r8
movq 0x60(%rax), %rcx
leaq 0x30(%rsp), %rdi
movl $0x3, %esi
callq 0x377580
jmp 0x376ac6
movq 0x10(%rsp), %rdi
leaq 0x30(%rsp), %rsi
callq 0x254cc0
jmp 0x376ad7
movl $0x1, 0x20(%rsp)
jmp 0x376d83
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x28(%rsp)
movl %eax, 0x24(%rsp)
leaq 0x30(%rsp), %rdi
callq 0x2512e0
jmp 0x376d92
movq 0x10(%rsp), %rax
movb $0x1, 0x67(%rsp)
movq 0x60(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x60(%rax)
jmp 0x376a6a
movq 0x10(%rsp), %rax
movq 0x60(%rax), %rax
movsbl (%rax), %edi
callq 0x11b5f0
movl %eax, %ecx
movl $0x65, %eax
cmpl %ecx, %eax
jne 0x376c33
movq 0x10(%rsp), %rdi
movq 0x60(%rdi), %rax
addq $0x1, %rax
movq %rax, 0x18(%rsp)
movq 0x60(%rdi), %rsi
addq $0x1, %rsi
callq 0x375a40
testb $0x1, %al
jne 0x376b61
jmp 0x376ba2
movq 0x10(%rsp), %rax
movq 0x68(%rsp), %rdx
movq 0x58(%rax), %r8
movq 0x60(%rax), %rcx
leaq 0x30(%rsp), %rdi
movl $0x3, %esi
callq 0x377580
jmp 0x376b84
movq 0x10(%rsp), %rdi
leaq 0x30(%rsp), %rsi
callq 0x254cc0
jmp 0x376b95
movl $0x1, 0x20(%rsp)
jmp 0x376d83
movq 0x18(%rsp), %rax
movsbl (%rax), %ecx
movl $0x2b, %eax
cmpl %ecx, %eax
je 0x376c16
movq 0x18(%rsp), %rax
movsbl (%rax), %ecx
movl $0x2d, %eax
cmpl %ecx, %eax
je 0x376c16
movq 0x18(%rsp), %rax
movsbl (%rax), %edi
callq 0x2343b0
testb $0x1, %al
jne 0x376c16
movq 0x10(%rsp), %rax
movq 0x68(%rsp), %rdx
movq 0x58(%rax), %r8
movq 0x60(%rax), %rcx
leaq 0x30(%rsp), %rdi
movl $0x3, %esi
callq 0x377580
jmp 0x376bf8
movq 0x10(%rsp), %rdi
leaq 0x30(%rsp), %rsi
callq 0x254cc0
jmp 0x376c09
movl $0x1, 0x20(%rsp)
jmp 0x376d83
jmp 0x376c18
movq 0x10(%rsp), %rax
movb $0x1, 0x66(%rsp)
movq 0x60(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x60(%rax)
jmp 0x376a6a
testb $0x1, 0x66(%rsp)
je 0x376cc9
movq 0x10(%rsp), %rax
movq 0x60(%rax), %rax
movsbl (%rax), %edi
callq 0x377780
movb %al, 0xf(%rsp)
jmp 0x376c55
movb 0xf(%rsp), %al
testb $0x1, %al
jne 0x376c5f
jmp 0x376cc9
testb $0x1, 0x64(%rsp)
jne 0x376cc9
testb $0x1, 0x65(%rsp)
je 0x376cae
movq 0x10(%rsp), %rax
movq 0x68(%rsp), %rdx
movq 0x58(%rax), %r8
movq 0x60(%rax), %rcx
leaq 0x30(%rsp), %rdi
movl $0x3, %esi
callq 0x377580
jmp 0x376c90
movq 0x10(%rsp), %rdi
leaq 0x30(%rsp), %rsi
callq 0x254cc0
jmp 0x376ca1
movl $0x1, 0x20(%rsp)
jmp 0x376d83
movq 0x10(%rsp), %rax
movb $0x1, 0x65(%rsp)
movq 0x60(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x60(%rax)
jmp 0x376a6a
testb $0x1, 0x66(%rsp)
je 0x376d02
movq 0x10(%rsp), %rax
movq 0x60(%rax), %rax
movsbl (%rax), %edi
callq 0x2343b0
testb $0x1, %al
jne 0x376ce7
jmp 0x376d02
movq 0x10(%rsp), %rax
movb $0x1, 0x64(%rsp)
movq 0x60(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x60(%rax)
jmp 0x376a6a
movq 0x10(%rsp), %rax
movq 0x60(%rax), %rax
movsbl (%rax), %ecx
movl $0x2e, %eax
cmpl %ecx, %eax
je 0x376d2e
movq 0x10(%rsp), %rax
movq 0x60(%rax), %rax
movsbl (%rax), %edi
callq 0x2343b0
testb $0x1, %al
jne 0x376d2e
jmp 0x376d4c
movq 0x10(%rsp), %rax
movq 0x60(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x60(%rax)
jmp 0x376d41
jmp 0x376d43
jmp 0x376d45
jmp 0x376d47
jmp 0x376a6a
movq 0x10(%rsp), %rax
movq 0x68(%rsp), %rsi
movq 0x58(%rax), %rcx
movq 0x60(%rax), %rdx
leaq 0x30(%rsp), %rdi
callq 0x3777c0
jmp 0x376d6a
movq 0x10(%rsp), %rdi
leaq 0x30(%rsp), %rsi
callq 0x254cc0
jmp 0x376d7b
movl $0x1, 0x20(%rsp)
leaq 0x30(%rsp), %rdi
callq 0x2512e0
addq $0x78, %rsp
retq
movq 0x28(%rsp), %rdi
callq 0x11b4e0
nopl (%rax)