// File: 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:
subq $0x3b8, %rsp            # imm = 0x3B8
movq %rdi, 0x3a8(%rsp)
movq 0x3a8(%rsp), %rax
movq %rax, 0x30(%rsp)
callq 0x2821f0
movq 0x30(%rsp), %rdi
movq %rax, 0x3a0(%rsp)
callq 0x373690
movq 0x30(%rsp), %rdi
movl $0x28, 0x39c(%rsp)
leaq 0x39c(%rsp), %rsi
movl $0x1, %edx
callq 0x37d640
xorb $-0x1, %al
testb $0x1, %al
jne 0x386830
jmp 0x3869fb
movq 0x30(%rsp), %rdi
callq 0x373e90
movq 0x30(%rsp), %rdi
movq %rax, 0x20(%rsp)
callq 0x373e90
movq %rax, %rdx
addq $0x8, %rdx
leaq 0x2217a8(%rip), %rsi    # 0x5a7fff
leaq 0x2b0(%rsp), %rdi
movq %rdi, 0x28(%rsp)
callq 0x3784f0
movq 0x28(%rsp), %rsi
leaq 0x22323c(%rip), %rdx    # 0x5a9ab1
leaq 0x2d0(%rsp), %rdi
callq 0x29dc30
jmp 0x386884
leaq 0x260(%rsp), %rdi
movl $0x675b, %esi           # imm = 0x675B
callq 0x371f20
jmp 0x386898
leaq 0x220674(%rip), %rsi    # 0x5a6f13
leaq 0x280(%rsp), %rdi
leaq 0x260(%rsp), %rdx
callq 0x29dd70
jmp 0x3868b6
movq 0x20(%rsp), %rdx
leaq 0x2f0(%rsp), %rdi
movl $0x1, %esi
leaq 0x2d0(%rsp), %rcx
leaq 0x280(%rsp), %r8
callq 0x3741e0
jmp 0x3868df
movq 0x30(%rsp), %rdi
leaq 0x2f0(%rsp), %rsi
callq 0x371e40
jmp 0x3868f3
leaq 0x2f0(%rsp), %rdi
callq 0x371330
leaq 0x280(%rsp), %rdi
callq 0x11b838
leaq 0x260(%rsp), %rdi
callq 0x11b838
leaq 0x2d0(%rsp), %rdi
callq 0x11b838
leaq 0x2b0(%rsp), %rdi
callq 0x11b838
callq 0x2821f0
movq %rax, 0x3b0(%rsp)
jmp 0x386e07
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2a8(%rsp)
movl %eax, 0x2a4(%rsp)
jmp 0x3869e9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2a8(%rsp)
movl %eax, 0x2a4(%rsp)
jmp 0x3869dc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2a8(%rsp)
movl %eax, 0x2a4(%rsp)
jmp 0x3869cf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2a8(%rsp)
movl %eax, 0x2a4(%rsp)
jmp 0x3869c2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2a8(%rsp)
movl %eax, 0x2a4(%rsp)
leaq 0x2f0(%rsp), %rdi
callq 0x371330
leaq 0x280(%rsp), %rdi
callq 0x11b838
leaq 0x260(%rsp), %rdi
callq 0x11b838
leaq 0x2d0(%rsp), %rdi
callq 0x11b838
leaq 0x2b0(%rsp), %rdi
callq 0x11b838
jmp 0x386e17
movq 0x30(%rsp), %rdi
xorl %esi, %esi
callq 0x379940
movq %rax, %rcx
movq %rcx, 0x3a0(%rsp)
xorl %eax, %eax
cmpq %rcx, %rax
jne 0x386bd0
movq 0x30(%rsp), %rdi
callq 0x373e90
movq %rax, 0x10(%rsp)
leaq 0x197(%rsp), %rdi
movq %rdi, 0x18(%rsp)
callq 0x11b6f0
movq 0x18(%rsp), %rdx
leaq 0x2215f4(%rip), %rsi    # 0x5a803e
leaq 0x198(%rsp), %rdi
callq 0x134520
jmp 0x386a59
leaq 0x150(%rsp), %rdi
movl $0x6765, %esi           # imm = 0x6765
callq 0x371f20
jmp 0x386a6d
leaq 0x22049f(%rip), %rsi    # 0x5a6f13
leaq 0x170(%rsp), %rdi
leaq 0x150(%rsp), %rdx
callq 0x29dd70
jmp 0x386a8b
movq 0x10(%rsp), %rdx
leaq 0x1b8(%rsp), %rdi
movl $0x1, %esi
leaq 0x198(%rsp), %rcx
leaq 0x170(%rsp), %r8
callq 0x3741e0
jmp 0x386ab4
movq 0x30(%rsp), %rdi
leaq 0x1b8(%rsp), %rsi
callq 0x371e40
jmp 0x386ac8
leaq 0x1b8(%rsp), %rdi
callq 0x371330
leaq 0x170(%rsp), %rdi
callq 0x11b838
leaq 0x150(%rsp), %rdi
callq 0x11b838
leaq 0x198(%rsp), %rdi
callq 0x11b838
leaq 0x197(%rsp), %rdi
callq 0x11b820
callq 0x2821f0
movq %rax, 0x3b0(%rsp)
jmp 0x386e07
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2a8(%rsp)
movl %eax, 0x2a4(%rsp)
jmp 0x386bbe
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2a8(%rsp)
movl %eax, 0x2a4(%rsp)
jmp 0x386bb1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2a8(%rsp)
movl %eax, 0x2a4(%rsp)
jmp 0x386ba4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2a8(%rsp)
movl %eax, 0x2a4(%rsp)
jmp 0x386b97
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2a8(%rsp)
movl %eax, 0x2a4(%rsp)
leaq 0x1b8(%rsp), %rdi
callq 0x371330
leaq 0x170(%rsp), %rdi
callq 0x11b838
leaq 0x150(%rsp), %rdi
callq 0x11b838
leaq 0x198(%rsp), %rdi
callq 0x11b838
leaq 0x197(%rsp), %rdi
callq 0x11b820
jmp 0x386e17
movq 0x30(%rsp), %rdi
movl $0x2c, 0x14c(%rsp)
leaq 0x14c(%rsp), %rsi
xorl %edx, %edx
callq 0x37d640
testb $0x1, %al
jne 0x386bf5
jmp 0x386c14
movq 0x30(%rsp), %rdi
movq 0x3a0(%rsp), %rsi
callq 0x4ded00
movq %rax, 0x3b0(%rsp)
jmp 0x386e07
movq 0x30(%rsp), %rdi
movl $0x29, 0x148(%rsp)
leaq 0x148(%rsp), %rsi
movl $0x1, %edx
callq 0x37d640
testb $0x1, %al
jne 0x386c3c
jmp 0x386c5b
movq 0x30(%rsp), %rdi
movq 0x3a0(%rsp), %rsi
callq 0x4dfe30
movq %rax, 0x3b0(%rsp)
jmp 0x386e07
jmp 0x386c5d
jmp 0x386c5f
jmp 0x386c61
movq 0x30(%rsp), %rdi
callq 0x373e90
movq %rax, (%rsp)
leaq 0x7f(%rsp), %rdi
movq %rdi, 0x8(%rsp)
callq 0x11b6f0
movq 0x8(%rsp), %rdx
leaq 0x2213e8(%rip), %rsi    # 0x5a8072
leaq 0x80(%rsp), %rdi
callq 0x134520
jmp 0x386c99
leaq 0x38(%rsp), %rdi
movl $0x6787, %esi           # imm = 0x6787
callq 0x371f20
jmp 0x386caa
leaq 0x220262(%rip), %rsi    # 0x5a6f13
leaq 0x58(%rsp), %rdi
leaq 0x38(%rsp), %rdx
callq 0x29dd70
jmp 0x386cc2
movq (%rsp), %rdx
leaq 0xa0(%rsp), %rdi
movl $0x1, %esi
leaq 0x80(%rsp), %rcx
leaq 0x58(%rsp), %r8
callq 0x3741e0
jmp 0x386ce7
movq 0x30(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
callq 0x371e40
jmp 0x386cfb
leaq 0xa0(%rsp), %rdi
callq 0x371330
leaq 0x58(%rsp), %rdi
callq 0x11b838
leaq 0x38(%rsp), %rdi
callq 0x11b838
leaq 0x80(%rsp), %rdi
callq 0x11b838
leaq 0x7f(%rsp), %rdi
callq 0x11b820
movq 0x30(%rsp), %rdi
addq $0x290, %rdi            # imm = 0x290
leaq 0x3a0(%rsp), %rsi
callq 0x284bd0
callq 0x2821f0
movq %rax, 0x3b0(%rsp)
jmp 0x386e07
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2a8(%rsp)
movl %eax, 0x2a4(%rsp)
jmp 0x386dfb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2a8(%rsp)
movl %eax, 0x2a4(%rsp)
jmp 0x386dee
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2a8(%rsp)
movl %eax, 0x2a4(%rsp)
jmp 0x386de4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2a8(%rsp)
movl %eax, 0x2a4(%rsp)
jmp 0x386dda
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2a8(%rsp)
movl %eax, 0x2a4(%rsp)
leaq 0xa0(%rsp), %rdi
callq 0x371330
leaq 0x58(%rsp), %rdi
callq 0x11b838
leaq 0x38(%rsp), %rdi
callq 0x11b838
leaq 0x80(%rsp), %rdi
callq 0x11b838
leaq 0x7f(%rsp), %rdi
callq 0x11b820
jmp 0x386e17
movq 0x3b0(%rsp), %rax
addq $0x3b8, %rsp            # imm = 0x3B8
retq
movq 0x2a8(%rsp), %rdi
callq 0x11b4e0
nopw %cs:(%rax,%rax)
nop