// File: /workspace/github_cpp_makefile_star2_O2/rfotino[P]consolite-compiler/src/syntax.cpp
// Function: ParamToken::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&)
bool ParamToken::parse(
      Tokenizer *tokenizer,
      const std::vector<std::shared_ptr<FunctionToken>>& functions,
      const std::vector<std::shared_ptr<GlobalVarToken>>& globals) {
  if (!_type.parse(tokenizer, functions, globals)) {
    return false;
  } else if (_type.isArray()) {
    _error("Array parameter types not supported.", _type.line());
    return false;
  } else if ("void" == _type.name()) {
    _error("Parameter cannot be of type void.", _type.line());
    return false;
  }
  AtomToken nameToken = tokenizer->getNext();
  if (nameToken.str().empty()) {
    _error("Unexpected EOF.", nameToken.line());
    return false;
  } else if (!isValidName(nameToken.str())) {
    _error("Invalid parameter name '" + nameToken.str() + "'.",
           nameToken.line());
    return false;
  } else if (getFunction(nameToken.str(), functions)) {
    _error("Parameter name '" + nameToken.str() + "' conflicts with "
           "function name.", nameToken.line());
    return false;
  } else if (getGlobal(nameToken.str(), globals)) {
    _error("Parameter name '" + nameToken.str() + "' conflicts with "
           " global var name.", nameToken.line());
    return false;
  }
  _name = nameToken.str();
  return true;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x98, %rsp
movq %rcx, %r14
movq %rdx, %r12
movq %rsi, %r15
movq %rdi, %rbx
addq $0x38, %rdi
xorps %xmm0, %xmm0
leaq 0x40(%rsp), %r8
movaps %xmm0, (%r8)
andq $0x0, 0x10(%r8)
movq %rsp, %r9
movaps %xmm0, (%r9)
andq $0x0, 0x10(%r9)
callq 0xe2ac
movl %eax, %ebp
movq %rsp, %rdi
callq 0x97bc
leaq 0x40(%rsp), %rdi
callq 0x9786
testb %bpl, %bpl
je 0x128cb
cmpb $0x1, 0x68(%rbx)
jne 0x12871
leaq 0x1737f(%rip), %rsi     # 0x29bd4
leaq 0x40(%rsp), %rdi
movq %rsp, %rdx
callq 0x9502
movl 0x40(%rbx), %esi
leaq 0x40(%rsp), %rdi
callq 0x285f3
jmp 0x128c1
leaq 0x48(%rbx), %rsi
leaq 0x40(%rsp), %r13
movq %r13, %rdi
callq 0x73e0
leaq 0x167a7(%rip), %rdi     # 0x29030
movq %r13, %rsi
callq 0x97dd
movl %eax, %ebp
movq %r13, %rdi
callq 0x75c8
testb %bpl, %bpl
je 0x128e1
leaq 0x17352(%rip), %rsi     # 0x29bf9
leaq 0x40(%rsp), %rdi
movq %rsp, %rdx
callq 0x9502
movl 0x40(%rbx), %esi
leaq 0x40(%rsp), %rdi
callq 0x285f3
leaq 0x40(%rsp), %rdi
callq 0x75c8
xorl %ebx, %ebx
movl %ebx, %eax
addq $0x98, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x40(%rsp), %rdi
movq %r15, %rsi
callq 0x2772c
leaq 0x50(%rsp), %r15
movq %rsp, %rdi
movq %r15, %rsi
callq 0x73e0
movq %rsp, %rdi
movq 0x8(%rdi), %r13
callq 0x75c8
testq %r13, %r13
je 0x129b8
movq %rsp, %rdi
movq %r15, %rsi
callq 0x73e0
movq %rsp, %rdi
callq 0x2804b
movl %eax, %ebp
movq %rsp, %rdi
callq 0x75c8
testb %bpl, %bpl
je 0x129dd
movq %rsp, %rdi
movq %r15, %rsi
callq 0x73e0
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
movq %r12, %rdx
callq 0x283f4
leaq 0x28(%rsp), %rdi
movq -0x8(%rdi), %r12
callq 0x7a34
movq %rsp, %rdi
callq 0x75c8
testq %r12, %r12
je 0x12a4d
leaq 0x78(%rsp), %rdi
movq %r15, %rsi
callq 0x73e0
leaq 0x172ad(%rip), %rsi     # 0x29c34
leaq 0x20(%rsp), %rdi
leaq 0x78(%rsp), %rdx
callq 0x1832f
leaq 0x172a8(%rip), %rdx     # 0x29c45
movq %rsp, %rdi
leaq 0x20(%rsp), %rsi
callq 0x9ad4
movl 0x48(%rsp), %esi
movq %rsp, %rdi
callq 0x285f3
jmp 0x12a20
leaq 0x17018(%rip), %rsi     # 0x299d7
movq %rsp, %rdi
leaq 0x20(%rsp), %rdx
callq 0x9502
movl 0x48(%rsp), %esi
movq %rsp, %rdi
callq 0x285f3
movq %rsp, %rdi
jmp 0x12a37
leaq 0x78(%rsp), %rdi
movq %r15, %rsi
callq 0x73e0
leaq 0x1722a(%rip), %rsi     # 0x29c1b
leaq 0x20(%rsp), %rdi
leaq 0x78(%rsp), %rdx
callq 0x1832f
leaq 0x1733b(%rip), %rdx     # 0x29d42
movq %rsp, %rdi
leaq 0x20(%rsp), %rsi
callq 0x9ad4
movl 0x48(%rsp), %esi
movq %rsp, %rdi
callq 0x285f3
movq %rsp, %rdi
callq 0x75c8
leaq 0x20(%rsp), %rdi
callq 0x75c8
leaq 0x78(%rsp), %rdi
callq 0x75c8
xorl %ebx, %ebx
leaq 0x40(%rsp), %rdi
callq 0x7b20
jmp 0x128cd
movq %rsp, %rdi
movq %r15, %rsi
callq 0x73e0
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
movq %r14, %rdx
callq 0x28490
leaq 0x28(%rsp), %rdi
movq -0x8(%rdi), %r14
callq 0x7a34
movq %rsp, %rdi
callq 0x75c8
testq %r14, %r14
je 0x12acb
leaq 0x78(%rsp), %rdi
movq %r15, %rsi
callq 0x73e0
leaq 0x1719d(%rip), %rsi     # 0x29c34
leaq 0x20(%rsp), %rdi
leaq 0x78(%rsp), %rdx
callq 0x1832f
leaq 0x171b8(%rip), %rdx     # 0x29c65
movq %rsp, %rdi
leaq 0x20(%rsp), %rsi
callq 0x9ad4
movl 0x48(%rsp), %esi
movq %rsp, %rdi
callq 0x285f3
jmp 0x12a20
movq %rsp, %rdi
movq %r15, %rsi
callq 0x73e0
addq $0x70, %rbx
movq %rsp, %r14
movq %rbx, %rdi
movq %r14, %rsi
callq 0x7360
movq %r14, %rdi
callq 0x75c8
movb $0x1, %bl
jmp 0x12a3e
jmp 0x12b4e
jmp 0x12b0d
jmp 0x12b1a
jmp 0x12b29
jmp 0x12b4e
jmp 0x12b3d
jmp 0x12b4e
jmp 0x12b0d
jmp 0x12b1a
jmp 0x12b29
jmp 0x12b4e
movq %rax, %rbx
movq %rsp, %rdi
callq 0x75c8
jmp 0x12b1d
movq %rax, %rbx
leaq 0x20(%rsp), %rdi
callq 0x75c8
jmp 0x12b2c
movq %rax, %rbx
leaq 0x78(%rsp), %rdi
jmp 0x12b43
jmp 0x12b3d
jmp 0x12b4e
jmp 0x12b4e
jmp 0x12b3d
jmp 0x12b4e
movq %rax, %rbx
movq %rsp, %rdi
callq 0x75c8
jmp 0x12b51
jmp 0x12b4e
jmp 0x12b5f
movq %rax, %rbx
leaq 0x40(%rsp), %rdi
callq 0x7b20
jmp 0x12b88
jmp 0x12b6e
movq %rax, %rbx
leaq 0x40(%rsp), %rdi
callq 0x75c8
jmp 0x12b88
movq %rax, %rbx
jmp 0x12b88
movq %rax, %rbx
movq %rsp, %rdi
callq 0x97bc
leaq 0x40(%rsp), %rdi
callq 0x9786
movq %rbx, %rdi
callq 0x7510