// File: /workspace/github_cpp_makefile_star2_O1/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 0x7a8ac(%rip), %rax     # 0x11d068
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 0x9ece0
leaq 0x7ae2b(%rip), %rax     # 0x11d610
addq $0x10, %rax
movq %rax, (%rbx)
movl $0x0, 0x8(%rbx)
cmpb $0x0, 0x7c9f6(%rip)     # 0x11f1f0
jne 0xa2d55
movq %r15, %rdi
callq 0x9fbee
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 0x3a2e8
movl (%r12), %eax
addl $-0x2, %eax
cmpl $0xb, %eax
ja 0xa2879
leaq 0x2dc9c(%rip), %rcx     # 0xd04d8
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 0xa25bc
leaq 0x10(%rsp), %rsi
movq %r12, (%rsi)
movq %r14, %rdi
callq 0xa7742
jmp 0xa2c21
movl $0xa, 0x8(%rbx)
movq %r15, %rdi
callq 0x9fe44
movl $0x60, %edi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r15, %rsi
callq 0xa23a6
leaq 0x10(%rsp), %rsi
movq %r12, (%rsi)
movq %r14, %rdi
callq 0xa7742
jmp 0xa2c21
movl $0x7, 0x8(%rbx)
movq %r15, %rdi
callq 0x9fbee
cmpl $0x2e, (%rax)
jne 0xa2bf1
movl $0x60, %edi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
callq 0xa0a18
leaq 0x10(%rsp), %rsi
movq %r12, (%rsi)
movq %r14, %rdi
callq 0xa7742
movq (%r14), %rax
movq (%rax), %rax
movl $0xffffffff, 0x8(%rax)  # imm = 0xFFFFFFFF
jmp 0xa2d55
movl $0x5, 0x8(%rbx)
movq %r15, %rdi
movl $0x32, %esi
callq 0x9fc34
movq %r15, %rdi
callq 0x9fbee
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 0x37586
cmpl $0x2, 0x10(%rsp)
jne 0xa2c33
movl $0x78, %edi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r15, %rsi
callq 0xa25bc
leaq 0x8(%rsp), %rsi
movq %r12, (%rsi)
movq %r14, %rdi
callq 0xa7742
jmp 0xa2c63
movl $0x8, 0x8(%rbx)
jmp 0xa2c21
movl $0x9, 0x8(%rbx)
jmp 0xa2c21
movl $0x6, 0x8(%rbx)
movq %r15, %rdi
movl $0x32, %esi
callq 0x9fc34
movq %r15, %rdi
movl $0x2, %esi
callq 0x9fc34
movl $0x60, %edi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r15, %rsi
callq 0xa0a7a
leaq 0x10(%rsp), %rsi
movq %r12, (%rsi)
movq %r14, %rdi
callq 0xa7742
movq %r15, %rdi
movl $0x30, %esi
callq 0x9fc34
movl $0x60, %edi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r15, %rsi
callq 0xa23a6
leaq 0x10(%rsp), %rsi
movq %r12, (%rsi)
movq %r14, %rdi
callq 0xa7742
movq %r15, %rdi
movl $0x33, %esi
callq 0x9fc34
movl $0x60, %edi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r15, %rsi
callq 0xa2e24
leaq 0x10(%rsp), %rsi
movq %r12, (%rsi)
movq %r14, %rdi
callq 0xa7742
jmp 0xa2d55
movl $0x2, 0x8(%rbx)
movq %r15, %rdi
movl $0x32, %esi
callq 0x9fc34
movl $0x60, %edi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r15, %rsi
callq 0xa23a6
leaq 0x10(%rsp), %rsi
movq %r12, (%rsi)
movq %r14, %rdi
callq 0xa7742
movq %r15, %rdi
movl $0x33, %esi
callq 0x9fc34
movl $0x60, %edi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r15, %rsi
callq 0xa2e24
leaq 0x10(%rsp), %rsi
movq %r12, (%rsi)
movq %r14, %rdi
callq 0xa7742
movq %r15, %rdi
callq 0x9fbee
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 0x37586
cmpl $0x9, 0x10(%rsp)
jne 0xa2d04
movl $0x3, 0x8(%rbx)
movq %r15, %rdi
callq 0x9fbee
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 0x3a2e8
cmpl $0x8, 0x10(%rsp)
jne 0xa2d0e
movq %r15, %rdi
callq 0x9fe44
movl $0x60, %edi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r15, %rsi
callq 0xa27a2
leaq 0x8(%rsp), %rsi
movq %r12, (%rsi)
movq %r14, %rdi
callq 0xa7742
jmp 0xa2d3e
movl $0x4, 0x8(%rbx)
movq %r15, %rdi
movl $0x32, %esi
callq 0x9fc34
movl $0x60, %edi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r15, %rsi
callq 0xa23a6
leaq 0x10(%rsp), %rsi
movq %r12, (%rsi)
movq %r14, %rdi
callq 0xa7742
movq %r15, %rdi
movl $0x33, %esi
callq 0x9fc34
movl $0x60, %edi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r15, %rsi
callq 0xa2e24
leaq 0x10(%rsp), %rsi
movq %r12, (%rsi)
movq %r14, %rdi
callq 0xa7742
jmp 0xa2d55
movq %r15, %rdi
callq 0x9fe44
movl $0x60, %edi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r15, %rsi
callq 0xa23a6
leaq 0x10(%rsp), %rsi
movq %r12, (%rsi)
movq %r14, %rdi
callq 0xa7742
movq %r15, %rdi
movl $0x2e, %esi
callq 0x9fc34
jmp 0xa2d55
movq %r15, %rdi
callq 0x9fe44
movl $0x60, %edi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r15, %rsi
callq 0xa23a6
leaq 0x8(%rsp), %rsi
movq %r12, (%rsi)
movq %r14, %rdi
callq 0xa7742
movq %r15, %rdi
movl $0x2e, %esi
callq 0x9fc34
movl $0x60, %edi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r15, %rsi
callq 0xa23a6
leaq 0x8(%rsp), %rsi
movq %r12, (%rsi)
movq %r14, %rdi
callq 0xa7742
movq %r15, %rdi
movl $0x2e, %esi
callq 0x9fc34
movl $0x60, %edi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r15, %rsi
callq 0xa23a6
leaq 0x8(%rsp), %rsi
movq %r12, (%rsi)
movq %r14, %rdi
callq 0xa7742
movq %r15, %rdi
movl $0x33, %esi
callq 0x9fc34
movl $0x60, %edi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r15, %rsi
callq 0xa2e24
leaq 0x8(%rsp), %rsi
movq %r12, (%rsi)
movq %r14, %rdi
callq 0xa7742
jmp 0xa2d3e
movq %r15, %rdi
callq 0x9fe44
jmp 0xa2d3e
movq %r15, %rdi
callq 0x9fe44
movl $0x60, %edi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r15, %rsi
callq 0xa2e24
leaq 0x8(%rsp), %rsi
movq %r12, (%rsi)
movq %r14, %rdi
callq 0xa7742
movq 0x28(%rsp), %rdi
cmpq %r13, %rdi
je 0xa2d55
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x11360
addq $0x50, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
jmp 0xa2d81
jmp 0xa2d81
jmp 0xa2ddc
jmp 0xa2ddc
jmp 0xa2d81
movq %rax, %r15
movl $0x78, %esi
jmp 0xa2d89
jmp 0xa2da7
jmp 0xa2da7
jmp 0xa2d81
jmp 0xa2d81
jmp 0xa2da7
movq %rax, %r15
movl $0x60, %esi
movq %r12, %rdi
callq 0x11360
jmp 0xa2ddf
jmp 0xa2da7
jmp 0xa2da7
jmp 0xa2da7
jmp 0xa2ddc
jmp 0xa2ddc
jmp 0xa2da7
jmp 0xa2e11
jmp 0xa2da7
jmp 0xa2da7
jmp 0xa2e11
movq %rax, %r15
movl $0x60, %esi
movq %r12, %rdi
jmp 0xa2df1
movq %rax, %r15
movl $0x78, %esi
jmp 0xa2daf
jmp 0xa2ddc
jmp 0xa2ddc
jmp 0xa2e11
jmp 0xa2ddc
jmp 0xa2e11
jmp 0xa2ddc
jmp 0xa2e11
jmp 0xa2e11
jmp 0xa2e11
jmp 0xa2e11
jmp 0xa2e11
jmp 0xa2e11
jmp 0xa2e11
jmp 0xa2e11
jmp 0xa2e11
movq %rax, %r15
movq 0x28(%rsp), %rdi
cmpq %r13, %rdi
je 0xa2e14
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x11360
jmp 0xa2e14
movq %rax, %r15
movq (%r14), %rdi
testq %rdi, %rdi
je 0xa2e1c
movq 0x20(%rbx), %rsi
subq %rdi, %rsi
callq 0x11360
jmp 0xa2e1c
movq %rax, %r15
movq %rbx, %rdi
callq 0xa0994
movq %r15, %rdi
callq 0x11580