// File: /workspace/github_cpp_makefile_star2_O3/Heptagon196[P]Gos/GosAST.cpp
// Function: Gos::AST::Statement::Statement(Gos::GosTokenizer&)
Build(Statement) {
        Log(Statement);
        token = tokenizer.GetToken();
        if (token.type == VAR) {
            branch = 1;
            Expect(DefVar);
            tokenizer.EatToken(SEM);
        } else if (token.type == IF) {
            branch = 2;
            tokenizer.EatToken(L_ROUND);
            Expect(Exp);
            tokenizer.EatToken(R_ROUND);
            Expect(StatBlock);
            GosToken el = tokenizer.GetToken();
            if (el.type == ELSE) {
                branch = 3;
                el = tokenizer.GetToken();
                if (el.type == IF) {
                    tokenizer.BackToken();
                    Expect(Statement);
                } else {
                    tokenizer.BackToken();
                    Expect(StatBlock);
                }
            } else {
                tokenizer.BackToken();
            }
        } else if (token.type == WHILE) {
            branch = 4;
            tokenizer.EatToken(L_ROUND);
            Expect(Exp);
            tokenizer.EatToken(R_ROUND);
            Expect(StatBlock);
        } else if (token.type == FOR) {
            branch = 5;
            tokenizer.EatToken(L_ROUND);
            GosToken v = tokenizer.GetToken();
            if (v.type == VAR) {
                Expect(DefVar);
            } else {
                tokenizer.BackToken();
                Expect(Exp);
            }
            tokenizer.EatToken(SEM);
            Expect(Exp);
            tokenizer.EatToken(SEM);
            Expect(Exp);
            tokenizer.EatToken(R_ROUND);
            Expect(StatBlock);
        } else if (token.type == FOREACH) {
            branch = 6;
            tokenizer.EatToken(L_ROUND);
            tokenizer.EatToken(VAR);
            Expect(Symbol);
            tokenizer.EatToken(COLON);
            Expect(Exp);
            tokenizer.EatToken(R_ROUND);
            Expect(StatBlock);
        } else if (token.type == RETURN) {
            branch = 7;
            if (tokenizer.GetToken().type != SEM) {
                tokenizer.BackToken();
                Expect(Exp);
                tokenizer.EatToken(SEM);
            } else {
                nodes.push_back(new Empty());
                nodes[0]->branch = -1;
            }
        } else if (token.type == BREAK) {
            branch = 8;
            tokenizer.EatToken(SEM);
        } else if (token.type == CONTINUE) {
            branch = 9;
            tokenizer.EatToken(SEM);
        } else {
            branch = 10;
            tokenizer.BackToken();
            Expect(Exp);
            tokenizer.EatToken(SEM);
        }
    }

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x50, %rsp
movq %rsi, %r15
movq %rdi, %rbx
leaq 0x7a542(%rip), %rax     # 0x11c068
movq %rax, (%rdi)
leaq 0x10(%rdi), %r14
xorps %xmm0, %xmm0
movups %xmm0, 0x10(%rdi)
movq $0x0, 0x20(%rdi)
leaq 0x28(%rdi), %r12
movq %r12, %rdi
callq 0x9e04c
leaq 0x7aac1(%rip), %rax     # 0x11c610
addq $0x10, %rax
movq %rax, (%rbx)
movl $0x0, 0x8(%rbx)
cmpb $0x0, 0x7c68c(%rip)     # 0x11e1f0
jne 0xa20bf
movq %r15, %rdi
callq 0x9ef78
movq 0x10(%rax), %rcx
movq %rcx, 0x10(%r12)
movups (%rax), %xmm0
movups %xmm0, (%r12)
leaq 0x40(%rbx), %rdi
addq $0x18, %rax
movq %rax, %rsi
callq 0x39678
movl (%r12), %eax
addl $-0x2, %eax
cmpl $0xb, %eax
ja 0xa1be3
leaq 0x2d902(%rip), %rcx     # 0xcf4a8
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl $0x1, 0x8(%rbx)
movl $0x78, %edi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r15, %rsi
callq 0xa1922
leaq 0x10(%rsp), %rsi
movq %r12, (%rsi)
movq %r14, %rdi
callq 0xa6aac
jmp 0xa1f8b
movl $0xa, 0x8(%rbx)
movq %r15, %rdi
callq 0x9f1ce
movl $0x60, %edi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r15, %rsi
callq 0xa170c
leaq 0x10(%rsp), %rsi
movq %r12, (%rsi)
movq %r14, %rdi
callq 0xa6aac
jmp 0xa1f8b
movl $0x7, 0x8(%rbx)
movq %r15, %rdi
callq 0x9ef78
cmpl $0x2e, (%rax)
jne 0xa1f5b
movl $0x60, %edi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
callq 0x9fd78
leaq 0x10(%rsp), %rsi
movq %r12, (%rsi)
movq %r14, %rdi
callq 0xa6aac
movq (%r14), %rax
movq (%rax), %rax
movl $0xffffffff, 0x8(%rax)  # imm = 0xFFFFFFFF
jmp 0xa20bf
movl $0x5, 0x8(%rbx)
movq %r15, %rdi
movl $0x32, %esi
callq 0x9efbe
movq %r15, %rdi
callq 0x9ef78
movq 0x10(%rax), %rcx
leaq 0x28(%rsp), %rdi
movq %rcx, -0x8(%rdi)
movups (%rax), %xmm0
movaps %xmm0, -0x18(%rdi)
leaq 0x38(%rsp), %r13
movq %r13, -0x10(%r13)
movq 0x18(%rax), %rsi
movq 0x20(%rax), %rdx
addq %rsi, %rdx
callq 0x36954
cmpl $0x2, 0x10(%rsp)
jne 0xa1f9d
movl $0x78, %edi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r15, %rsi
callq 0xa1922
leaq 0x8(%rsp), %rsi
movq %r12, (%rsi)
movq %r14, %rdi
callq 0xa6aac
jmp 0xa1fcd
movl $0x8, 0x8(%rbx)
jmp 0xa1f8b
movl $0x9, 0x8(%rbx)
jmp 0xa1f8b
movl $0x6, 0x8(%rbx)
movq %r15, %rdi
movl $0x32, %esi
callq 0x9efbe
movq %r15, %rdi
movl $0x2, %esi
callq 0x9efbe
movl $0x60, %edi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r15, %rsi
callq 0x9fdda
leaq 0x10(%rsp), %rsi
movq %r12, (%rsi)
movq %r14, %rdi
callq 0xa6aac
movq %r15, %rdi
movl $0x30, %esi
callq 0x9efbe
movl $0x60, %edi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r15, %rsi
callq 0xa170c
leaq 0x10(%rsp), %rsi
movq %r12, (%rsi)
movq %r14, %rdi
callq 0xa6aac
movq %r15, %rdi
movl $0x33, %esi
callq 0x9efbe
movl $0x60, %edi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r15, %rsi
callq 0xa218e
leaq 0x10(%rsp), %rsi
movq %r12, (%rsi)
movq %r14, %rdi
callq 0xa6aac
jmp 0xa20bf
movl $0x2, 0x8(%rbx)
movq %r15, %rdi
movl $0x32, %esi
callq 0x9efbe
movl $0x60, %edi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r15, %rsi
callq 0xa170c
leaq 0x10(%rsp), %rsi
movq %r12, (%rsi)
movq %r14, %rdi
callq 0xa6aac
movq %r15, %rdi
movl $0x33, %esi
callq 0x9efbe
movl $0x60, %edi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r15, %rsi
callq 0xa218e
leaq 0x10(%rsp), %rsi
movq %r12, (%rsi)
movq %r14, %rdi
callq 0xa6aac
movq %r15, %rdi
callq 0x9ef78
movq 0x10(%rax), %rcx
leaq 0x28(%rsp), %r12
movq %rcx, -0x8(%r12)
movups (%rax), %xmm0
movaps %xmm0, -0x18(%r12)
leaq 0x38(%rsp), %r13
movq %r13, -0x10(%r13)
movq 0x18(%rax), %rsi
movq 0x20(%rax), %rdx
addq %rsi, %rdx
movq %r12, %rdi
callq 0x36954
cmpl $0x9, 0x10(%rsp)
jne 0xa206e
movl $0x3, 0x8(%rbx)
movq %r15, %rdi
callq 0x9ef78
movq 0x10(%rax), %rcx
movq %rcx, 0x20(%rsp)
movups (%rax), %xmm0
movaps %xmm0, 0x10(%rsp)
addq $0x18, %rax
movq %r12, %rdi
movq %rax, %rsi
callq 0x39678
cmpl $0x8, 0x10(%rsp)
jne 0xa2078
movq %r15, %rdi
callq 0x9f1ce
movl $0x60, %edi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r15, %rsi
callq 0xa1b0c
leaq 0x8(%rsp), %rsi
movq %r12, (%rsi)
movq %r14, %rdi
callq 0xa6aac
jmp 0xa20a8
movl $0x4, 0x8(%rbx)
movq %r15, %rdi
movl $0x32, %esi
callq 0x9efbe
movl $0x60, %edi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r15, %rsi
callq 0xa170c
leaq 0x10(%rsp), %rsi
movq %r12, (%rsi)
movq %r14, %rdi
callq 0xa6aac
movq %r15, %rdi
movl $0x33, %esi
callq 0x9efbe
movl $0x60, %edi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r15, %rsi
callq 0xa218e
leaq 0x10(%rsp), %rsi
movq %r12, (%rsi)
movq %r14, %rdi
callq 0xa6aac
jmp 0xa20bf
movq %r15, %rdi
callq 0x9f1ce
movl $0x60, %edi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r15, %rsi
callq 0xa170c
leaq 0x10(%rsp), %rsi
movq %r12, (%rsi)
movq %r14, %rdi
callq 0xa6aac
movq %r15, %rdi
movl $0x2e, %esi
callq 0x9efbe
jmp 0xa20bf
movq %r15, %rdi
callq 0x9f1ce
movl $0x60, %edi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r15, %rsi
callq 0xa170c
leaq 0x8(%rsp), %rsi
movq %r12, (%rsi)
movq %r14, %rdi
callq 0xa6aac
movq %r15, %rdi
movl $0x2e, %esi
callq 0x9efbe
movl $0x60, %edi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r15, %rsi
callq 0xa170c
leaq 0x8(%rsp), %rsi
movq %r12, (%rsi)
movq %r14, %rdi
callq 0xa6aac
movq %r15, %rdi
movl $0x2e, %esi
callq 0x9efbe
movl $0x60, %edi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r15, %rsi
callq 0xa170c
leaq 0x8(%rsp), %rsi
movq %r12, (%rsi)
movq %r14, %rdi
callq 0xa6aac
movq %r15, %rdi
movl $0x33, %esi
callq 0x9efbe
movl $0x60, %edi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r15, %rsi
callq 0xa218e
leaq 0x8(%rsp), %rsi
movq %r12, (%rsi)
movq %r14, %rdi
callq 0xa6aac
jmp 0xa20a8
movq %r15, %rdi
callq 0x9f1ce
jmp 0xa20a8
movq %r15, %rdi
callq 0x9f1ce
movl $0x60, %edi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r15, %rsi
callq 0xa218e
leaq 0x8(%rsp), %rsi
movq %r12, (%rsi)
movq %r14, %rdi
callq 0xa6aac
movq 0x28(%rsp), %rdi
cmpq %r13, %rdi
je 0xa20bf
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x11360
addq $0x50, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
jmp 0xa20eb
jmp 0xa20eb
jmp 0xa2146
jmp 0xa2146
jmp 0xa20eb
movq %rax, %r15
movl $0x78, %esi
jmp 0xa20f3
jmp 0xa2111
jmp 0xa2111
jmp 0xa20eb
jmp 0xa20eb
jmp 0xa2111
movq %rax, %r15
movl $0x60, %esi
movq %r12, %rdi
callq 0x11360
jmp 0xa2149
jmp 0xa2111
jmp 0xa2111
jmp 0xa2111
jmp 0xa2146
jmp 0xa2146
jmp 0xa2111
jmp 0xa217b
jmp 0xa2111
jmp 0xa2111
jmp 0xa217b
movq %rax, %r15
movl $0x60, %esi
movq %r12, %rdi
jmp 0xa215b
movq %rax, %r15
movl $0x78, %esi
jmp 0xa2119
jmp 0xa2146
jmp 0xa2146
jmp 0xa217b
jmp 0xa2146
jmp 0xa217b
jmp 0xa2146
jmp 0xa217b
jmp 0xa217b
jmp 0xa217b
jmp 0xa217b
jmp 0xa217b
jmp 0xa217b
jmp 0xa217b
jmp 0xa217b
jmp 0xa217b
movq %rax, %r15
movq 0x28(%rsp), %rdi
cmpq %r13, %rdi
je 0xa217e
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x11360
jmp 0xa217e
movq %rax, %r15
movq (%r14), %rdi
testq %rdi, %rdi
je 0xa2186
movq 0x20(%rbx), %rsi
subq %rdi, %rsi
callq 0x11360
jmp 0xa2186
movq %rax, %r15
movq %rbx, %rdi
callq 0x9fcf4
movq %r15, %rdi
callq 0x11580