// File: /workspace/github_cpp_makefile_star2_O2/ArashPartow[P]exprtk/./exprtk.hpp
// Function: exprtk::parser<double>::parse_ternary_conditional_statement(exprtk::details::expression_node<double>*)
inline expression_node_ptr parse_ternary_conditional_statement(expression_node_ptr condition)
      {
         // Parse: [condition][?][consequent][:][alternative]
         expression_node_ptr consequent  = error_node();
         expression_node_ptr alternative = error_node();

         bool result = true;

         if (0 == condition)
         {
            set_error(make_error(
               parser_error::e_syntax,
               current_token(),
               "ERR056 - Encountered invalid condition branch for ternary if-statement",
               exprtk_error_location));

            return error_node();
         }
         else if (!token_is(token_t::e_ternary))
         {
            set_error(make_error(
               parser_error::e_syntax,
               current_token(),
               "ERR057 - Expected '?' after condition of ternary if-statement",
               exprtk_error_location));

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

            result = false;
         }
         else if (!token_is(token_t::e_colon))
         {
            set_error(make_error(
               parser_error::e_syntax,
               current_token(),
               "ERR059 - Expected ':' between ternary 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(),
               "ERR060 - Failed to parse alternative for ternary 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)
               {
                  return expression_generator_
                           .conditional_string(condition, consequent, alternative);
               }

               set_error(make_error(
                  parser_error::e_syntax,
                  current_token(),
                  "ERR061 - Return types of ternary 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(),
                  "ERR062 - Return types of ternary 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
movq %rdi, %rbx
movq %rsi, 0x80(%rsp)
andq $0x0, 0x78(%rsp)
andq $0x0, 0x70(%rsp)
testq %rsi, %rsi
je 0x1fc0b3
movq %rsi, %r14
leaq 0x88(%rsp), %rsi
movl $0x3f, (%rsi)
pushq $0x1
popq %rdx
movq %rbx, %rdi
callq 0x1fae6e
testb %al, %al
je 0x1fc153
movq %rbx, %rdi
xorl %esi, %esi
callq 0x1f9016
movq %rax, 0x78(%rsp)
testq %rax, %rax
je 0x1fc1c5
movq %rax, %r15
leaq 0x88(%rsp), %rsi
movl $0x3a, (%rsi)
pushq $0x1
popq %rdx
movq %rbx, %rdi
callq 0x1fae6e
testb %al, %al
je 0x1fc237
movq %rbx, %rdi
xorl %esi, %esi
callq 0x1f9016
movq %rax, 0x70(%rsp)
testq %rax, %rax
je 0x1fc2a9
movq %rax, %r12
movq %r15, %rdi
callq 0x20b691
movl %eax, %ebp
movq %r12, %rdi
callq 0x20b691
movl %ebp, %ecx
orb %al, %cl
cmpb $0x1, %cl
jne 0x1fc31b
testb %al, %bpl
je 0x1fc360
addq $0x220, %rbx            # imm = 0x220
movq %rbx, %rdi
movq %r14, %rsi
movq %r15, %rdx
movq %r12, %rcx
callq 0x289ce6
jmp 0x1fc4ba
leaq 0xe1d70(%rip), %rsi     # 0x2dde2a
leaq 0x50(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x127016
leaq 0x10(%rsp), %rdi
movl $0x679c, %esi           # imm = 0x679C
callq 0x1f7a3c
leaq 0xddb1c(%rip), %rsi     # 0x2d9bfb
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x1b4349
leaq 0x70(%rbx), %rdx
leaq 0x88(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x50(%rsp), %rcx
leaq 0x30(%rsp), %r8
callq 0x1f7341
addq $0x308, %rbx            # imm = 0x308
leaq 0x88(%rsp), %rsi
movq %rbx, %rdi
callq 0x1f76ce
leaq 0x88(%rsp), %rdi
callq 0x1f5c4c
leaq 0x30(%rsp), %rdi
callq 0x118648
leaq 0x10(%rsp), %rdi
callq 0x118648
leaq 0x50(%rsp), %rdi
callq 0x118648
jmp 0x1fc4b8
leaq 0xe1d17(%rip), %rsi     # 0x2dde71
leaq 0x50(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x127016
leaq 0x10(%rsp), %rdi
movl $0x67a6, %esi           # imm = 0x67A6
callq 0x1f7a3c
leaq 0xdda7c(%rip), %rsi     # 0x2d9bfb
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x1b4349
leaq 0x70(%rbx), %rdx
leaq 0x88(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x50(%rsp), %rcx
leaq 0x30(%rsp), %r8
callq 0x1f7341
leaq 0x308(%rbx), %rdi
leaq 0x88(%rsp), %rsi
callq 0x1f76ce
jmp 0x1fc45c
leaq 0xe1ce3(%rip), %rsi     # 0x2ddeaf
leaq 0x50(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x127016
leaq 0x10(%rsp), %rdi
movl $0x67b0, %esi           # imm = 0x67B0
callq 0x1f7a3c
leaq 0xdda0a(%rip), %rsi     # 0x2d9bfb
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x1b4349
leaq 0x70(%rbx), %rdx
leaq 0x88(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x50(%rsp), %rcx
leaq 0x30(%rsp), %r8
callq 0x1f7341
leaq 0x308(%rbx), %rdi
leaq 0x88(%rsp), %rsi
callq 0x1f76ce
jmp 0x1fc45c
leaq 0xe1cae(%rip), %rsi     # 0x2ddeec
leaq 0x50(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x127016
leaq 0x10(%rsp), %rdi
movl $0x67ba, %esi           # imm = 0x67BA
callq 0x1f7a3c
leaq 0xdd998(%rip), %rsi     # 0x2d9bfb
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x1b4349
leaq 0x70(%rbx), %rdx
leaq 0x88(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x50(%rsp), %rcx
leaq 0x30(%rsp), %r8
callq 0x1f7341
leaq 0x308(%rbx), %rdi
leaq 0x88(%rsp), %rsi
callq 0x1f76ce
jmp 0x1fc45c
leaq 0xe1c8a(%rip), %rsi     # 0x2ddf3a
leaq 0x50(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x127016
leaq 0x10(%rsp), %rdi
movl $0x67c4, %esi           # imm = 0x67C4
callq 0x1f7a3c
leaq 0xdd926(%rip), %rsi     # 0x2d9bfb
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x1b4349
leaq 0x70(%rbx), %rdx
leaq 0x88(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x50(%rsp), %rcx
leaq 0x30(%rsp), %r8
callq 0x1f7341
leaq 0x308(%rbx), %rdi
leaq 0x88(%rsp), %rsi
callq 0x1f76ce
jmp 0x1fc45c
movq %r15, %rdi
callq 0x208d51
movl %eax, %ebp
movq %r12, %rdi
callq 0x208d51
movl %ebp, %ecx
orb %al, %cl
cmpb $0x1, %cl
jne 0x1fc3d2
testb %al, %bpl
je 0x1fc3ef
addq $0x220, %rbx            # imm = 0x220
movq %rbx, %rdi
movq %r14, %rsi
movq %r15, %rdx
movq %r12, %rcx
callq 0x28a1a6
jmp 0x1fc4ba
leaq 0xe1c11(%rip), %rsi     # 0x2ddf78
leaq 0x50(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x127016
leaq 0x10(%rsp), %rdi
movl $0x67db, %esi           # imm = 0x67DB
callq 0x1f7a3c
leaq 0xdd86f(%rip), %rsi     # 0x2d9bfb
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x1b4349
leaq 0x70(%rbx), %rdx
leaq 0x88(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x50(%rsp), %rcx
leaq 0x30(%rsp), %r8
callq 0x1f7341
leaq 0x308(%rbx), %rdi
leaq 0x88(%rsp), %rsi
callq 0x1f76ce
jmp 0x1fc45c
addq $0x220, %rbx            # imm = 0x220
movq %rbx, %rdi
movq %r14, %rsi
movq %r15, %rdx
movq %r12, %rcx
callq 0x28a51a
jmp 0x1fc4ba
leaq 0xe1bbd(%rip), %rsi     # 0x2ddfb3
leaq 0x50(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x127016
leaq 0x10(%rsp), %rdi
movl $0x67f3, %esi           # imm = 0x67F3
callq 0x1f7a3c
leaq 0xdd7e0(%rip), %rsi     # 0x2d9bfb
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x1b4349
leaq 0x70(%rbx), %rdx
leaq 0x88(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x50(%rsp), %rcx
leaq 0x30(%rsp), %r8
callq 0x1f7341
leaq 0x308(%rbx), %rdi
leaq 0x88(%rsp), %rsi
callq 0x1f76ce
leaq 0x88(%rsp), %rdi
callq 0x1f5c4c
leaq 0x30(%rsp), %rdi
callq 0x118648
leaq 0x10(%rsp), %rdi
callq 0x118648
leaq 0x50(%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 %eax, %eax
addq $0x130, %rsp            # imm = 0x130
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
jmp 0x1fc506
jmp 0x1fc518
jmp 0x1fc527
jmp 0x1fc536
jmp 0x1fc545
jmp 0x1fc506
jmp 0x1fc518
jmp 0x1fc527
jmp 0x1fc536
jmp 0x1fc545
jmp 0x1fc506
jmp 0x1fc518
jmp 0x1fc527
jmp 0x1fc536
jmp 0x1fc545
jmp 0x1fc506
jmp 0x1fc518
jmp 0x1fc527
jmp 0x1fc536
jmp 0x1fc545
jmp 0x1fc506
jmp 0x1fc518
jmp 0x1fc527
jmp 0x1fc536
jmp 0x1fc545
jmp 0x1fc506
jmp 0x1fc518
jmp 0x1fc527
jmp 0x1fc536
jmp 0x1fc545
movq %rax, %rbx
leaq 0x88(%rsp), %rdi
callq 0x1f5c4c
jmp 0x1fc51b
movq %rax, %rbx
leaq 0x30(%rsp), %rdi
callq 0x118648
jmp 0x1fc52a
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x118648
jmp 0x1fc539
movq %rax, %rbx
leaq 0x50(%rsp), %rdi
callq 0x118648
jmp 0x1fc548
movq %rax, %rbx
movq %rbx, %rdi
callq 0x118360