// File: /workspace/github_c_makefile_star2_O0/sisshiki1969[P]monocc/src/debug.c
// Function: print_type
void print_type(FILE *stream, Type *type) {
  MemberInfo *param;
  bool first;
  switch (type->ty) {
    case CHAR:
      fprintf(stream, "char ");
      break;
    case SHORT:
      fprintf(stream, "short ");
      break;
    case USHORT:
      fprintf(stream, "unsigned short ");
      break;
    case INT:
      fprintf(stream, "int ");
      break;
    case UINT:
      fprintf(stream, "unsigned int ");
      break;
    case LONG:
      fprintf(stream, "long ");
      break;
    case ULONG:
      fprintf(stream, "unsigned long ");
      break;
    case BOOL:
      fprintf(stream, "bool ");
      break;
    case VOID:
      fprintf(stream, "void ");
      break;
    case PTR:
      fprintf(stream, "* ");
      print_type(stream, type->ptr_to);
      break;
    case ARRAY:
      fprintf(stream, "[%d] ", type->array_size);
      print_type(stream, type->ptr_to);
      break;
    case FUNC:
      fprintf(stream, "func ");
      if (type->variadic) fprintf(stream, "VARIADIC ");
      param = type->params;
      fprintf(stream, "( ");
      first = true;
      while (param) {
        if (!first) fprintf(stream, ", ");
        first = false;
        if (param->type)
          print_type(stream, param->type);
        else
          fprintf(stream, "NULL_TYPE");
        if (param->ident)
          fprintf(stream, " %.*s ", param->ident->len, param->ident->str);
        else
          fprintf(stream, "- ");
        param = param->next;
      }
      fprintf(stream, ") ");
      print_type(stream, type->ptr_to);
      break;
    case STRUCT:
      fprintf(stream, "struct ");
      if (type->tag_name) {
        fprintf(stream, "<%.*s> ", type->tag_name->len, type->tag_name->str);
      } else {
        fprintf(stream, "<> { ");
        print_struct_member(stream, type->member);
        fprintf(stream, "}");
      }
      break;
      // Type *member = type->member;
    case ENUM:
      fprintf(stream, "enum ");
      if (type->tag_name) {
        fprintf(stream, "<%.*s> ", type->tag_name->len, type->tag_name->str);
      }
      break;
    case ENUM_EL:
      fprintf(stream, "enum_el ");
      if (type->tag_name) {
        fprintf(stream, "<%.*s:%d> ", type->tag_name->len, type->tag_name->str,
                type->offset);
      }
      break;
    default:
      error("print_type(): Unknown Type.");
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movl (%rax), %eax
movq %rax, -0x28(%rbp)
subq $0xe, %rax
ja 0x51af
movq -0x28(%rbp), %rax
leaq 0xaded(%rip), %rcx      # 0xfc2c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x8(%rbp), %rdi
leaq 0xafad(%rip), %rsi      # 0xfe00
movb $0x0, %al
callq 0x10f0
jmp 0x51bd
movq -0x8(%rbp), %rdi
leaq 0xafa5(%rip), %rsi      # 0xfe0f
movb $0x0, %al
callq 0x10f0
jmp 0x51bd
movq -0x8(%rbp), %rdi
leaq 0xaf85(%rip), %rsi      # 0xfe06
movb $0x0, %al
callq 0x10f0
jmp 0x51bd
movq -0x8(%rbp), %rdi
leaq 0xaf87(%rip), %rsi      # 0xfe1f
movb $0x0, %al
callq 0x10f0
jmp 0x51bd
movq -0x8(%rbp), %rdi
leaq 0xaf67(%rip), %rsi      # 0xfe16
movb $0x0, %al
callq 0x10f0
jmp 0x51bd
movq -0x8(%rbp), %rdi
leaq 0xaf67(%rip), %rsi      # 0xfe2d
movb $0x0, %al
callq 0x10f0
jmp 0x51bd
movq -0x8(%rbp), %rdi
leaq 0xaf47(%rip), %rsi      # 0xfe24
movb $0x0, %al
callq 0x10f0
jmp 0x51bd
movq -0x8(%rbp), %rdi
leaq 0xaf3f(%rip), %rsi      # 0xfe33
movb $0x0, %al
callq 0x10f0
jmp 0x51bd
movq -0x8(%rbp), %rdi
leaq 0xaf2e(%rip), %rsi      # 0xfe39
movb $0x0, %al
callq 0x10f0
jmp 0x51bd
movq -0x8(%rbp), %rdi
leaq 0xaf1d(%rip), %rsi      # 0xfe3f
movb $0x0, %al
callq 0x10f0
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0x4e10
jmp 0x51bd
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movl 0x10(%rax), %edx
leaq 0xaef1(%rip), %rsi      # 0xfe42
movb $0x0, %al
callq 0x10f0
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0x4e10
jmp 0x51bd
movq -0x8(%rbp), %rdi
leaq 0xaecf(%rip), %rsi      # 0xfe48
movb $0x0, %al
callq 0x10f0
movq -0x10(%rbp), %rax
testb $0x1, 0x38(%rax)
je 0x4f9c
movq -0x8(%rbp), %rdi
leaq 0xaeb9(%rip), %rsi      # 0xfe4e
movb $0x0, %al
callq 0x10f0
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x18(%rbp)
movq -0x8(%rbp), %rdi
leaq 0xaea5(%rip), %rsi      # 0xfe58
movb $0x0, %al
callq 0x10f0
movb $0x1, -0x19(%rbp)
cmpq $0x0, -0x18(%rbp)
je 0x506d
testb $0x1, -0x19(%rbp)
jne 0x4fe1
movq -0x8(%rbp), %rdi
leaq 0xae81(%rip), %rsi      # 0xfe5b
movb $0x0, %al
callq 0x10f0
movb $0x0, -0x19(%rbp)
movq -0x18(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0x5003
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rsi
callq 0x4e10
jmp 0x5015
movq -0x8(%rbp), %rdi
leaq 0xae50(%rip), %rsi      # 0xfe5e
movb $0x0, %al
callq 0x10f0
movq -0x18(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0x504b
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movl 0x28(%rax), %edx
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x20(%rax), %rcx
leaq 0xaeab(%rip), %rsi      # 0xfeed
movb $0x0, %al
callq 0x10f0
jmp 0x505d
movq -0x8(%rbp), %rdi
leaq 0xae12(%rip), %rsi      # 0xfe68
movb $0x0, %al
callq 0x10f0
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x18(%rbp)
jmp 0x4fbe
movq -0x8(%rbp), %rdi
leaq 0xadf3(%rip), %rsi      # 0xfe6b
movb $0x0, %al
callq 0x10f0
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0x4e10
jmp 0x51bd
movq -0x8(%rbp), %rdi
leaq 0xadce(%rip), %rsi      # 0xfe6e
movb $0x0, %al
callq 0x10f0
movq -0x10(%rbp), %rax
cmpq $0x0, 0x30(%rax)
je 0x50dd
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rax
movl 0x28(%rax), %edx
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rax
movq 0x20(%rax), %rcx
leaq 0xada2(%rip), %rsi      # 0xfe76
movb $0x0, %al
callq 0x10f0
jmp 0x5112
movq -0x8(%rbp), %rdi
leaq 0xad96(%rip), %rsi      # 0xfe7e
movb $0x0, %al
callq 0x10f0
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rsi
callq 0x5260
movq -0x8(%rbp), %rdi
leaq 0xac2c(%rip), %rsi      # 0xfd37
movb $0x0, %al
callq 0x10f0
jmp 0x51bd
movq -0x8(%rbp), %rdi
leaq 0xad62(%rip), %rsi      # 0xfe84
movb $0x0, %al
callq 0x10f0
movq -0x10(%rbp), %rax
cmpq $0x0, 0x30(%rax)
je 0x515d
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rax
movl 0x28(%rax), %edx
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rax
movq 0x20(%rax), %rcx
leaq 0xad20(%rip), %rsi      # 0xfe76
movb $0x0, %al
callq 0x10f0
jmp 0x51bd
movq -0x8(%rbp), %rdi
leaq 0xad20(%rip), %rsi      # 0xfe8a
movb $0x0, %al
callq 0x10f0
movq -0x10(%rbp), %rax
cmpq $0x0, 0x30(%rax)
je 0x51ad
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rax
movl 0x28(%rax), %edx
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rax
movq 0x20(%rax), %rcx
movq -0x10(%rbp), %rax
movl 0x28(%rax), %r8d
leaq 0xaced(%rip), %rsi      # 0xfe93
movb $0x0, %al
callq 0x10f0
jmp 0x51bd
leaq 0xace8(%rip), %rdi      # 0xfe9e
movb $0x0, %al
callq 0x5970
addq $0x30, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)