// File: /workspace/github_c_makefile_star2_O0/ejunjsh[P]mycc/sym.c
// Function: dumpsym
static void dumpsym(struct symtable *sym, int indent) {
  int i;

  for (i = 0; i < indent; i++)
    printf(" ");
  switch (sym->type & (~0xf)) {
    case P_VOID:
      printf("void ");
      break;
    case P_CHAR:
      printf("char ");
      break;
    case P_INT:
      printf("int ");
      break;
    case P_LONG:
      printf("long ");
      break;
    case P_STRUCT:
      if (sym->ctype != NULL)
	printf("struct %s ", sym->ctype->name);
      else
	printf("struct %s ", sym->name);
      break;
    case P_UNION:
      if (sym->ctype != NULL)
	printf("union %s ", sym->ctype->name);
      else
	printf("union %s ", sym->name);
      break;
    default:
      printf("unknown type ");
  }

  for (i = 0; i < (sym->type & 0xf); i++)
    printf("*");
  printf("%s", sym->name);

  switch (sym->stype) {
    case S_VARIABLE:
      break;
    case S_FUNCTION:
      printf("()");
      break;
    case S_ARRAY:
      printf("[]");
      break;
    default:
      printf(" unknown stype");
  }

  switch (sym->class) {
    case C_GLOBAL:
      printf(": global");
      break;
    case C_LOCAL:
      printf(": local");
      break;
    case C_PARAM:
      printf(": param");
      break;
    case C_EXTERN:
      printf(": extern");
      break;
    case C_STATIC:
      printf(": static");
      break;
    case C_STRUCT:
      printf(": struct");
      break;
    case C_UNION:
      printf(": union");
      break;
    case C_MEMBER:
      printf(": member");
      break;
    case C_ENUMTYPE:
      printf(": enumtype");
      break;
    case C_ENUMVAL:
      printf(": enumval");
      break;
    case C_TYPEDEF:
      printf(": typedef");
      break;
    default:
      printf(": unknown class");
  }

  switch (sym->stype) {
    case S_VARIABLE:
      if (sym->class == C_ENUMVAL)
	printf(", value %d\n", sym->stu.st_posn);
      else
	printf(", size %d\n", sym->size);
      break;
    case S_FUNCTION:
      printf(", %d params\n", sym->nelems);
      break;
    case S_ARRAY:
      printf(", %d elems, size %d\n", sym->nelems, sym->size);
      break;
  }

  switch (sym->type & (~0xf)) {
    case P_STRUCT:
    case P_UNION:
      dumptable(sym->member, NULL, 4);
  }

  switch (sym->stype) {
    case S_FUNCTION:
      dumptable(sym->member, NULL, 4);
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x8(%rbp)
movl %esi, -0xc(%rbp)
movl $0x0, -0x10(%rbp)
movl -0x10(%rbp), %eax
cmpl -0xc(%rbp), %eax
jge 0xa877
leaq 0x17ed(%rip), %rdi      # 0xc052
movb $0x0, %al
callq 0x2070
movl -0x10(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x10(%rbp)
jmp 0xa856
movq -0x8(%rbp), %rax
movl 0x10(%rax), %eax
andl $-0x10, %eax
movl %eax, -0x14(%rbp)
subl $0x10, %eax
je 0xa8c4
jmp 0xa88b
movl -0x14(%rbp), %eax
subl $0x20, %eax
je 0xa8d7
jmp 0xa895
movl -0x14(%rbp), %eax
subl $0x30, %eax
je 0xa8ea
jmp 0xa89f
movl -0x14(%rbp), %eax
subl $0x40, %eax
je 0xa8fd
jmp 0xa8a9
movl -0x14(%rbp), %eax
subl $0x50, %eax
je 0xa910
jmp 0xa8b3
movl -0x14(%rbp), %eax
subl $0x60, %eax
je 0xa94f
jmp 0xa98e
leaq 0x36ae(%rip), %rdi      # 0xdf79
movb $0x0, %al
callq 0x2070
jmp 0xa99c
leaq 0x36a1(%rip), %rdi      # 0xdf7f
movb $0x0, %al
callq 0x2070
jmp 0xa99c
leaq 0x3694(%rip), %rdi      # 0xdf85
movb $0x0, %al
callq 0x2070
jmp 0xa99c
leaq 0x3686(%rip), %rdi      # 0xdf8a
movb $0x0, %al
callq 0x2070
jmp 0xa99c
movq -0x8(%rbp), %rax
cmpq $0x0, 0x18(%rax)
je 0xa937
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x8(%rax), %rsi
leaq 0x3662(%rip), %rdi      # 0xdf90
movb $0x0, %al
callq 0x2070
jmp 0xa94d
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rsi
leaq 0x364a(%rip), %rdi      # 0xdf90
movb $0x0, %al
callq 0x2070
jmp 0xa99c
movq -0x8(%rbp), %rax
cmpq $0x0, 0x18(%rax)
je 0xa976
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x8(%rax), %rsi
leaq 0x362e(%rip), %rdi      # 0xdf9b
movb $0x0, %al
callq 0x2070
jmp 0xa98c
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rsi
leaq 0x3616(%rip), %rdi      # 0xdf9b
movb $0x0, %al
callq 0x2070
jmp 0xa99c
leaq 0x3610(%rip), %rdi      # 0xdfa5
movb $0x0, %al
callq 0x2070
movl $0x0, -0x10(%rbp)
movl -0x10(%rbp), %eax
movq -0x8(%rbp), %rcx
movl 0x10(%rcx), %ecx
andl $0xf, %ecx
cmpl %ecx, %eax
jge 0xa9cd
leaq 0x31d8(%rip), %rdi      # 0xdb93
movb $0x0, %al
callq 0x2070
movl -0x10(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x10(%rbp)
jmp 0xa9a3
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rsi
leaq 0x2ad2(%rip), %rdi      # 0xd4ae
xorl %eax, %eax
callq 0x2070
movq -0x8(%rbp), %rax
movl 0x20(%rax), %eax
movl %eax, -0x18(%rbp)
testl %eax, %eax
je 0xaa07
jmp 0xa9f3
movl -0x18(%rbp), %eax
subl $0x1, %eax
je 0xaa09
jmp 0xa9fd
movl -0x18(%rbp), %eax
subl $0x2, %eax
je 0xaa19
jmp 0xaa29
jmp 0xaa37
leaq 0x3745(%rip), %rdi      # 0xe155
movb $0x0, %al
callq 0x2070
jmp 0xaa37
leaq 0x3593(%rip), %rdi      # 0xdfb3
movb $0x0, %al
callq 0x2070
jmp 0xaa37
leaq 0x3586(%rip), %rdi      # 0xdfb6
movb $0x0, %al
callq 0x2070
movq -0x8(%rbp), %rax
movl 0x24(%rax), %eax
decl %eax
movl %eax, %ecx
movq %rcx, -0x20(%rbp)
subl $0xa, %eax
ja 0xab1c
movq -0x20(%rbp), %rax
leaq 0x3472(%rip), %rcx      # 0xdecc
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq 0x355b(%rip), %rdi      # 0xdfc5
movb $0x0, %al
callq 0x2070
jmp 0xab2a
leaq 0x3551(%rip), %rdi      # 0xdfce
movb $0x0, %al
callq 0x2070
jmp 0xab2a
leaq 0x3546(%rip), %rdi      # 0xdfd6
movb $0x0, %al
callq 0x2070
jmp 0xab2a
leaq 0x353b(%rip), %rdi      # 0xdfde
movb $0x0, %al
callq 0x2070
jmp 0xab2a
leaq 0x3534(%rip), %rdi      # 0xdfe7
movb $0x0, %al
callq 0x2070
jmp 0xab2a
leaq 0x352d(%rip), %rdi      # 0xdff0
movb $0x0, %al
callq 0x2070
jmp 0xab2a
leaq 0x3526(%rip), %rdi      # 0xdff9
movb $0x0, %al
callq 0x2070
jmp 0xab2a
leaq 0x351e(%rip), %rdi      # 0xe001
movb $0x0, %al
callq 0x2070
jmp 0xab2a
leaq 0x3517(%rip), %rdi      # 0xe00a
movb $0x0, %al
callq 0x2070
jmp 0xab2a
leaq 0x3512(%rip), %rdi      # 0xe015
movb $0x0, %al
callq 0x2070
jmp 0xab2a
leaq 0x350c(%rip), %rdi      # 0xe01f
movb $0x0, %al
callq 0x2070
jmp 0xab2a
leaq 0x3506(%rip), %rdi      # 0xe029
movb $0x0, %al
callq 0x2070
movq -0x8(%rbp), %rax
movl 0x20(%rax), %eax
movl %eax, -0x24(%rbp)
testl %eax, %eax
je 0xab4e
jmp 0xab3a
movl -0x24(%rbp), %eax
subl $0x1, %eax
je 0xab85
jmp 0xab44
movl -0x24(%rbp), %eax
subl $0x2, %eax
je 0xab9c
jmp 0xabb8
movq -0x8(%rbp), %rax
cmpl $0xa, 0x24(%rax)
jne 0xab6e
movq -0x8(%rbp), %rax
movl (%rax), %esi
leaq 0x34d4(%rip), %rdi      # 0xe039
movb $0x0, %al
callq 0x2070
jmp 0xab83
movq -0x8(%rbp), %rax
movl 0x28(%rax), %esi
leaq 0x34e0(%rip), %rdi      # 0xe05c
movb $0x0, %al
callq 0x2070
jmp 0xabb8
movq -0x8(%rbp), %rax
movl 0x2c(%rax), %esi
leaq 0x34b2(%rip), %rdi      # 0xe045
movb $0x0, %al
callq 0x2070
jmp 0xabb8
movq -0x8(%rbp), %rax
movl 0x2c(%rax), %esi
movq -0x8(%rbp), %rax
movl 0x28(%rax), %edx
leaq 0x34a1(%rip), %rdi      # 0xe052
movb $0x0, %al
callq 0x2070
movq -0x8(%rbp), %rax
movl 0x10(%rax), %eax
andl $-0x10, %eax
movl %eax, -0x28(%rbp)
subl $0x50, %eax
je 0xabd6
jmp 0xabcc
movl -0x28(%rbp), %eax
subl $0x60, %eax
jne 0xabec
jmp 0xabd6
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rdi
xorl %eax, %eax
movl %eax, %esi
movl $0x4, %edx
callq 0xa7d0
movq -0x8(%rbp), %rax
movl 0x20(%rax), %eax
subl $0x1, %eax
jne 0xac10
jmp 0xabfa
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rdi
xorl %eax, %eax
movl %eax, %esi
movl $0x4, %edx
callq 0xa7d0
addq $0x30, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)