// File: /workspace/github_cpp_makefile_star2_O2/ArashPartow[P]exprtk/./exprtk.hpp
// Function: exprtk::parser<double>::parse_conditional_statement_01(exprtk::details::expression_node<double>*)
inline expression_node_ptr parse_conditional_statement_01(expression_node_ptr condition)
      {
         // Parse: [if][(][condition][,][consequent][,][alternative][)]

         expression_node_ptr consequent  = error_node();
         expression_node_ptr alternative = error_node();

         bool result = true;

         if (!token_is(token_t::e_comma))
         {
            set_error(make_error(
               parser_error::e_syntax,
               current_token(),
               "ERR035 - Expected ',' between if-statement condition and consequent",
               exprtk_error_location));

            result = false;
         }
         else if (0 == (consequent = parse_expression()))
         {
            set_error(make_error(
               parser_error::e_syntax,
               current_token(),
               "ERR036 - Failed to parse consequent for if-statement",
               exprtk_error_location));

            result = false;
         }
         else if (!token_is(token_t::e_comma))
         {
            set_error(make_error(
               parser_error::e_syntax,
               current_token(),
               "ERR037 - Expected ',' between if-statement consequent and alternative",
               exprtk_error_location));

            result = false;
         }
         else if (0 == (alternative = parse_expression()))
         {
            set_error(make_error(
               parser_error::e_syntax,
               current_token(),
               "ERR038 - Failed to parse alternative for if-statement",
               exprtk_error_location));

            result = false;
         }
         else if (!token_is(token_t::e_rbracket))
         {
            set_error(make_error(
               parser_error::e_syntax,
               current_token(),
               "ERR039 - Expected ')' at the end of if-statement",
               exprtk_error_location));

            result = false;
         }

         #ifndef exprtk_disable_string_capabilities
         if (result)
         {
            const bool consq_is_str = is_generally_string_node(consequent );
            const bool alter_is_str = is_generally_string_node(alternative);

            if (consq_is_str || alter_is_str)
            {
               if (consq_is_str && alter_is_str)
               {
                  expression_node_ptr result_node =
                     expression_generator_
                        .conditional_string(condition, consequent, alternative);

                  if (result_node && result_node->valid())
                  {
                     return result_node;
                  }

                  set_error(make_error(
                     parser_error::e_synthesis,
                     current_token(),
                     "ERR040 - Failed to synthesize node: conditional_string",
                     exprtk_error_location));

                  free_node(node_allocator_, result_node);
                  return error_node();
               }

               set_error(make_error(
                  parser_error::e_syntax,
                  current_token(),
                  "ERR041 - Return types of if-statement differ: string/non-string",
                  exprtk_error_location));

               result = false;
            }
         }
         #endif

         if (result)
         {
            const bool consq_is_vec = is_ivector_node(consequent );
            const bool alter_is_vec = is_ivector_node(alternative);

            if (consq_is_vec || alter_is_vec)
            {
               if (consq_is_vec && alter_is_vec)
               {
                  return expression_generator_
                           .conditional_vector(condition, consequent, alternative);
               }

               set_error(make_error(
                  parser_error::e_syntax,
                  current_token(),
                  "ERR042 - Return types of if-statement differ: vector/non-vector",
                  exprtk_error_location));

               result = false;
            }
         }

         if (!result)
         {
            free_node(node_allocator_, condition  );
            free_node(node_allocator_, consequent );
            free_node(node_allocator_, alternative);

            return error_node();
         }
         else
            return expression_generator_
                      .conditional(condition, consequent, alternative);
      }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x130, %rsp            # imm = 0x130
andq $0x0, 0x78(%rsp)
movq %rsi, %r14
andq $0x0, 0x70(%rsp)
movq %rdi, %rbx
movq %rsi, 0x80(%rsp)
leaq 0x88(%rsp), %rsi
movl $0x2c, (%rsi)
pushq $0x1
popq %rdx
callq 0x1fae6e
testb %al, %al
je 0x288dea
movq %rbx, %rdi
xorl %esi, %esi
callq 0x1f9016
movq %rax, 0x78(%rsp)
testq %rax, %rax
je 0x288e5a
movq %rax, %r15
leaq 0x88(%rsp), %rsi
movl $0x2c, (%rsi)
pushq $0x1
popq %rdx
movq %rbx, %rdi
callq 0x1fae6e
testb %al, %al
je 0x288eca
movq %rbx, %rdi
xorl %esi, %esi
callq 0x1f9016
movq %rax, 0x70(%rsp)
testq %rax, %rax
je 0x288f3a
movq %rax, %r12
leaq 0x88(%rsp), %rsi
movl $0x29, (%rsi)
pushq $0x1
popq %rdx
movq %rbx, %rdi
callq 0x1fae6e
testb %al, %al
je 0x288fa7
movq %r15, %rdi
callq 0x20b691
movl %eax, %ebp
movq %r12, %rdi
callq 0x20b691
movl %ebp, %ecx
orb %al, %cl
cmpb $0x1, %cl
jne 0x289084
andb %al, %bpl
cmpb $0x1, %bpl
jne 0x2890c9
leaq 0x220(%rbx), %rdi
movq %r14, %rsi
movq %r15, %rdx
movq %r12, %rcx
callq 0x289ce6
movq %rax, (%rsp)
testq %rax, %rax
je 0x288d43
movq %rax, %r14
movq (%rax), %rax
movq %r14, %rdi
callq *0x30(%rax)
testb %al, %al
jne 0x289071
leaq 0x52154(%rip), %rsi     # 0x2dae9e
leaq 0x48(%rsp), %rdi
leaq 0x6f(%rsp), %rdx
callq 0x127016
leaq 0x8(%rsp), %rdi
movl $0x664c, %esi           # imm = 0x664C
callq 0x1f7a3c
leaq 0x50e8c(%rip), %rsi     # 0x2d9bfb
leaq 0x28(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0x1b4349
leaq 0x70(%rbx), %rdx
leaq 0x88(%rsp), %rdi
pushq $0x7
popq %rsi
leaq 0x48(%rsp), %rcx
leaq 0x28(%rsp), %r8
callq 0x1f7341
leaq 0x308(%rbx), %rdi
leaq 0x88(%rsp), %rsi
callq 0x1f76ce
leaq 0x88(%rsp), %rdi
callq 0x1f5c4c
leaq 0x28(%rsp), %rdi
callq 0x118648
leaq 0x8(%rsp), %rdi
callq 0x118648
leaq 0x48(%rsp), %rdi
callq 0x118648
addq $0x290, %rbx            # imm = 0x290
movq %rsp, %rsi
jmp 0x289066
leaq 0x51f87(%rip), %rsi     # 0x2dad78
leaq 0x48(%rsp), %rdi
movq %rsp, %rdx
callq 0x127016
leaq 0x8(%rsp), %rdi
movl $0x6608, %esi           # imm = 0x6608
callq 0x1f7a3c
leaq 0x50de7(%rip), %rsi     # 0x2d9bfb
leaq 0x28(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0x1b4349
leaq 0x70(%rbx), %rdx
leaq 0x88(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x48(%rsp), %rcx
leaq 0x28(%rsp), %r8
callq 0x1f7341
leaq 0x308(%rbx), %rdi
leaq 0x88(%rsp), %rsi
callq 0x1f76ce
jmp 0x289012
leaq 0x51f5b(%rip), %rsi     # 0x2dadbc
leaq 0x48(%rsp), %rdi
movq %rsp, %rdx
callq 0x127016
leaq 0x8(%rsp), %rdi
movl $0x6612, %esi           # imm = 0x6612
callq 0x1f7a3c
leaq 0x50d77(%rip), %rsi     # 0x2d9bfb
leaq 0x28(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0x1b4349
leaq 0x70(%rbx), %rdx
leaq 0x88(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x48(%rsp), %rcx
leaq 0x28(%rsp), %r8
callq 0x1f7341
leaq 0x308(%rbx), %rdi
leaq 0x88(%rsp), %rsi
callq 0x1f76ce
jmp 0x289012
leaq 0x51f20(%rip), %rsi     # 0x2dadf1
leaq 0x48(%rsp), %rdi
movq %rsp, %rdx
callq 0x127016
leaq 0x8(%rsp), %rdi
movl $0x661c, %esi           # imm = 0x661C
callq 0x1f7a3c
leaq 0x50d07(%rip), %rsi     # 0x2d9bfb
leaq 0x28(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0x1b4349
leaq 0x70(%rbx), %rdx
leaq 0x88(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x48(%rsp), %rcx
leaq 0x28(%rsp), %r8
callq 0x1f7341
leaq 0x308(%rbx), %rdi
leaq 0x88(%rsp), %rsi
callq 0x1f76ce
jmp 0x289012
leaq 0x51ef6(%rip), %rsi     # 0x2dae37
leaq 0x48(%rsp), %rdi
movq %rsp, %rdx
callq 0x127016
leaq 0x8(%rsp), %rdi
movl $0x6626, %esi           # imm = 0x6626
callq 0x1f7a3c
leaq 0x50c97(%rip), %rsi     # 0x2d9bfb
leaq 0x28(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0x1b4349
leaq 0x70(%rbx), %rdx
leaq 0x88(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x48(%rsp), %rcx
leaq 0x28(%rsp), %r8
callq 0x1f7341
leaq 0x308(%rbx), %rdi
leaq 0x88(%rsp), %rsi
callq 0x1f76ce
jmp 0x289012
leaq 0x51ebf(%rip), %rsi     # 0x2dae6d
leaq 0x48(%rsp), %rdi
movq %rsp, %rdx
callq 0x127016
leaq 0x8(%rsp), %rdi
movl $0x6630, %esi           # imm = 0x6630
callq 0x1f7a3c
leaq 0x50c2a(%rip), %rsi     # 0x2d9bfb
leaq 0x28(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0x1b4349
leaq 0x70(%rbx), %rdx
leaq 0x88(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x48(%rsp), %rcx
leaq 0x28(%rsp), %r8
callq 0x1f7341
leaq 0x308(%rbx), %rdi
leaq 0x88(%rsp), %rsi
callq 0x1f76ce
leaq 0x88(%rsp), %rdi
callq 0x1f5c4c
leaq 0x28(%rsp), %rdi
callq 0x118648
leaq 0x8(%rsp), %rdi
callq 0x118648
leaq 0x48(%rsp), %rdi
callq 0x118648
addq $0x290, %rbx            # imm = 0x290
leaq 0x80(%rsp), %rsi
movq %rbx, %rdi
callq 0x1ad9c8
leaq 0x78(%rsp), %rsi
movq %rbx, %rdi
callq 0x1ad9c8
leaq 0x70(%rsp), %rsi
movq %rbx, %rdi
callq 0x1ad9c8
xorl %r14d, %r14d
movq %r14, %rax
addq $0x130, %rsp            # imm = 0x130
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
movq %r15, %rdi
callq 0x208d51
movl %eax, %ebp
movq %r12, %rdi
callq 0x208d51
movl %ebp, %ecx
orb %al, %cl
cmpb $0x1, %cl
jne 0x289139
testb %al, %bpl
je 0x289159
addq $0x220, %rbx            # imm = 0x220
movq %rbx, %rdi
movq %r14, %rsi
movq %r15, %rdx
movq %r12, %rcx
callq 0x28a1a6
jmp 0x289151
leaq 0x51e05(%rip), %rsi     # 0x2daed5
leaq 0x48(%rsp), %rdi
movq %rsp, %rdx
callq 0x127016
leaq 0x8(%rsp), %rdi
movl $0x6656, %esi           # imm = 0x6656
callq 0x1f7a3c
leaq 0x50b08(%rip), %rsi     # 0x2d9bfb
leaq 0x28(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0x1b4349
leaq 0x70(%rbx), %rdx
leaq 0x88(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x48(%rsp), %rcx
leaq 0x28(%rsp), %r8
callq 0x1f7341
leaq 0x308(%rbx), %rdi
leaq 0x88(%rsp), %rsi
callq 0x1f76ce
jmp 0x289012
addq $0x220, %rbx            # imm = 0x220
movq %rbx, %rdi
movq %r14, %rsi
movq %r15, %rdx
movq %r12, %rcx
callq 0x28a51a
movq %rax, %r14
jmp 0x289071
leaq 0x51db5(%rip), %rsi     # 0x2daf15
leaq 0x48(%rsp), %rdi
movq %rsp, %rdx
callq 0x127016
leaq 0x8(%rsp), %rdi
movl $0x666e, %esi           # imm = 0x666E
callq 0x1f7a3c
leaq 0x50a78(%rip), %rsi     # 0x2d9bfb
leaq 0x28(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0x1b4349
leaq 0x70(%rbx), %rdx
leaq 0x88(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x48(%rsp), %rcx
leaq 0x28(%rsp), %r8
callq 0x1f7341
leaq 0x308(%rbx), %rdi
leaq 0x88(%rsp), %rsi
callq 0x1f76ce
jmp 0x289012
jmp 0x28920f
jmp 0x289221
jmp 0x289230
jmp 0x28923f
jmp 0x28924e
jmp 0x28920f
jmp 0x289221
jmp 0x289230
jmp 0x28923f
jmp 0x28924e
jmp 0x28920f
jmp 0x289221
jmp 0x289230
jmp 0x28923f
jmp 0x28924e
jmp 0x28920f
jmp 0x289221
jmp 0x289230
jmp 0x28923f
jmp 0x28924e
jmp 0x28920f
jmp 0x289221
jmp 0x289230
jmp 0x28923f
jmp 0x28924e
jmp 0x28920f
jmp 0x289221
jmp 0x289230
jmp 0x28923f
jmp 0x28924e
jmp 0x28920f
jmp 0x289221
jmp 0x289230
jmp 0x28923f
jmp 0x28924e
movq %rax, %rbx
leaq 0x88(%rsp), %rdi
callq 0x1f5c4c
jmp 0x289224
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
callq 0x118648
jmp 0x289233
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0x118648
jmp 0x289242
movq %rax, %rbx
leaq 0x48(%rsp), %rdi
callq 0x118648
jmp 0x289251
movq %rax, %rbx
movq %rbx, %rdi
callq 0x118360
nop