// File: /workspace/github_cpp_makefile_star2_O2/ArashPartow[P]exprtk/./exprtk.hpp
// Function: bool exprtk::function_compositor<double>::compile_expression<std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::deque>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, std::deque<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>> const&, bool)
bool compile_expression(const std::string& name,
                              const std::string& expression,
                              const Sequence<std::string,Allocator>& input_var_list,
                              bool  return_present = false)
      {
         expression_t compiled_expression;
         symbol_table_t local_symbol_table;

         local_symbol_table.load_from(symbol_table_);
         local_symbol_table.add_constants();

         if (load_variables_)
         {
            local_symbol_table.load_variables_from(symbol_table_);
         }

         if (load_vectors_)
         {
            local_symbol_table.load_vectors_from(symbol_table_);
         }

         error_list_.clear();

         if (!valid(name,input_var_list.size()))
         {
            parser_error::type error =
               parser_error::make_error(
                  parser_error::e_parser,
                  lexer::token(),
                  "ERR283 - Function '" + name + "' is an invalid overload",
                  exprtk_error_location);

            error_list_.push_back(error);
            return false;
         }

         if (!forward(name,
                      input_var_list.size(),
                      local_symbol_table,
                      return_present))
            return false;

         compiled_expression.register_symbol_table(local_symbol_table);

         for (std::size_t i = 0; i < auxiliary_symtab_list_.size(); ++i)
         {
            compiled_expression.register_symbol_table((*auxiliary_symtab_list_[i]));
         }

         std::string mod_expression;

         for (std::size_t i = 0; i < input_var_list.size(); ++i)
         {
            mod_expression += " var " + input_var_list[i] + "{};\n";
         }

         if (
              ('{' == details::front(expression)) &&
              ('}' == details::back (expression))
            )
            mod_expression += "~" + expression + ";";
         else
            mod_expression += "~{" + expression + "};";

         if (!parser_.compile(mod_expression,compiled_expression))
         {
            exprtk_debug(("Compositor Error: %s\n", parser_.error().c_str()));
            exprtk_debug(("Compositor modified expression: \n%s\n", mod_expression.c_str()));

            remove(name,input_var_list.size());

            for (std::size_t err_index = 0; err_index < parser_.error_count(); ++err_index)
            {
               error_list_.push_back(parser_.get_error(err_index));
            }

            return false;
         }

         if (!return_present && parser_.dec().return_present())
         {
            remove(name,input_var_list.size());
            return compile_expression(name, expression, input_var_list, true);
         }

         // Make sure every return point has a scalar as its first parameter
         if (parser_.dec().return_present())
         {
            typedef std::vector<std::string> str_list_t;

            str_list_t ret_param_list = parser_.dec().return_param_type_list();

            for (std::size_t i = 0; i < ret_param_list.size(); ++i)
            {
               const std::string& params = ret_param_list[i];

               if (params.empty() || ('T' != params[0]))
               {
                  exprtk_debug(("Compositor Error: Return statement in function '%s' is invalid\n",
                                name.c_str()));

                  remove(name,input_var_list.size());

                  return false;
               }
            }
         }

         expr_map_[name] = compiled_expression;

         exprtk::ifunction<T>& ifunc = (*(fp_map_[input_var_list.size()])[name]);

         if (symbol_table_.add_function(name,ifunc))
            return true;
         else
         {
            exprtk_debug(("Compositor Error: Failed to add function '%s' to symbol table\n",
                          name.c_str()));
            return false;
         }
      }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x1a8, %rsp            # imm = 0x1A8
movl %r8d, %r15d
movq %rcx, %r13
movq %rdx, %r14
movq %rsi, %r12
movq %rdi, %rbx
leaq 0x80(%rsp), %rdi
callq 0x194918
leaq 0x8(%rsp), %rdi
pushq $0x1
popq %rsi
callq 0x19486e
leaq 0x8(%rsp), %rdi
movq %rbx, %rsi
callq 0x2c7e70
leaq 0x8(%rsp), %rdi
callq 0x194892
cmpb $0x1, 0x9e0(%rbx)
jne 0x2c7463
leaq 0x8(%rsp), %rdi
movq %rbx, %rsi
callq 0x2c810e
cmpb $0x1, 0x9e1(%rbx)
jne 0x2c7479
leaq 0x8(%rsp), %rdi
movq %rbx, %rsi
callq 0x2c81b4
leaq 0x990(%rbx), %rbp
movq %rbp, %rdi
callq 0x1f5dc2
movq %r13, %rdi
callq 0x2bccec
leaq 0xa0(%rsp), %rdx
movq %rax, (%rdx)
movq %rbx, %rdi
movq %r12, %rsi
callq 0x2c828e
testb %al, %al
je 0x2c7533
movq %r13, %rdi
callq 0x2bccec
leaq 0xa0(%rsp), %rdx
movq %rax, (%rdx)
movzbl %r15b, %r8d
leaq 0x8(%rsp), %rcx
movq %rbx, %rdi
movq %r12, %rsi
callq 0x2c82de
testb %al, %al
je 0x2c7615
leaq 0x80(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x194978
movl %r15d, 0x34(%rsp)
movq %r14, 0x48(%rsp)
xorl %r15d, %r15d
leaq 0x80(%rsp), %r14
movq 0x978(%rbx), %rax
movq 0x980(%rbx), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
cmpq %rcx, %r15
jae 0x2c761c
movq (%rax,%r15,8), %rsi
movq %r14, %rdi
callq 0x194978
incq %r15
jmp 0x2c7504
leaq 0x50(%rsp), %rdi
callq 0x19e4ae
leaq 0x394f6(%rip), %rsi     # 0x300a3a
leaq 0x188(%rsp), %rdi
movq %r12, %rdx
callq 0x1f8aab
leaq 0x394f3(%rip), %rdx     # 0x300a4e
leaq 0x10(%rsp), %rdi
leaq 0x188(%rsp), %rsi
callq 0x1b42c3
leaq 0x148(%rsp), %rdi
movl $0xaa3b, %esi           # imm = 0xAA3B
callq 0x1f7a3c
leaq 0x12675(%rip), %rsi     # 0x2d9bfb
leaq 0x168(%rsp), %rdi
leaq 0x148(%rsp), %rdx
callq 0x1b4349
leaq 0xa0(%rsp), %rdi
pushq $0x9
popq %rsi
leaq 0x50(%rsp), %rdx
leaq 0x10(%rsp), %rcx
leaq 0x168(%rsp), %r8
callq 0x1f7341
leaq 0x168(%rsp), %rdi
callq 0x118648
leaq 0x148(%rsp), %rdi
callq 0x118648
leaq 0x10(%rsp), %rdi
callq 0x118648
leaq 0x188(%rsp), %rdi
callq 0x118648
leaq 0x58(%rsp), %rdi
callq 0x118648
leaq 0xa0(%rsp), %rsi
movq %rbp, %rdi
callq 0x1f76ce
leaq 0xa0(%rsp), %rdi
callq 0x1f5c4c
xorl %ebx, %ebx
jmp 0x2c792d
movq %rbp, 0x38(%rsp)
movq %r12, 0x40(%rsp)
leaq 0x60(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb $0x0, (%rax)
movq %r13, %r15
addq $0x10, %r13
xorl %ebp, %ebp
leaq 0x10(%rsp), %r12
leaq 0xa0(%rsp), %r14
movq %r15, %rdi
callq 0x2bccec
cmpq %rax, %rbp
jae 0x2c76ab
movq %r13, %rdi
movq %rbp, %rsi
callq 0x2bdf10
movq %r12, %rdi
leaq 0x393f8(%rip), %rsi     # 0x300a67
movq %rax, %rdx
callq 0x1f8aab
movq %r14, %rdi
movq %r12, %rsi
leaq 0x393e9(%rip), %rdx     # 0x300a6d
callq 0x1b42c3
leaq 0x50(%rsp), %rdi
movq %r14, %rsi
callq 0x118460
movq %r14, %rdi
callq 0x118648
movq %r12, %rdi
callq 0x118648
incq %rbp
jmp 0x2c764d
movq 0x48(%rsp), %rdx
movq (%rdx), %rax
cmpb $0x7b, (%rax)
jne 0x2c770b
movq 0x8(%rdx), %rcx
cmpb $0x7d, -0x1(%rax,%rcx)
jne 0x2c770b
leaq 0x12af6(%rip), %rsi     # 0x2da1c0
leaq 0x10(%rsp), %rdi
callq 0x1f8aab
movq 0x40(%rsp), %r14
movq 0x38(%rsp), %rbp
leaq 0x2e7fa(%rip), %rdx     # 0x2f5edf
leaq 0xa0(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x1b42c3
leaq 0x50(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
callq 0x118460
jmp 0x2c7751
leaq 0x39360(%rip), %rsi     # 0x300a72
leaq 0x10(%rsp), %rdi
callq 0x1f8aab
movq 0x40(%rsp), %r14
movq 0x38(%rsp), %rbp
leaq 0x433d1(%rip), %rdx     # 0x30aafe
leaq 0xa0(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x1b42c3
leaq 0x50(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
callq 0x118460
leaq 0xa0(%rsp), %rdi
callq 0x118648
leaq 0x10(%rsp), %rdi
callq 0x118648
leaq 0x8(%rbx), %r13
leaq 0x50(%rsp), %rsi
leaq 0x80(%rsp), %rdx
movq %r13, %rdi
callq 0x195144
testb %al, %al
je 0x2c77d8
movb 0x2c3(%rbx), %al
cmpb $0x0, 0x34(%rsp)
jne 0x2c784e
testb $0x1, %al
je 0x2c784e
movq %r15, %rdi
callq 0x2bccec
leaq 0xa0(%rsp), %rdx
movq %rax, (%rdx)
movq %rbx, %rdi
movq %r14, %rsi
callq 0x2c734e
pushq $0x1
popq %r8
movq %rbx, %rdi
movq %r14, %rsi
movq 0x48(%rsp), %rdx
movq %r15, %rcx
callq 0x2c73fc
jmp 0x2c7921
movq %r15, %rdi
callq 0x2bccec
leaq 0xa0(%rsp), %rdx
movq %rax, (%rdx)
movq %rbx, %rdi
movq %r14, %rsi
callq 0x2c734e
addq $0x310, %rbx            # imm = 0x310
xorl %r12d, %r12d
leaq 0xa0(%rsp), %r14
leaq 0x10(%rsp), %r15
movq %r12, 0x10(%rsp)
movq %rbx, %rdi
callq 0x1f7846
cmpq %rax, %r12
jae 0x2c78c8
movq %r14, %rdi
movq %r13, %rsi
movq %r15, %rdx
callq 0x2c84b0
movq %rbp, %rdi
movq %r14, %rsi
callq 0x2caa16
movq %r14, %rdi
callq 0x1f5c4c
movq 0x10(%rsp), %r12
incq %r12
jmp 0x2c780d
testb $0x1, %al
je 0x2c78d9
leaq 0x2f8(%rbx), %rsi
leaq 0xa0(%rsp), %rdi
callq 0x2c9e30
movq 0xa0(%rsp), %rax
movq 0xa8(%rsp), %rcx
subq %rax, %rcx
sarq $0x5, %rcx
incq %rcx
addq $0x8, %rax
decq %rcx
je 0x2c78cc
cmpq $0x0, (%rax)
je 0x2c78a0
movq -0x8(%rax), %rdx
addq $0x20, %rax
cmpb $0x54, (%rdx)
je 0x2c7888
movq %r15, %rdi
callq 0x2bccec
leaq 0x10(%rsp), %rdx
movq %rax, (%rdx)
movq %rbx, %rdi
movq %r14, %rsi
callq 0x2c734e
leaq 0xa0(%rsp), %rdi
callq 0x1f5c78
xorl %ebx, %ebx
jmp 0x2c7923
leaq 0xa0(%rsp), %rdi
callq 0x1f5c78
leaq 0x930(%rbx), %rdi
movq %r14, %rsi
callq 0x2c7c82
leaq 0x80(%rsp), %rsi
movq %rax, %rdi
callq 0x2c8544
movq %r15, %rdi
callq 0x2bccec
imulq $0x30, %rax, %rdi
addq 0x960(%rbx), %rdi
movq %r14, %rsi
callq 0x2c7a7c
movq (%rax), %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x1948b8
movl %eax, %ebx
leaq 0x50(%rsp), %rdi
callq 0x118648
leaq 0x8(%rsp), %rdi
callq 0x195790
leaq 0x80(%rsp), %rdi
callq 0x19577a
movl %ebx, %eax
addq $0x1a8, %rsp            # imm = 0x1A8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
leaq 0xa0(%rsp), %rdi
callq 0x1f5c78
jmp 0x2c7a4d
jmp 0x2c7a4a
jmp 0x2c7a4a
jmp 0x2c7a29
jmp 0x2c7a3b
jmp 0x2c7a4a
jmp 0x2c7a4a
jmp 0x2c7a4a
jmp 0x2c7a29
jmp 0x2c7a3b
jmp 0x2c7a4a
jmp 0x2c7a4a
movq %rax, %rbx
leaq 0xa0(%rsp), %rdi
callq 0x1f5c4c
jmp 0x2c7a5c
movq %rax, %rbx
leaq 0x168(%rsp), %rdi
callq 0x118648
jmp 0x2c79ce
movq %rax, %rbx
leaq 0x148(%rsp), %rdi
callq 0x118648
jmp 0x2c79e0
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x118648
jmp 0x2c79ef
movq %rax, %rbx
leaq 0x188(%rsp), %rdi
callq 0x118648
jmp 0x2c7a01
movq %rax, %rbx
leaq 0x58(%rsp), %rdi
jmp 0x2c7a52
jmp 0x2c7a59
jmp 0x2c7a59
jmp 0x2c7a59
movq %rax, %rbx
jmp 0x2c7a66
jmp 0x2c7a59
jmp 0x2c7a4a
movq %rax, %rbx
leaq 0xa0(%rsp), %rdi
callq 0x1f5c4c
jmp 0x2c7a4d
movq %rax, %rbx
leaq 0xa0(%rsp), %rdi
callq 0x118648
jmp 0x2c7a3e
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x118648
jmp 0x2c7a4d
movq %rax, %rbx
leaq 0x50(%rsp), %rdi
callq 0x118648
jmp 0x2c7a5c
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0x195790
leaq 0x80(%rsp), %rdi
callq 0x19577a
movq %rbx, %rdi
callq 0x118360
nop