// File: /workspace/github_c_makefile_star2_O0/hikalium[P]compilium/parser.c
// Function: ParseIterationStmt
struct Node *ParseIterationStmt() {
  struct Node *t;
  if ((t = ConsumeToken(kTokenKwFor))) {
    ExpectPunctuator("(");
    struct Node *init = ParseDeclBody();
    if (!init) init = ParseExpr();
    ExpectPunctuator(";");
    struct Node *cond = ParseExpr();
    ExpectPunctuator(";");
    struct Node *updt = ParseExpr();
    ExpectPunctuator(")");
    struct Node *body = ParseStmt();
    assert(body);

    struct Node *stmt = AllocNode(kASTForStmt);
    stmt->op = t;
    stmt->init = init;
    stmt->cond = cond;
    stmt->updt = updt;
    stmt->body = body;
    return stmt;
  }
  if ((t = ConsumeToken(kTokenKwWhile))) {
    ExpectPunctuator("(");
    struct Node *cond = ParseExpr();
    assert(cond);
    ExpectPunctuator(")");
    struct Node *body = ParseStmt();
    assert(body);

    struct Node *stmt = AllocNode(kASTWhileStmt);
    stmt->op = t;
    stmt->cond = cond;
    stmt->body = body;
    return stmt;
  }
  return NULL;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movl $0xb, %edi
callq 0xc1c0
movq %rax, -0x10(%rbp)
cmpq $0x0, %rax
je 0x96aa
leaq 0x6f5d(%rip), %rdi      # 0x10534
callq 0xc390
callq 0x9dd0
movq %rax, -0x18(%rbp)
cmpq $0x0, -0x18(%rbp)
jne 0x95f5
callq 0x8740
movq %rax, -0x18(%rbp)
leaq 0x8566(%rip), %rdi      # 0x11b62
callq 0xc390
callq 0x8740
movq %rax, -0x20(%rbp)
leaq 0x8551(%rip), %rdi      # 0x11b62
callq 0xc390
callq 0x8740
movq %rax, -0x28(%rbp)
leaq 0x811f(%rip), %rdi      # 0x11745
callq 0xc390
callq 0x9780
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
jne 0x9653
leaq 0x7ba9(%rip), %rdi      # 0x111eb
leaq 0x7b32(%rip), %rsi      # 0x1117b
movl $0x134, %edx            # imm = 0x134
callq 0x4b20
movl $0xe, %edi
callq 0x3a70
movq %rax, -0x38(%rbp)
movq -0x10(%rbp), %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x18(%rbp), %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x20(%rbp), %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x30(%rax)
movq -0x28(%rbp), %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x38(%rax)
movq -0x30(%rbp), %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x40(%rax)
movq -0x38(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x976e
movl $0x16, %edi
callq 0xc1c0
movq %rax, -0x10(%rbp)
cmpq $0x0, %rax
je 0x9766
leaq 0x6e6b(%rip), %rdi      # 0x10534
callq 0xc390
callq 0x8740
movq %rax, -0x40(%rbp)
cmpq $0x0, -0x40(%rbp)
jne 0x96f6
leaq 0x7b0b(%rip), %rdi      # 0x111f0
leaq 0x7a8f(%rip), %rsi      # 0x1117b
movl $0x141, %edx            # imm = 0x141
callq 0x4b20
leaq 0x8048(%rip), %rdi      # 0x11745
callq 0xc390
callq 0x9780
movq %rax, -0x48(%rbp)
cmpq $0x0, -0x48(%rbp)
jne 0x972a
leaq 0x7ad2(%rip), %rdi      # 0x111eb
leaq 0x7a5b(%rip), %rsi      # 0x1117b
movl $0x144, %edx            # imm = 0x144
callq 0x4b20
movl $0xf, %edi
callq 0x3a70
movq %rax, -0x50(%rbp)
movq -0x10(%rbp), %rcx
movq -0x50(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x40(%rbp), %rcx
movq -0x50(%rbp), %rax
movq %rcx, 0x30(%rax)
movq -0x48(%rbp), %rcx
movq -0x50(%rbp), %rax
movq %rcx, 0x40(%rax)
movq -0x50(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x976e
movq $0x0, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x50, %rsp
popq %rbp
retq
nopl (%rax,%rax)