// File: /workspace/github_cpp_makefile_star2_O2/baziotis[P]minijava-cpp/parse.cpp
// Function: parse_goal()
Goal parse_goal() {
    Goal goal;
    goal.main_class = parse_main_class();
    if (goal.main_class.is_undefined()) {
        fatal_error("Main Class had errors that can't be recovered.");
    }
    while (is_token(TOK::CLASS)) {
        TypeDeclaration *type_decl = parse_type_declaration();
        if (!type_decl->is_undefined()) {
            goal.type_decls.push(type_decl);
        }
    }
    return goal;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x68, %rsp
movq %rdi, %r12
xorps %xmm0, %xmm0
movups %xmm0, 0x48(%rdi)
movups %xmm0, 0x38(%rdi)
movups %xmm0, 0x28(%rdi)
andq $0x0, 0x58(%rdi)
movups %xmm0, 0x18(%rdi)
movups %xmm0, 0x58(%rsp)
movups %xmm0, 0x48(%rsp)
movups %xmm0, 0x38(%rsp)
pushq $0x16
popq %rdi
callq 0x5d0d
testb %al, %al
je 0x5794
leaq 0x12f71(%rip), %r15     # 0x18698
movq 0x8(%r15), %rax
movq %rax, 0x30(%rsp)
pushq $0x8
popq %rdi
callq 0x5d0d
testb %al, %al
je 0x57a6
leaq 0xa1d5(%rip), %rbx      # 0xf918
pushq $0x7
popq %rdi
movq %rbx, %rsi
callq 0x5d30
pushq $0xc
popq %rdi
movq %rbx, %rsi
callq 0x5d30
pushq $0xf
popq %rdi
movq %rbx, %rsi
callq 0x5d30
pushq $0x10
popq %rdi
movq %rbx, %rsi
callq 0x5d30
cmpl $0x8, (%r15)
jne 0x5786
movq 0x8(%r15), %rax
cmpq 0x132c8(%rip), %rax     # 0x18a48
je 0x5ba7
leaq 0xa0b6(%rip), %rdi      # 0xf843
callq 0x5de2
jmp 0x57b5
leaq 0x12efd(%rip), %rax     # 0x18698
movl (%rax), %esi
leaq 0xa1d0(%rip), %rdi      # 0xf974
jmp 0x57b0
movl (%r15), %esi
leaq 0xa18e(%rip), %rdi      # 0xf93e
callq 0x602e
andq $0x0, 0x30(%rsp)
movups 0x28(%rsp), %xmm0
movups 0x38(%rsp), %xmm1
movups 0x48(%rsp), %xmm2
movups 0x58(%rsp), %xmm3
movups %xmm3, 0x38(%r12)
movups %xmm2, 0x28(%r12)
movups %xmm1, 0x18(%r12)
movups %xmm0, 0x8(%r12)
cmpq $0x0, 0x10(%r12)
je 0x5ca7
movq %r12, 0x10(%rsp)
addq $0x48, %r12
movq %r12, 0x18(%rsp)
leaq 0x12e90(%rip), %r12     # 0x18698
leaq 0x12e81(%rip), %r13     # 0x18690
leaq 0xa118(%rip), %rbx      # 0xf92e
pushq $0x1e
popq %r15
cmpl $0x16, (%r12)
jne 0x5b93
pushq $0x48
popq %rdi
callq 0x6e28
movq %rax, %r14
addq $0x8, %rax
movq %rax, 0x8(%rsp)
xorps %xmm0, %xmm0
movups %xmm0, 0x8(%r14)
movups %xmm0, 0x18(%r14)
movups %xmm0, 0x28(%r14)
movups %xmm0, 0x38(%r14)
movl (%r13), %eax
movl %eax, (%r14)
pushq $0x16
popq %rdi
callq 0x5d0d
testb %al, %al
je 0x58fd
movq %r14, (%rsp)
movq 0x8(%r12), %r14
pushq $0x8
popq %rdi
leaq 0xa66e(%rip), %rsi      # 0xfee8
callq 0x5d30
testb %al, %al
je 0x590b
movq 0x8(%rsp), %rax
movq %r14, (%rax)
pushq $0x17
popq %rdi
callq 0x5d0d
testb %al, %al
movq (%rsp), %r14
je 0x58bb
movq 0x8(%r12), %rax
movq %rax, 0x10(%r14)
pushq $0x8
popq %rdi
leaq 0xa648(%rip), %rsi      # 0xfefa
callq 0x5d30
testb %al, %al
je 0x5919
pushq $0x7
popq %rdi
callq 0x5d0d
testb %al, %al
jne 0x58db
movq 0x8(%rsp), %rax
movq (%rax), %rsi
leaq 0xa63e(%rip), %rdi      # 0xff14
callq 0x6cfb
addq $0x18, %r14
callq 0x5ee1
testb %al, %al
je 0x5942
movq %r14, %rdi
callq 0x5f16
movl %r15d, %edi
movq %rbx, %rsi
callq 0x5d30
jmp 0x58df
leaq 0xa5ba(%rip), %rdi      # 0xfebe
callq 0x5de2
jmp 0x5919
pushq $0x16
popq %rdi
xorl %esi, %esi
callq 0x5e2c
movq (%rsp), %r14
xorps %xmm0, %xmm0
movq 0x8(%rsp), %rax
movups %xmm0, (%rax)
xorl %esi, %esi
orq 0x10(%r14), %rsi
je 0x581a
movq 0x18(%rsp), %rdi
movq %r14, %rsi
callq 0x6db4
jmp 0x581a
movq (%rsp), %rax
addq $0x30, %rax
movq %rax, 0x20(%rsp)
cmpl $0xc, (%r12)
jne 0x5b67
pushq $0x70
popq %rdi
callq 0x6e28
movq %rax, %r14
andl $0x0, 0x8(%rax)
leaq 0x18(%rax), %rbp
xorps %xmm0, %xmm0
movups %xmm0, 0x18(%rax)
movups %xmm0, 0x28(%rax)
movups %xmm0, 0x38(%rax)
andq $0x0, 0x68(%rax)
movups %xmm0, 0x48(%rax)
movups %xmm0, 0x58(%rax)
movl (%r13), %eax
movl %eax, (%r14)
pushq $0xc
popq %rdi
callq 0x5d0d
testb %al, %al
je 0x5a04
callq 0x6293
movl %eax, 0x8(%r14)
movq %rdx, 0x10(%r14)
testl %eax, %eax
je 0x5a12
movq 0x8(%r12), %rax
movq %rax, (%rbp)
pushq $0x8
popq %rdi
leaq 0x9eeb(%rip), %rsi      # 0xf8ab
callq 0x5d30
testb %al, %al
je 0x5a12
pushq $0x3
popq %rdi
callq 0x5d0d
testb %al, %al
jne 0x59e5
movq (%rbp), %rsi
leaq 0xa590(%rip), %rdi      # 0xff70
callq 0x6cfb
leaq 0x20(%r14), %r13
callq 0x5ee1
testb %al, %al
je 0x5a1c
movq %r13, %rdi
callq 0x5f16
pushq $0x1c
popq %rdi
callq 0x5d0d
jmp 0x59e9
movl (%r12), %edi
movq 0x8(%r12), %rsi
callq 0x6328
andq $0x0, (%rbp)
jmp 0x594f
pushq $0x19
popq %rdi
callq 0x5d0d
testb %al, %al
jne 0x5a38
movq (%rbp), %rsi
leaq 0xa580(%rip), %rdi      # 0xffb3
callq 0x6cfb
pushq $0x7
popq %rdi
callq 0x5d0d
testb %al, %al
jne 0x5a54
movq (%rbp), %rsi
leaq 0xa5a6(%rip), %rdi      # 0xfff5
callq 0x6cfb
leaq 0x38(%r14), %r13
callq 0x5ee1
testb %al, %al
je 0x5a85
movq %r13, %rdi
callq 0x5f16
movl %r15d, %edi
movq %rbx, %rsi
callq 0x5d30
testb %al, %al
jne 0x5a58
movl %r15d, %edi
pushq $0x1
popq %rsi
callq 0x5e2c
jmp 0x5a58
movq %r14, %r13
addq $0x50, %r13
movl (%r12), %eax
addl $-0x7, %eax
cmpl $0x4, %eax
ja 0x5aa2
movq %r13, %rdi
callq 0x5ff8
jmp 0x5a8c
pushq $0xe
popq %rdi
callq 0x5d0d
testb %al, %al
jne 0x5abe
movq (%rbp), %rsi
leaq 0xa56e(%rip), %rdi      # 0x10027
callq 0x6cfb
callq 0x67e3
movq %rax, %r13
cmpl $0x0, 0x4(%rax)
jne 0x5adc
movq (%rbp), %rsi
leaq 0xa581(%rip), %rdi      # 0x10058
callq 0x6cfb
movq %r13, 0x68(%r14)
movl %r15d, %edi
callq 0x5d0d
testb %al, %al
jne 0x5b17
movq (%rbp), %rsi
movl (%r12), %ecx
movq 0x8(%r12), %r8
leaq 0xa586(%rip), %rdi      # 0x10086
leaq 0xa5c7(%rip), %rdx      # 0x100ce
callq 0x6d4d
movl %r15d, %edi
pushq $0x1
popq %rsi
callq 0x5e2c
pushq $0x1a
popq %rdi
callq 0x5d0d
testb %al, %al
leaq 0x12b68(%rip), %r13     # 0x18690
jne 0x5b4a
movq (%rbp), %rsi
movl (%r12), %ecx
movq 0x8(%r12), %r8
leaq 0xa59a(%rip), %rdi      # 0x100d8
leaq 0x9f0f(%rip), %rdx      # 0xfa54
callq 0x6d4d
cmpq $0x0, (%rbp)
je 0x594f
movq 0x20(%rsp), %rdi
movq %r14, %rsi
callq 0x708c
jmp 0x594f
pushq $0x1a
popq %rdi
callq 0x5d0d
movq 0x8(%rsp), %r14
movq (%r14), %rsi
testb %al, %al
jne 0x5b8a
leaq 0xa3c0(%rip), %rdi      # 0xff42
callq 0x6cfb
movq (%r14), %rsi
movq (%rsp), %r14
jmp 0x5926
movq 0x10(%rsp), %rax
addq $0x68, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
callq 0x351d
leaq 0x9cf1(%rip), %rsi      # 0xf8a4
pushq $0x3
popq %rdi
callq 0x5d30
pushq $0x11
popq %rdi
callq 0x5d0d
testb %al, %al
jne 0x5bd8
leaq 0x9cf0(%rip), %rdi      # 0xf8be
callq 0x5de2
callq 0x351d
leaq 0x9d39(%rip), %rbx      # 0xf918
pushq $0x24
popq %rdi
movq %rbx, %rsi
callq 0x5d30
pushq $0x1b
popq %rdi
movq %rbx, %rsi
callq 0x5d30
pushq $0x8
popq %rdi
movq %rbx, %rsi
callq 0x5d30
cmpl $0x1c, (%r15)
jne 0x5c1f
leaq 0x9cb1(%rip), %rdi      # 0xf8be
callq 0x5df1
pushq $0x19
popq %rdi
pushq $0x1
popq %rsi
callq 0x5e2c
jmp 0x5c2e
leaq 0x9ce1(%rip), %rsi      # 0xf907
pushq $0x19
popq %rdi
callq 0x5d30
leaq 0x38(%rsp), %rbx
leaq 0x9ccd(%rip), %rsi      # 0xf907
pushq $0x7
popq %rdi
callq 0x5d30
leaq 0x9ce5(%rip), %r14      # 0xf92e
pushq $0x1e
popq %rbp
callq 0x5ee1
testb %al, %al
je 0x5c69
movq %rbx, %rdi
callq 0x5f16
movl %ebp, %edi
movq %r14, %rsi
callq 0x5d30
jmp 0x5c4c
leaq 0x50(%rsp), %rbx
movl (%r15), %eax
addl $-0x7, %eax
cmpl $0x4, %eax
ja 0x5c83
movq %rbx, %rdi
callq 0x5ff8
jmp 0x5c6e
leaq 0x9c7d(%rip), %rsi      # 0xf907
pushq $0x1a
popq %rbx
movl %ebx, %edi
callq 0x5d30
leaq 0x9c7d(%rip), %rsi      # 0xf918
movl %ebx, %edi
callq 0x5d30
jmp 0x57bb
leaq 0x8fb1(%rip), %rdi      # 0xec5f
xorl %eax, %eax
callq 0x2030
leaq 0x9b4c(%rip), %rdi      # 0xf808
callq 0x60d7
pushq $0xa
popq %rdi
callq 0x2160
pushq $0x1
popq %rdi
callq 0x2140