// File: /workspace/github_c_makefile_star2_O0/mattn[P]orelang/ore.c
// Function: ore_object_new
static ore_value
ore_object_new(ore_context* ore, mpc_ast_t* t) {
  ore_value clazz = ore_find_global(ore, t->children[1]->contents);
  ore_value v = { ORE_TYPE_OBJECT };
  switch (clazz.t) {
    case ORE_TYPE_CLASS:
      v = ore_class_new(ore, clazz);
      ore_value initialize = ore_prop(v.v.o->e, "__initialize__");
      if (initialize.t == ORE_TYPE_FUNC) {
        ore_value* args = ore_bind_args(ore, initialize.v.f.x.o, v.v.o->e, t);
        ore_func_call(v.v.o->e, initialize, t->children_num / 2 - 1, args);
      }
      break;
    case ORE_TYPE_CCLASS:
      {
        v.v.o = (ore_object*) malloc(sizeof(ore_object));
        if (!v.v.o) {
          fprintf(stderr, "failed to allocate memory\n");
          ore->err = ORE_ERROR_EXCEPTION;
          return ore_value_nil();
        }
        v.v.o->t = clazz.t;
        v.v.o->c = clazz.v.x;
        v.v.o->e = clazz.v.x->e;
        v.v.o->ref = -1;
        /*
        ore_value initialize = ore_prop(this, "__initialize__");
        if (initialize.t == ORE_TYPE_FUNC) {
          ore_value* args = ore_bind_args(ore, initialize.v.f.x.o, this, t);
          ore_func_call(this, initialize, 0, NULL);
        }
        */
      }
      break;
    default:
      fprintf(stderr, "unknown class '%s'\n", t->children[1]->contents);
      ore->err = ORE_ERROR_EXCEPTION;
      return ore_value_nil();
  }
  return v;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x120, %rsp            # imm = 0x120
movq %rdi, -0xf8(%rbp)
movq %rdi, -0xf0(%rbp)
movq %rsi, -0x8(%rbp)
movq %rdx, -0x10(%rbp)
movq -0x8(%rbp), %rsi
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rdx
leaq -0x38(%rbp), %rdi
callq 0x186a0
xorps %xmm0, %xmm0
movaps %xmm0, -0x50(%rbp)
movaps %xmm0, -0x60(%rbp)
movq $0x0, -0x40(%rbp)
movl $0xd, -0x60(%rbp)
movl -0x38(%rbp), %eax
movl %eax, -0xe4(%rbp)
subl $0xb, %eax
je 0x1716c
jmp 0x17158
movl -0xe4(%rbp), %eax
subl $0xc, %eax
je 0x17249
jmp 0x172c4
movq -0x8(%rbp), %rsi
movq -0x18(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x20(%rax)
movups -0x38(%rbp), %xmm0
movups -0x28(%rbp), %xmm1
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
leaq -0x88(%rbp), %rdi
callq 0x18700
leaq -0x60(%rbp), %rdi
leaq -0x88(%rbp), %rsi
movl $0x28, %edx
callq 0x2170
movq -0x58(%rbp), %rax
movq 0x10(%rax), %rsi
leaq -0xb0(%rbp), %rdi
leaq 0x5029(%rip), %rdx      # 0x1c1ea
callq 0x10850
cmpl $0x8, -0xb0(%rbp)
jne 0x17244
movq -0x8(%rbp), %rdi
movq -0x98(%rbp), %rsi
movq -0x58(%rbp), %rax
movq 0x10(%rax), %rdx
movq -0x10(%rbp), %rcx
callq 0x188f0
movq %rax, -0xb8(%rbp)
movq -0x58(%rbp), %rax
movq 0x10(%rax), %rsi
movq -0x10(%rbp), %rax
movl 0x28(%rax), %eax
movl $0x2, %ecx
cltd
idivl %ecx
movl %eax, %edx
subl $0x1, %edx
movq -0xb8(%rbp), %rcx
movq -0x90(%rbp), %rdi
movq %rsp, %rax
movq %rdi, 0x20(%rax)
movups -0xb0(%rbp), %xmm0
movups -0xa0(%rbp), %xmm1
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
leaq -0xe0(%rbp), %rdi
callq 0x11400
jmp 0x17305
movl $0x20, %edi
callq 0x2190
movq %rax, -0x58(%rbp)
cmpq $0x0, -0x58(%rbp)
jne 0x17292
movq 0x9d93(%rip), %rax      # 0x20ff8
movq (%rax), %rdi
leaq 0x394f(%rip), %rsi      # 0x1abbe
movb $0x0, %al
callq 0x2140
movq -0xf8(%rbp), %rdi
movq -0x8(%rbp), %rax
movl $0x1, 0x20(%rax)
callq 0x10670
jmp 0x1731a
movl -0x38(%rbp), %ecx
movq -0x58(%rbp), %rax
movl %ecx, (%rax)
movq -0x30(%rbp), %rcx
movq -0x58(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rcx
movq -0x58(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x58(%rbp), %rax
movl $0xffffffff, 0x18(%rax) # imm = 0xFFFFFFFF
jmp 0x17305
movq 0x9d2d(%rip), %rax      # 0x20ff8
movq (%rax), %rdi
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rdx
leaq 0x4f14(%rip), %rsi      # 0x1c1f9
movb $0x0, %al
callq 0x2140
movq -0xf8(%rbp), %rdi
movq -0x8(%rbp), %rax
movl $0x1, 0x20(%rax)
callq 0x10670
jmp 0x1731a
movq -0xf8(%rbp), %rdi
leaq -0x60(%rbp), %rsi
movl $0x28, %edx
callq 0x2170
movq -0xf0(%rbp), %rax
addq $0x120, %rsp            # imm = 0x120
popq %rbp
retq
nopw (%rax,%rax)