// File: /workspace/github_cpp_makefile_star2_O2/ArashPartow[P]exprtk/./exprtk.hpp
// Function: exprtk::parser<double>::parse_conditional_statement()
inline expression_node_ptr parse_conditional_statement()
      {
         expression_node_ptr condition = error_node();

         next_token();

         if (!token_is(token_t::e_lbracket))
         {
            set_error(make_error(
               parser_error::e_syntax,
               current_token(),
               "ERR053 - Expected '(' at start of if-statement, instead got: '" + current_token().value + "'",
               exprtk_error_location));

            return error_node();
         }
         else if (0 == (condition = parse_expression()))
         {
            set_error(make_error(
               parser_error::e_syntax,
               current_token(),
               "ERR054 - Failed to parse condition for if-statement",
               exprtk_error_location));

            return error_node();
         }
         else if (token_is(token_t::e_comma,prsrhlpr_t::e_hold))
         {
            // if (x,y,z)
            return parse_conditional_statement_01(condition);
         }
         else if (token_is(token_t::e_rbracket))
         {
            /*
               00. if (x) y;
               01. if (x) y; else z;
               02. if (x) y; else {z0; ... zn;}
               03. if (x) y; else if (z) w;
               04. if (x) y; else if (z) w; else u;
               05. if (x) y; else if (z) w; else {u0; ... un;}
               06. if (x) y; else if (z) {w0; ... wn;}
               07. if (x) {y0; ... yn;}
               08. if (x) {y0; ... yn;} else z;
               09. if (x) {y0; ... yn;} else {z0; ... zn;};
               10. if (x) {y0; ... yn;} else if (z) w;
               11. if (x) {y0; ... yn;} else if (z) w; else u;
               12. if (x) {y0; ... nex;} else if (z) w; else {u0 ... un;}
               13. if (x) {y0; ... yn;} else if (z) {w0; ... wn;}
            */
            return parse_conditional_statement_02(condition);
         }

         set_error(make_error(
            parser_error::e_syntax,
            current_token(),
            "ERR055 - Invalid if-statement",
            exprtk_error_location));

         free_node(node_allocator_, condition);

         return error_node();
      }

// Assembly:
pushq %r14
pushq %rbx
subq $0x138, %rsp            # imm = 0x138
movq %rdi, %rbx
callq 0x1f6d68
leaq 0x90(%rsp), %rsi
movl $0x28, (%rsi)
pushq $0x1
popq %rdx
movq %rbx, %rdi
callq 0x1fae6e
testb %al, %al
je 0x1fed8c
movq %rbx, %rdi
xorl %esi, %esi
callq 0x1f9016
movq %rax, 0x68(%rsp)
testq %rax, %rax
je 0x1fee47
movq %rax, %r14
leaq 0x90(%rsp), %rsi
movl $0x2c, (%rsi)
movq %rbx, %rdi
xorl %edx, %edx
callq 0x1fae6e
testb %al, %al
je 0x1feeef
movq %rbx, %rdi
movq %r14, %rsi
callq 0x288c26
jmp 0x1feee4
leaq 0x78(%rbx), %rdx
leaq 0xdbf50(%rip), %rsi     # 0x2dace7
leaq 0x48(%rsp), %r14
movq %r14, %rdi
callq 0x1f8aab
leaq 0xdd9c7(%rip), %rdx     # 0x2dc772
leaq 0x28(%rsp), %rdi
movq %r14, %rsi
callq 0x1b42c3
leaq 0x70(%rsp), %rdi
movl $0x675b, %esi           # imm = 0x675B
callq 0x1f7a3c
leaq 0xdae2d(%rip), %rsi     # 0x2d9bfb
leaq 0x8(%rsp), %rdi
leaq 0x70(%rsp), %rdx
callq 0x1b4349
leaq 0x70(%rbx), %rdx
leaq 0x90(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x28(%rsp), %rcx
leaq 0x8(%rsp), %r8
callq 0x1f7341
addq $0x308, %rbx            # imm = 0x308
leaq 0x90(%rsp), %rsi
movq %rbx, %rdi
callq 0x1f76ce
leaq 0x90(%rsp), %rdi
callq 0x1f5c4c
leaq 0x8(%rsp), %rdi
callq 0x118648
leaq 0x70(%rsp), %rdi
callq 0x118648
leaq 0x28(%rsp), %rdi
callq 0x118648
leaq 0x48(%rsp), %rdi
jmp 0x1feedd
leaq 0xdbed8(%rip), %rsi     # 0x2dad26
leaq 0x28(%rsp), %rdi
leaq 0x70(%rsp), %rdx
callq 0x127016
leaq 0x8(%rsp), %rdi
movl $0x6765, %esi           # imm = 0x6765
callq 0x1f7a3c
leaq 0xdad88(%rip), %rsi     # 0x2d9bfb
leaq 0x48(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0x1b4349
leaq 0x70(%rbx), %rdx
leaq 0x90(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x28(%rsp), %rcx
leaq 0x48(%rsp), %r8
callq 0x1f7341
addq $0x308, %rbx            # imm = 0x308
leaq 0x90(%rsp), %rsi
movq %rbx, %rdi
callq 0x1f76ce
leaq 0x90(%rsp), %rdi
callq 0x1f5c4c
leaq 0x48(%rsp), %rdi
callq 0x118648
leaq 0x8(%rsp), %rdi
callq 0x118648
leaq 0x28(%rsp), %rdi
callq 0x118648
xorl %eax, %eax
addq $0x138, %rsp            # imm = 0x138
popq %rbx
popq %r14
retq
leaq 0x90(%rsp), %rsi
movl $0x29, (%rsi)
pushq $0x1
popq %rdx
movq %rbx, %rdi
callq 0x1fae6e
testb %al, %al
je 0x1fef19
movq %rbx, %rdi
movq %r14, %rsi
callq 0x28925a
jmp 0x1feee4
leaq 0xdbe3a(%rip), %rsi     # 0x2dad5a
leaq 0x28(%rsp), %rdi
leaq 0x70(%rsp), %rdx
callq 0x127016
leaq 0x8(%rsp), %rdi
movl $0x6787, %esi           # imm = 0x6787
callq 0x1f7a3c
leaq 0xdacb6(%rip), %rsi     # 0x2d9bfb
leaq 0x48(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0x1b4349
leaq 0x70(%rbx), %rdx
leaq 0x90(%rsp), %rdi
pushq $0x1
popq %rsi
leaq 0x28(%rsp), %rcx
leaq 0x48(%rsp), %r8
callq 0x1f7341
leaq 0x308(%rbx), %rdi
leaq 0x90(%rsp), %rsi
callq 0x1f76ce
leaq 0x90(%rsp), %rdi
callq 0x1f5c4c
leaq 0x48(%rsp), %rdi
callq 0x118648
leaq 0x8(%rsp), %rdi
callq 0x118648
leaq 0x28(%rsp), %rdi
callq 0x118648
addq $0x290, %rbx            # imm = 0x290
leaq 0x68(%rsp), %rsi
movq %rbx, %rdi
callq 0x1ad9c8
jmp 0x1feee2
jmp 0x1fefd4
jmp 0x1fefe6
jmp 0x1feff5
jmp 0x1ff004
jmp 0x1ff00e
movq %rax, %rbx
leaq 0x90(%rsp), %rdi
callq 0x1f5c4c
jmp 0x1fefe9
movq %rax, %rbx
leaq 0x48(%rsp), %rdi
callq 0x118648
jmp 0x1feff8
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0x118648
jmp 0x1ff007
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
jmp 0x1ff05a
movq %rax, %rbx
jmp 0x1ff05f
movq %rax, %rbx
leaq 0x90(%rsp), %rdi
callq 0x1f5c4c
jmp 0x1ff028
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0x118648
jmp 0x1ff037
movq %rax, %rbx
leaq 0x70(%rsp), %rdi
callq 0x118648
jmp 0x1ff046
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
callq 0x118648
jmp 0x1ff055
movq %rax, %rbx
leaq 0x48(%rsp), %rdi
callq 0x118648
movq %rbx, %rdi
callq 0x118360
nop