// File: /workspace/github_c_makefile_star2_O0/mrkite[P]regs/docmaker/parser.cc
// Function: Parser::addDefinition(Token const&, File*)
bool Parser::addDefinition(const Token &def, File *file) {
  Symbol *s = find(def);
  if (s->isKnown) {
    error(file, "Duplicate definition: '%s'\nDefined in '%s' on line %d\n",
          s->name.c_str(), s->definedFile.c_str(), s->definedLine);
    return false;
  }
  s->definedLine = def.curLine;
  s->definedFile = def.filename;
  s->isKnown = true;
  Token token = file->token();
  switch (token.type) {
    case ENUM:
      return parseEnum(s, file);
    case SYMBOL:
      switch (token.asSym) {
        case '(':
          return parseFunc(s, file);
        case '=':
          return parseAlias(s, file);
        default:
          error(file, "Expected '=' or '(', found '%c'\n", token.asSym);
          return false;
      }
    case STRUCT:
      s->kind = isStruct;
      s->asStruct = new Struct();
      return parseStruct(s->asStruct, file);
    case UNION:
      s->kind = isUnion;
      s->asStruct = new Struct();
      return parseStruct(s->asStruct, file);
    default:
      error(file, "Parser error.\n");
      return false;
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xe0, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq -0x10(%rbp), %rdi
movq %rdi, -0x98(%rbp)
movq -0x18(%rbp), %rsi
callq 0x4800
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
testb $0x1, 0x28(%rax)
je 0x5018
movq -0x20(%rbp), %rax
movq %rax, -0xa8(%rbp)
movq -0x28(%rbp), %rdi
callq 0x3100
movq %rax, -0xa0(%rbp)
movq -0x28(%rbp), %rdi
addq $0x58, %rdi
callq 0x3100
movq -0x98(%rbp), %rdi
movq -0xa8(%rbp), %rsi
movq -0xa0(%rbp), %rcx
movq %rax, %r8
movq -0x28(%rbp), %rax
movl 0x50(%rax), %r9d
leaq 0xc0ab(%rip), %rdx      # 0x110b3
movb $0x0, %al
callq 0x52f0
movb $0x0, -0x1(%rbp)
jmp 0x52cd
movq -0x18(%rbp), %rax
movl 0x50(%rax), %ecx
movq -0x28(%rbp), %rax
movl %ecx, 0x50(%rax)
movq -0x18(%rbp), %rsi
addq $0x30, %rsi
movq -0x28(%rbp), %rdi
addq $0x58, %rdi
callq 0x3050
movq -0x28(%rbp), %rax
movb $0x1, 0x28(%rax)
movq -0x20(%rbp), %rsi
leaq -0x80(%rbp), %rdi
callq 0xc500
movl -0x80(%rbp), %eax
decl %eax
movl %eax, %ecx
movq %rcx, -0xb0(%rbp)
subl $0x5, %eax
ja 0x529b
movq -0xb0(%rbp), %rax
leaq 0xbfe7(%rip), %rcx      # 0x1105c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x98(%rbp), %rdi
movq -0x28(%rbp), %rsi
movq -0x20(%rbp), %rdx
callq 0x53d0
movb %al, -0xb1(%rbp)
jmp 0x509a
movb -0xb1(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
movl $0x1, -0x90(%rbp)
jmp 0x52c4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
leaq -0x80(%rbp), %rdi
callq 0x68a0
jmp 0x52db
movsbl -0x58(%rbp), %eax
movl %eax, -0xb8(%rbp)
subl $0x28, %eax
je 0x50f2
jmp 0x50e5
movl -0xb8(%rbp), %eax
subl $0x3d, %eax
je 0x5128
jmp 0x515e
movq -0x98(%rbp), %rdi
movq -0x28(%rbp), %rsi
movq -0x20(%rbp), %rdx
callq 0x5920
movb %al, -0xb9(%rbp)
jmp 0x510e
movb -0xb9(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
movl $0x1, -0x90(%rbp)
jmp 0x52c4
movq -0x98(%rbp), %rdi
movq -0x28(%rbp), %rsi
movq -0x20(%rbp), %rdx
callq 0x5e30
movb %al, -0xba(%rbp)
jmp 0x5144
movb -0xba(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
movl $0x1, -0x90(%rbp)
jmp 0x52c4
movq -0x98(%rbp), %rdi
movq -0x20(%rbp), %rsi
movsbl -0x58(%rbp), %ecx
leaq 0xbf76(%rip), %rdx      # 0x110ea
xorl %eax, %eax
callq 0x52f0
jmp 0x517d
movb $0x0, -0x1(%rbp)
movl $0x1, -0x90(%rbp)
jmp 0x52c4
movq -0x28(%rbp), %rax
movl $0x3, 0x78(%rax)
movl $0x18, %edi
callq 0x3240
movq %rax, -0xc8(%rbp)
jmp 0x51ae
movq -0xc8(%rbp), %rdi
xorps %xmm0, %xmm0
movaps %xmm0, (%rdi)
movq $0x0, 0x10(%rdi)
callq 0x6d00
movq -0xc8(%rbp), %rcx
movq -0x98(%rbp), %rdi
movq -0x28(%rbp), %rax
movq %rcx, 0x80(%rax)
movq -0x28(%rbp), %rax
movq 0x80(%rax), %rsi
movq -0x20(%rbp), %rdx
callq 0x5f40
movb %al, -0xc9(%rbp)
jmp 0x51fd
movb -0xc9(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
movl $0x1, -0x90(%rbp)
jmp 0x52c4
movq -0x28(%rbp), %rax
movl $0x4, 0x78(%rax)
movl $0x18, %edi
callq 0x3240
movq %rax, -0xd8(%rbp)
jmp 0x5235
movq -0xd8(%rbp), %rdi
xorps %xmm0, %xmm0
movaps %xmm0, (%rdi)
movq $0x0, 0x10(%rdi)
callq 0x6d00
movq -0xd8(%rbp), %rcx
movq -0x98(%rbp), %rdi
movq -0x28(%rbp), %rax
movq %rcx, 0x80(%rax)
movq -0x28(%rbp), %rax
movq 0x80(%rax), %rsi
movq -0x20(%rbp), %rdx
callq 0x5f40
movb %al, -0xd9(%rbp)
jmp 0x5284
movb -0xd9(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
movl $0x1, -0x90(%rbp)
jmp 0x52c4
movq -0x98(%rbp), %rdi
movq -0x20(%rbp), %rsi
leaq 0xbe5e(%rip), %rdx      # 0x1110b
xorl %eax, %eax
callq 0x52f0
jmp 0x52b6
movb $0x0, -0x1(%rbp)
movl $0x1, -0x90(%rbp)
leaq -0x80(%rbp), %rdi
callq 0x68a0
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0xe0, %rsp
popq %rbp
retq
movq -0x88(%rbp), %rdi
callq 0x3490
nopw (%rax,%rax)