// File: /workspace/github_cpp_makefile_star2_O2/ArashPartow[P]exprtk-extras/exprtk_repl.cpp
// Function: expression_processor<double>::process(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)
void process(std::string program)
   {
      program = trim_whitespace(program);

      if (program.empty())
         return;

      setup_symbol_table();

      expression_t expression;
      expression.register_symbol_table(symbol_table_);
      expression.register_symbol_table(function_symbol_table_);

      exprtk::timer compile_timer;
      compile_timer.start();

      if (enable_usr_)
         parser_.enable_unknown_symbol_resolver();
      else
         parser_.disable_unknown_symbol_resolver();

      if (disable_local_vardef_)
         parser_.settings().disable_local_vardef();
      else
         parser_.settings().enable_local_vardef();

      parser_.dec().collect_variables() = symbol_dump_;
      parser_.dec().collect_functions() = symbol_dump_;

      parser_.dec().collect_assignments() = assignment_dump_;

      if (!parser_.compile(program,expression))
      {
         printf("Error: %s\tExpression:%c%s\n",
                parser_.error().c_str(),
                ((std::string::npos != program.find_first_of('\n')) ? '\n' : ' '),
                ((program.size() < 200) ? program.c_str() : "....."));

         for (std::size_t i = 0; i < parser_.error_count(); ++i)
         {
            error_t error = parser_.get_error(i);

            printf("Err No.: %02d  Pos: %02d  Type: [%14s] Msg: %s\n",
                   static_cast<unsigned int>(i),
                   static_cast<unsigned int>(error.token.position),
                   exprtk::parser_error::to_str(error.mode).c_str(),
                   error.diagnostic.c_str());

            if (
                 (0 == i) &&
                 exprtk::parser_error::update_error(error,program)
               )
            {
               printf("Error (line: %d column: %d)\n",
                      static_cast<unsigned int>(error.line_no),
                      static_cast<unsigned int>(error.column_no));

               printf("%s \n",error.error_line.c_str());
               printf("%s^\n",std::string(error.column_no,'~').c_str());
            }
         }

         return;
      }

      compile_timer.stop();

      if (display_total_compile_time_)
      {
         printf("\nCompile time: %6.3fms\n",compile_timer.time() * 1000.0);
      }

      if (batch_runs_cnt_)
      {
         std::vector<double> timings(batch_runs_cnt_,0.0);

         exprtk::timer total_timer;
         exprtk::timer timer;

         T result = T(0);

         total_timer.start();

         for (std::size_t i = 0; i < batch_runs_cnt_; ++i)
         {
            timer.start();

            result = expression.value();

            timer.stop();

            timings[i] = timer.time() * 1000.0;
         }

         total_timer.stop();

         printf("\nResult: %15.9f\n",result);

         std::sort(timings.begin(),timings.end());

         printf("\nRuns: %4d  Time min: %7.3fms   max: %7.3fms   avg: %7.3fms   tot: %7.3fms   90%%:%7.3fms\n",
                static_cast<unsigned int>(batch_runs_cnt_),
                timings.front(),
                timings.back (),
                std::accumulate(timings.begin(),timings.end(),0.0) / timings.size(),
                total_timer.time() * 1000.0,
                timings[static_cast<int>(timings.size() * 0.90)]);

         return;
      }

      exprtk::timer timer;
      timer.start();

      const T result = expression.value();

      timer.stop();

      if (expression.results().count())
      {
         print_results(expression.results());
      }

      printf("\nResult: %15.9f\n",result);

      if (display_total_time_)
      {
         printf("\nTotal time: %6.3fms\n",timer.time() * 1000.0);
      }

      if (symbol_dump_)
      {
         symbol_list_t symbol_list;

         parser_.dec().symbols(symbol_list);

         printf("------ Symbols ------\n");
         perform_symbol_dump(symbol_list);
         printf("---------------------\n");
      }

      if (assignment_dump_)
      {
         symbol_list_t assignment_list;

         parser_.dec().assignment_symbols(assignment_list);

         printf("---- Assignments ----\n");
         perform_symbol_dump(assignment_list);
         printf("---------------------\n");
      }
   }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x168, %rsp            # imm = 0x168
movq %rsi, %r12
movq %rdi, %rbx
leaq 0x120(%rsp), %r14
movq %r14, %rdi
callq 0x116360
leaq 0x78(%rsp), %rdi
movq %rbx, %rsi
movq %r14, %rdx
callq 0x24d3b2
leaq 0x78(%rsp), %r14
movq %r12, %rdi
movq %r14, %rsi
callq 0x116340
movq %r14, %rdi
callq 0x116778
leaq 0x120(%rsp), %rdi
callq 0x116778
cmpq $0x0, 0x8(%r12)
je 0x11a02d
movq %rbx, %rdi
callq 0x24e2e4
leaq 0x48(%rsp), %r14
movq %r14, %rdi
callq 0x185060
leaq 0x10(%rbx), %rsi
movq %r14, %rdi
callq 0x18582e
leaq 0x18(%rbx), %rsi
leaq 0x48(%rsp), %rdi
callq 0x18582e
leaq 0x140(%rsp), %rdi
movb $0x0, (%rdi)
xorpd %xmm0, %xmm0
movupd %xmm0, 0x8(%rdi)
movupd %xmm0, 0x18(%rdi)
callq 0x24e35c
movb 0x5(%rbx), %al
leaq 0x400(%rbx), %rcx
movb %al, 0x3e8(%rbx)
movq %rcx, 0x3f8(%rbx)
movb 0x6(%rbx), %al
movb %al, 0xfa(%rbx)
leaq 0x20(%rbx), %r15
movb 0x1(%rbx), %al
movb 0x2(%rbx), %cl
movb %al, 0x2d8(%rbx)
movb %al, 0x2d9(%rbx)
movb %cl, 0x2da(%rbx)
leaq 0x48(%rsp), %rdx
movq %r15, %rdi
movq %r12, %rsi
callq 0x18588a
testb %al, %al
je 0x119c33
leaq 0x140(%rsp), %rdi
callq 0x24e55a
cmpb $0x1, 0x4(%rbx)
jne 0x119b85
leaq 0x140(%rsp), %rdi
callq 0x24e56e
mulsd 0x136491(%rip), %xmm0   # 0x250008
leaq 0x1406e1(%rip), %rdi    # 0x25a25f
movb $0x1, %al
callq 0x116080
movq 0x8(%rbx), %rsi
testq %rsi, %rsi
je 0x119ede
leaq 0x78(%rsp), %rdx
andq $0x0, (%rdx)
leaq 0x8(%rsp), %rdi
leaq 0x20(%rsp), %rcx
callq 0x1882e2
xorl %r15d, %r15d
leaq 0x78(%rsp), %rdi
movb %r15b, (%rdi)
xorpd %xmm0, %xmm0
movupd %xmm0, 0x8(%rdi)
movupd %xmm0, 0x18(%rdi)
leaq 0x20(%rsp), %r14
movb %r15b, (%r14)
movupd %xmm0, 0x8(%r14)
movupd %xmm0, 0x18(%r14)
callq 0x24e35c
xorpd %xmm0, %xmm0
movsd %xmm0, (%rsp)
cmpq 0x8(%rbx), %r15
jae 0x119c7a
movq %r14, %rdi
callq 0x24e35c
movq 0x48(%rsp), %rax
movq 0x8(%rax), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
movsd %xmm0, (%rsp)
movq %r14, %rdi
callq 0x24e55a
movq %r14, %rdi
callq 0x24e56e
mulsd 0x1363e5(%rip), %xmm0   # 0x250008
movq 0x8(%rsp), %rax
movsd %xmm0, (%rax,%r15,8)
incq %r15
jmp 0x119be5
leaq 0x78(%rsp), %rdi
movq %r15, %rsi
callq 0x24e36a
movq 0x78(%rsp), %r14
pushq $0xa
popq %rbp
movq %r12, %rdi
movl %ebp, %esi
xorl %edx, %edx
callq 0x116690
cmpq $-0x1, %rax
pushq $0x20
popq %rdx
cmovnel %ebp, %edx
cmpq $0xc7, 0x8(%r12)
movq %r12, (%rsp)
ja 0x119da8
movq (%r12), %rcx
jmp 0x119daf
leaq 0x78(%rsp), %rdi
callq 0x24e55a
leaq 0x1405ec(%rip), %rdi    # 0x25a277
movsd (%rsp), %xmm0
movb $0x1, %al
callq 0x116080
movq 0x8(%rsp), %rdi
movq 0x10(%rsp), %rsi
callq 0x24e956
movq 0x8(%rbx), %rbx
movq 0x8(%rsp), %r15
movq 0x10(%rsp), %r14
movsd (%r15), %xmm0
movsd %xmm0, 0x70(%rsp)
movsd -0x8(%r14), %xmm0
movsd %xmm0, 0x68(%rsp)
xorpd %xmm0, %xmm0
movsd %xmm0, (%rsp)
movq %r15, %rax
cmpq %r14, %rax
je 0x119cf0
movsd (%rsp), %xmm0
addsd (%rax), %xmm0
movsd %xmm0, (%rsp)
addq $0x8, %rax
jmp 0x119cd7
leaq 0x78(%rsp), %rdi
callq 0x24e56e
movapd %xmm0, %xmm3
subq %r15, %r14
sarq $0x3, %r14
movq %r14, %xmm0
movq 0x1363ce(%rip), %xmm1   # 0x2500e0
punpckldq %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
movapd 0x1363d2(%rip), %xmm5   # 0x2500f0
subpd %xmm5, %xmm0
movapd %xmm0, %xmm4
unpckhpd %xmm0, %xmm4            # xmm4 = xmm4[1],xmm0[1]
addsd %xmm0, %xmm4
movsd (%rsp), %xmm2
divsd %xmm4, %xmm2
mulsd 0x1362c9(%rip), %xmm3   # 0x250008
leaq 0x8(%rsp), %r14
movq (%r14), %rax
movq 0x8(%r14), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
movq %rcx, %xmm0
punpckldq %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
subpd %xmm5, %xmm0
movapd %xmm0, %xmm1
unpckhpd %xmm0, %xmm1            # xmm1 = xmm1[1],xmm0[1]
addsd %xmm0, %xmm1
mulsd 0x13629d(%rip), %xmm1   # 0x250010
cvttsd2si %xmm1, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm4
leaq 0x140502(%rip), %rdi    # 0x25a288
movl %ebx, %esi
movsd 0x70(%rsp), %xmm0
movsd 0x68(%rsp), %xmm1
movb $0x5, %al
callq 0x116080
movq %r14, %rdi
callq 0x1880b4
jmp 0x11a023
leaq 0x140453(%rip), %rcx    # 0x25a202
leaq 0x140431(%rip), %rdi    # 0x25a1e7
movq %r14, %rsi
xorl %eax, %eax
callq 0x116080
leaq 0x78(%rsp), %r12
movq %r12, %rdi
callq 0x116778
addq $0x328, %rbx            # imm = 0x328
leaq 0x20(%rsp), %rbp
xorl %r14d, %r14d
movq %r14, 0x8(%rsp)
movq %rbx, %rdi
callq 0x18733a
cmpq %rax, %r14
jae 0x11a023
movq %r12, %rdi
movq %r15, %rsi
leaq 0x8(%rsp), %rdx
callq 0x185d0c
movq 0x8(%rsp), %r13
movq 0xa0(%rsp), %r14
movl 0xa8(%rsp), %esi
movq %rbp, %rdi
callq 0x24e3be
movq 0x20(%rsp), %rcx
movq 0xb0(%rsp), %r8
leaq 0x1403d6(%rip), %rdi    # 0x25a208
movl %r13d, %esi
movl %r14d, %edx
xorl %eax, %eax
callq 0x116080
movq %rbp, %rdi
callq 0x116778
cmpq $0x0, 0x8(%rsp)
jne 0x119ec9
movq %r12, %rdi
movq (%rsp), %rsi
callq 0x24e46a
testb %al, %al
je 0x119ec9
movl 0x110(%rsp), %esi
movl 0x118(%rsp), %edx
leaq 0x1403c4(%rip), %rdi    # 0x25a238
xorl %eax, %eax
callq 0x116080
movq 0xf0(%rsp), %rsi
leaq 0x1403cb(%rip), %rdi    # 0x25a255
xorl %eax, %eax
callq 0x116080
movq 0x118(%rsp), %rsi
leaq 0x30(%rsp), %rax
movq %rax, 0x20(%rsp)
movq %rbp, %rdi
pushq $0x7e
popq %rdx
callq 0x116390
movq 0x20(%rsp), %rsi
leaq 0x1403a0(%rip), %rdi    # 0x25a25a
xorl %eax, %eax
callq 0x116080
movq %rbp, %rdi
callq 0x116778
movq %r12, %rdi
callq 0x179702
movq 0x8(%rsp), %r14
incq %r14
jmp 0x119ddc
leaq 0x78(%rsp), %rdi
movb $0x0, (%rdi)
xorpd %xmm0, %xmm0
movupd %xmm0, 0x8(%rdi)
movupd %xmm0, 0x18(%rdi)
callq 0x24e35c
movq 0x48(%rsp), %rax
movq 0x8(%rax), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
movsd %xmm0, (%rsp)
leaq 0x78(%rsp), %rdi
callq 0x24e55a
leaq 0x48(%rsp), %rdi
callq 0x188eba
cmpb $0x1, (%rax)
jne 0x119f45
movq 0x10(%rax), %rcx
cmpq 0x8(%rax), %rcx
je 0x119f45
leaq 0x48(%rsp), %rdi
callq 0x188eba
movq %rbx, %rdi
movq %rax, %rsi
callq 0x24e5a0
leaq 0x14032b(%rip), %rdi    # 0x25a277
movsd (%rsp), %xmm0
movb $0x1, %al
callq 0x116080
cmpb $0x1, 0x3(%rbx)
jne 0x119f7e
leaq 0x78(%rsp), %rdi
callq 0x24e56e
mulsd 0x136098(%rip), %xmm0   # 0x250008
leaq 0x14036c(%rip), %rdi    # 0x25a2e3
movb $0x1, %al
callq 0x116080
leaq 0x2d0(%rbx), %r14
cmpb $0x1, 0x1(%rbx)
jne 0x119fd4
xorpd %xmm0, %xmm0
leaq 0x20(%rsp), %rsi
movapd %xmm0, (%rsi)
andq $0x0, 0x10(%rsi)
movq %r14, %rdi
callq 0x24e7a6
leaq 0x140488(%rip), %rdi    # 0x25a434
callq 0x116660
leaq 0x20(%rsp), %rsi
movq %rbx, %rdi
callq 0x24e832
leaq 0x1404f4(%rip), %rdi    # 0x25a4b9
callq 0x116660
leaq 0x20(%rsp), %rdi
callq 0x179750
cmpb $0x1, 0x2(%rbx)
jne 0x11a023
xorpd %xmm0, %xmm0
leaq 0x20(%rsp), %rsi
movapd %xmm0, (%rsi)
andq $0x0, 0x10(%rsi)
movq %r14, %rdi
callq 0x24e8ac
leaq 0x14044f(%rip), %rdi    # 0x25a44a
callq 0x116660
leaq 0x20(%rsp), %rsi
movq %rbx, %rdi
callq 0x24e832
leaq 0x1404a5(%rip), %rdi    # 0x25a4b9
callq 0x116660
leaq 0x20(%rsp), %rdi
callq 0x179750
leaq 0x48(%rsp), %rdi
callq 0x179bac
addq $0x168, %rsp            # imm = 0x168
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x11a041
movq %rax, %rbx
leaq 0x20(%rsp), %rdi
callq 0x179750
jmp 0x11a093
jmp 0x11a072
jmp 0x11a072
jmp 0x11a072
jmp 0x11a086
jmp 0x11a072
movq %rax, %rbx
leaq 0x120(%rsp), %rdi
callq 0x116778
jmp 0x11a09d
jmp 0x11a072
jmp 0x11a077
jmp 0x11a077
movq %rax, %rbx
jmp 0x11a093
movq %rax, %rbx
leaq 0x78(%rsp), %rdi
callq 0x179702
jmp 0x11a093
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0x1880b4
leaq 0x48(%rsp), %rdi
callq 0x179bac
movq %rbx, %rdi
callq 0x116400
nop