// File: /workspace/github_cpp_makefile_star2_O2/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 %r12
pushq %rbx
subq $0x48, %rsp
movq %rsi, %r14
movq %rdi, %rbx
callq 0x83e82
leaq 0x85497(%rip), %rax     # 0x105628
addq $0x10, %rax
movq %rax, (%rbx)
andl $0x0, 0x8(%rbx)
cmpb $0x0, 0x8703d(%rip)     # 0x1071e0
jne 0x8065d
movq %r14, %rdi
callq 0x7e0e8
leaq 0x28(%rbx), %r15
movq %r15, %rdi
movq %rax, %rsi
callq 0x83ec4
movl (%r15), %eax
addl $-0x2, %eax
cmpl $0xb, %eax
ja 0x8020e
leaq 0x29516(%rip), %rcx     # 0xa96e8
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl $0x1, 0x8(%rbx)
pushq $0x78
popq %rdi
callq 0x11350
movq %rax, %r15
movq %rax, %rdi
movq %r14, %rsi
callq 0x8000e
leaq 0x10(%rbx), %rdi
leaq 0x10(%rsp), %rsi
movq %r15, (%rsi)
callq 0x84b08
jmp 0x80543
movl $0xa, 0x8(%rbx)
movq %r14, %rdi
callq 0x7e25c
pushq $0x60
popq %rdi
callq 0x11350
movq %rax, %r15
movq %rax, %rdi
movq %r14, %rsi
callq 0x7fe86
leaq 0x10(%rbx), %rdi
leaq 0x10(%rsp), %rsi
movq %r15, (%rsi)
callq 0x84b08
jmp 0x80543
movl $0x7, 0x8(%rbx)
movq %r14, %rdi
callq 0x7e0e8
cmpl $0x2e, (%rax)
jne 0x80514
pushq $0x60
popq %rdi
callq 0x11350
movq %rax, %r15
movq %rax, %rdi
callq 0x7ebda
leaq 0x10(%rbx), %r14
leaq 0x10(%rsp), %rsi
movq %r15, (%rsi)
movq %r14, %rdi
callq 0x84b08
movq (%r14), %rax
movq (%rax), %rax
orl $-0x1, 0x8(%rax)
jmp 0x8065d
movl $0x5, 0x8(%rbx)
pushq $0x32
popq %rsi
movq %r14, %rdi
callq 0x7e12a
movq %r14, %rdi
callq 0x7e0e8
leaq 0x10(%rsp), %rdi
movq %rax, %rsi
callq 0x7e3de
cmpl $0x2, 0x10(%rsp)
jne 0x80553
pushq $0x78
popq %rdi
callq 0x11350
movq %rax, %r15
movq %rax, %rdi
movq %r14, %rsi
callq 0x8000e
leaq 0x10(%rbx), %rdi
leaq 0x8(%rsp), %rsi
movq %r15, (%rsi)
callq 0x84b08
jmp 0x80582
movl $0x8, 0x8(%rbx)
jmp 0x80543
movl $0x9, 0x8(%rbx)
jmp 0x80543
movl $0x6, 0x8(%rbx)
pushq $0x32
popq %rsi
movq %r14, %rdi
callq 0x7e12a
pushq $0x2
popq %rsi
movq %r14, %rdi
callq 0x7e12a
pushq $0x60
popq %rdi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r14, %rsi
callq 0x7ebf4
leaq 0x10(%rbx), %r15
leaq 0x10(%rsp), %rsi
movq %r12, (%rsi)
movq %r15, %rdi
callq 0x84b08
pushq $0x30
popq %rsi
movq %r14, %rdi
callq 0x7e12a
pushq $0x60
popq %rdi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r14, %rsi
callq 0x7fe86
leaq 0x10(%rsp), %rsi
movq %r12, (%rsi)
movq %r15, %rdi
callq 0x84b08
pushq $0x33
popq %rsi
movq %r14, %rdi
callq 0x7e12a
pushq $0x60
popq %rdi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r14, %rsi
callq 0x80714
leaq 0x10(%rsp), %rsi
movq %r12, (%rsi)
movq %r15, %rdi
callq 0x84b08
jmp 0x8065d
movl $0x2, 0x8(%rbx)
pushq $0x32
popq %rsi
movq %r14, %rdi
callq 0x7e12a
pushq $0x60
popq %rdi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r14, %rsi
callq 0x7fe86
leaq 0x10(%rbx), %r15
leaq 0x10(%rsp), %rsi
movq %r12, (%rsi)
movq %r15, %rdi
callq 0x84b08
pushq $0x33
popq %rsi
movq %r14, %rdi
callq 0x7e12a
pushq $0x60
popq %rdi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r14, %rsi
callq 0x80714
leaq 0x10(%rsp), %rsi
movq %r12, (%rsi)
movq %r15, %rdi
callq 0x84b08
movq %r14, %rdi
callq 0x7e0e8
leaq 0x10(%rsp), %rdi
movq %rax, %rsi
callq 0x7e3de
cmpl $0x9, 0x10(%rsp)
jne 0x8061b
movl $0x3, 0x8(%rbx)
movq %r14, %rdi
callq 0x7e0e8
leaq 0x10(%rsp), %rdi
movq %rax, %rsi
callq 0x83ec4
cmpl $0x8, 0x10(%rsp)
jne 0x80625
movq %r14, %rdi
callq 0x7e25c
pushq $0x60
popq %rdi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r14, %rsi
callq 0x80174
leaq 0x8(%rsp), %rsi
movq %r12, (%rsi)
movq %r15, %rdi
callq 0x84b08
jmp 0x80653
movl $0x4, 0x8(%rbx)
pushq $0x32
popq %rsi
movq %r14, %rdi
callq 0x7e12a
pushq $0x60
popq %rdi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r14, %rsi
callq 0x7fe86
leaq 0x10(%rbx), %r15
leaq 0x10(%rsp), %rsi
movq %r12, (%rsi)
movq %r15, %rdi
callq 0x84b08
pushq $0x33
popq %rsi
movq %r14, %rdi
callq 0x7e12a
pushq $0x60
popq %rdi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r14, %rsi
callq 0x80714
leaq 0x10(%rsp), %rsi
movq %r12, (%rsi)
movq %r15, %rdi
callq 0x84b08
jmp 0x8065d
movq %r14, %rdi
callq 0x7e25c
pushq $0x60
popq %rdi
callq 0x11350
movq %rax, %r15
movq %rax, %rdi
movq %r14, %rsi
callq 0x7fe86
leaq 0x10(%rbx), %rdi
leaq 0x10(%rsp), %rsi
movq %r15, (%rsi)
callq 0x84b08
pushq $0x2e
popq %rsi
movq %r14, %rdi
callq 0x7e12a
jmp 0x8065d
movq %r14, %rdi
callq 0x7e25c
pushq $0x60
popq %rdi
callq 0x11350
movq %rax, %r15
movq %rax, %rdi
movq %r14, %rsi
callq 0x7fe86
leaq 0x10(%rbx), %rdi
leaq 0x8(%rsp), %rsi
movq %r15, (%rsi)
callq 0x84b08
pushq $0x2e
popq %rsi
movq %r14, %rdi
callq 0x7e12a
pushq $0x60
popq %rdi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r14, %rsi
callq 0x7fe86
leaq 0x10(%rbx), %r15
leaq 0x8(%rsp), %rsi
movq %r12, (%rsi)
movq %r15, %rdi
callq 0x84b08
pushq $0x2e
popq %rsi
movq %r14, %rdi
callq 0x7e12a
pushq $0x60
popq %rdi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r14, %rsi
callq 0x7fe86
leaq 0x8(%rsp), %rsi
movq %r12, (%rsi)
movq %r15, %rdi
callq 0x84b08
pushq $0x33
popq %rsi
movq %r14, %rdi
callq 0x7e12a
pushq $0x60
popq %rdi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r14, %rsi
callq 0x80714
leaq 0x8(%rsp), %rsi
movq %r12, (%rsi)
movq %r15, %rdi
callq 0x84b08
jmp 0x80653
movq %r14, %rdi
callq 0x7e25c
jmp 0x80653
movq %r14, %rdi
callq 0x7e25c
pushq $0x60
popq %rdi
callq 0x11350
movq %rax, %r12
movq %rax, %rdi
movq %r14, %rsi
callq 0x80714
leaq 0x8(%rsp), %rsi
movq %r12, (%rsi)
movq %r15, %rdi
callq 0x84b08
leaq 0x28(%rsp), %rdi
callq 0x209be
addq $0x48, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
jmp 0x80690
jmp 0x80690
jmp 0x806f2
jmp 0x806f2
movq %rax, %r14
pushq $0x60
jmp 0x80680
movq %rax, %r14
pushq $0x78
popq %rsi
movq %r15, %rdi
jmp 0x80699
jmp 0x806bd
jmp 0x806bd
jmp 0x80690
jmp 0x80690
jmp 0x806b0
movq %rax, %r14
pushq $0x60
popq %rsi
movq %r12, %rdi
callq 0x11360
jmp 0x806f5
jmp 0x806b0
jmp 0x806b0
jmp 0x806b0
jmp 0x806f2
jmp 0x806f2
jmp 0x806b0
jmp 0x80701
jmp 0x806b0
movq %rax, %r14
pushq $0x60
popq %rsi
movq %r12, %rdi
jmp 0x806cd
jmp 0x80701
movq %rax, %r14
pushq $0x60
jmp 0x806c9
movq %rax, %r14
pushq $0x78
popq %rsi
movq %r15, %rdi
callq 0x11360
jmp 0x80704
jmp 0x806f2
jmp 0x806f2
jmp 0x80701
jmp 0x806f2
jmp 0x80701
jmp 0x806f2
jmp 0x80701
jmp 0x80701
jmp 0x80701
jmp 0x80701
jmp 0x80701
jmp 0x80701
jmp 0x80701
jmp 0x80701
jmp 0x80701
movq %rax, %r14
leaq 0x28(%rsp), %rdi
callq 0x209be
jmp 0x80704
movq %rax, %r14
movq %rbx, %rdi
callq 0x7eb6a
movq %r14, %rdi
callq 0x11570