// File: /workspace/github_cpp_makefile_star2_O2/rfotino[P]consolite-compiler/src/syntax.cpp
// Function: VoidStatement::parse(Tokenizer*, std::vector<std::shared_ptr<FunctionToken>, std::allocator<std::shared_ptr<FunctionToken>>> const&, std::vector<std::shared_ptr<GlobalVarToken>, std::allocator<std::shared_ptr<GlobalVarToken>>> const&, std::vector<std::shared_ptr<ParamToken>, std::allocator<std::shared_ptr<ParamToken>>> const&, std::vector<std::shared_ptr<LocalVarToken>, std::allocator<std::shared_ptr<LocalVarToken>>> const&)
bool VoidStatement::parse(
      Tokenizer *tokenizer,
      const std::vector<std::shared_ptr<FunctionToken>>& functions,
      const std::vector<std::shared_ptr<GlobalVarToken>>& globals,
      const std::vector<std::shared_ptr<ParamToken>>& parameters,
      const std::vector<std::shared_ptr<LocalVarToken>>& localVars) {
  _lineNum = tokenizer->peekNext().line();
  // Parse the function call.
  if (!_fnCall.parse(tokenizer, functions, globals, parameters, localVars)) {
    return false;
  }
  // Make sure the function call is void.
  auto function = getFunction(_fnCall.funcName(), functions);
  if (!function || "void" != function->type().name()) {
    _error("Expected function call to be of type 'void'.", _lineNum);
    return false;
  }
  // Make sure the next symbol is a semicolon.
  if (!_expect(tokenizer, ";")) {
    return false;
  }
  return true;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x78, %rsp
movq %r9, 0x40(%rsp)
movq %r8, %r13
movq %rcx, %rbp
movq %rdx, %r12
movq %rsi, %r14
movq %rdi, %r15
movq %rsp, %rbx
movq %rbx, %rdi
callq 0x279a6
movl 0x8(%rbx), %eax
movl %eax, 0x8(%r15)
movq %rbx, %rdi
callq 0x7b20
leaq 0x10(%r15), %rdi
movq %r14, 0x38(%rsp)
movq %r14, %rsi
movq %r12, %rdx
movq %rbp, %rcx
movq %r13, %r8
movq 0x40(%rsp), %r9
callq 0xf8c8
testb %al, %al
je 0x16c58
leaq 0x20(%r15), %rsi
movq %rsp, %rbx
movq %rbx, %rdi
callq 0x73e0
leaq 0x48(%rsp), %rdi
movq %rbx, %rsi
movq %r12, %rdx
callq 0x283f4
movq %rsp, %rdi
callq 0x75c8
movq 0x48(%rsp), %rsi
testq %rsi, %rsi
je 0x16c2c
addq $0x20, %rsi
movq %rsp, %rdi
callq 0x9b54
leaq 0x10(%rsp), %rsi
leaq 0x58(%rsp), %rdi
callq 0x73e0
leaq 0x12428(%rip), %rdi     # 0x29030
leaq 0x58(%rsp), %rbx
movq %rbx, %rsi
callq 0x9976
movl %eax, %ebp
movq %rbx, %rdi
callq 0x75c8
movq %rsp, %rdi
callq 0x97a8
testb %bpl, %bpl
je 0x16c5c
leaq 0x13269(%rip), %rsi     # 0x29e9c
movq %rsp, %rdi
leaq 0x58(%rsp), %rdx
callq 0x9502
movl 0x8(%r15), %esi
movq %rsp, %rdi
callq 0x285f3
movq %rsp, %rdi
callq 0x75c8
xorl %ebx, %ebx
jmp 0x16c8a
xorl %ebx, %ebx
jmp 0x16c94
leaq 0x12f5e(%rip), %rsi     # 0x29bc1
movq %rsp, %rdi
leaq 0x58(%rsp), %rdx
callq 0x9502
movq %rsp, %rsi
pushq $0x1
popq %rdx
movq 0x38(%rsp), %rdi
callq 0x286c3
movl %eax, %ebx
movq %rsp, %rdi
callq 0x75c8
leaq 0x50(%rsp), %rdi
callq 0x7a34
movl %ebx, %eax
addq $0x78, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x16cb8
jmp 0x16cc5
movq %rax, %rbx
movq %rsp, %rdi
callq 0x97a8
jmp 0x16cc8
jmp 0x16cc5
movq %rax, %rbx
movq %rsp, %rdi
callq 0x75c8
jmp 0x16cc8
movq %rax, %rbx
leaq 0x50(%rsp), %rdi
callq 0x7a34
jmp 0x16cdf
movq %rax, %rbx
movq %rsp, %rdi
callq 0x75c8
movq %rbx, %rdi
callq 0x7510
nop