// File: /workspace/github_c_makefile_star2_O1/mattn[P]orelang/ore.c
// Function: ore_value_real_free
static void
ore_value_real_free(ore_value v) {
  switch (v.t) {
    case ORE_TYPE_STRING:
      if (verbose)
        printf("free str %s\n", v.v.s->p);
      free(v.v.s->p);
      free(v.v.s);
      v.v.s = NULL;
      break;
    case ORE_TYPE_ARRAY:
      if (verbose)
        printf("free array %p\n", v.v.a->p);
      kl_destroy(value, v.v.a->p);
      free(v.v.a);
      v.v.a = NULL;
      break;
    case ORE_TYPE_HASH:
      if (verbose)
        printf("free hash %p\n", v.v.h->p);
      kh_destroy(value, v.v.h->p);
      free(v.v.h);
      v.v.h = NULL;
      break;
    case ORE_TYPE_REGEXP:
      if (verbose)
        printf("free regexp %s\n", v.v.r->p);
      free(v.v.r->p);
      free(v.v.r);
      v.v.r = NULL;
      break;
    case ORE_TYPE_ENV:
      if (verbose)
        printf("free env %p\n", v.v.e->p);
      ore_destroy((ore_context*) v.v.e->p);
      v.v.e = NULL;
      break;
    case ORE_TYPE_OBJECT:
      if (verbose)
        printf("free object %p\n", v.v.o);
      ore_value terminate = ore_prop(v.v.o->e, "__terminate__");
      if (terminate.t == ORE_TYPE_FUNC)
        ore_func_call(v.v.o->e, terminate, 0, NULL);
      free(v.v.o);
      v.v.o = NULL;
      break;
    default:
      break;
  }
  v.t = ORE_TYPE_NIL;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x78, %rsp
leaq 0xb0(%rsp), %r12
movl (%r12), %eax
addl $-0x4, %eax
cmpl $0x9, %eax
ja 0xcd76
leaq 0x7d48(%rip), %rcx      # 0x14850
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
cmpl $0x0, 0xf6f0(%rip)      # 0x1c208
je 0xcd54
movq 0x8(%r12), %rax
movq (%rax), %rsi
leaq 0x9438(%rip), %rdi      # 0x15f65
jmp 0xcd4d
cmpl $0x0, 0xf6cf(%rip)      # 0x1c208
je 0xcb51
movq 0x8(%r12), %rax
movq (%rax), %rsi
leaq 0x9437(%rip), %rdi      # 0x15f81
xorl %eax, %eax
callq 0x20e0
movq 0x8(%r12), %rbx
movq (%rbx), %r14
testq %r14, %r14
je 0xcbf5
movq 0x18(%r14), %rdi
callq 0x22c0
movq 0x10(%r14), %rdi
callq 0x22c0
movq 0x20(%r14), %rdi
callq 0x22c0
movq %r14, %rdi
callq 0x22c0
jmp 0xcbf5
cmpl $0x0, 0xf67a(%rip)      # 0x1c208
je 0xcba3
movq 0x8(%r12), %rsi
leaq 0x9410(%rip), %rdi      # 0x15fac
xorl %eax, %eax
callq 0x20e0
movq 0x8(%r12), %rbx
movq 0x10(%rbx), %rsi
leaq 0x9409(%rip), %rdx      # 0x15fbc
leaq 0x28(%rsp), %r14
movq %r14, %rdi
callq 0xcec9
cmpl $0x8, (%r14)
jne 0xcbf5
movq 0x10(%rbx), %rsi
movq 0x48(%rsp), %rax
movq %rax, 0x20(%rsp)
movups 0x28(%rsp), %xmm0
movups 0x38(%rsp), %xmm1
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
leaq 0x50(%rsp), %rdi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0xd989
leaq 0x8(%r12), %r13
jmp 0xcd66
cmpl $0x0, 0xf602(%rip)      # 0x1c208
je 0xcc1e
movq 0x8(%r12), %rax
movq (%rax), %rsi
leaq 0x935b(%rip), %rdi      # 0x15f72
xorl %eax, %eax
callq 0x20e0
movq 0x8(%r12), %rbx
movq (%rbx), %r14
movq (%r14), %r15
cmpq 0x8(%r14), %r15
je 0xcc85
movl $0x10, %r13d
movq 0x10(%r14), %rbp
decq (%rbp)
movq 0x10(%rbp), %rax
cmpq %rax, 0x8(%rbp)
jne 0xcc67
leaq (%rax,%rax), %rsi
testq %rax, %rax
cmoveq %r13, %rsi
movq %rsi, 0x10(%rbp)
movq 0x18(%rbp), %rdi
shlq $0x3, %rsi
callq 0x21e0
movq %rax, 0x18(%rbp)
movq 0x8(%rbp), %rax
movq 0x18(%rbp), %rcx
leaq 0x1(%rax), %rdx
movq %rdx, 0x8(%rbp)
movq %r15, (%rcx,%rax,8)
movq 0x28(%r15), %r15
cmpq 0x8(%r14), %r15
jne 0xcc35
movq 0x10(%r14), %r13
decq (%r13)
movq 0x10(%r13), %rax
cmpq %rax, 0x8(%r13)
jne 0xccbc
leaq (%rax,%rax), %rcx
testq %rax, %rax
movl $0x10, %esi
cmovneq %rcx, %rsi
movq %rsi, 0x10(%r13)
movq 0x18(%r13), %rdi
shlq $0x3, %rsi
callq 0x21e0
movq %rax, 0x18(%r13)
movq 0x8(%r13), %rax
movq 0x18(%r13), %rcx
leaq 0x1(%rax), %rdx
movq %rdx, 0x8(%r13)
movq %r15, (%rcx,%rax,8)
movq 0x10(%r14), %r15
cmpq $0x0, 0x8(%r15)
je 0xcd1a
xorl %r13d, %r13d
movq 0x18(%r15), %rax
movq (%rax,%r13,8), %rax
movq 0x20(%rax), %rcx
movq %rcx, 0x20(%rsp)
movups (%rax), %xmm0
movups 0x10(%rax), %xmm1
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
callq 0xc8b7
movq 0x18(%r15), %rax
movq (%rax,%r13,8), %rdi
callq 0x22c0
incq %r13
cmpq 0x8(%r15), %r13
jb 0xccde
leaq 0x8(%r12), %r13
movq 0x18(%r15), %rdi
callq 0x22c0
movq %r15, %rdi
callq 0x22c0
movq %r14, %rdi
jmp 0xcd61
cmpl $0x0, 0xf4cc(%rip)      # 0x1c208
je 0xcd54
movq 0x8(%r12), %rax
movq (%rax), %rsi
leaq 0x9242(%rip), %rdi      # 0x15f8f
xorl %eax, %eax
callq 0x20e0
leaq 0x8(%r12), %r13
movq 0x8(%r12), %rbx
movq (%rbx), %rdi
callq 0x22c0
movq %rbx, %rdi
callq 0x22c0
movq $0x0, (%r13)
movl $0x0, (%r12)
addq $0x78, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
cmpl $0x0, 0xf474(%rip)      # 0x1c208
je 0xcdac
movq 0x8(%r12), %rax
movq (%rax), %rsi
leaq 0x91fa(%rip), %rdi      # 0x15f9f
xorl %eax, %eax
callq 0x20e0
leaq 0x8(%r12), %r13
movq 0x8(%r12), %rax
movq (%rax), %rdi
callq 0xef79
jmp 0xcd6e