// File: /workspace/github_c_makefile_star2_O0/adamjedlicka[P]blu/src/vm/object.c
// Function: bluPrintObject
void bluPrintObject(bluValue value) {

	switch (OBJ_TYPE(value)) {

	case OBJ_ARRAY: {
		bluObjArray* array = AS_ARRAY(value);

		printf("[");
		for (int32_t i = 0; i < array->len; i++) {
			if (i > 0) {
				printf(", ");
			}

			bluPrintValue(array->data[i]);
		}
		printf("]");
		break;
	}

	case OBJ_BOUND_METHOD: {
		printf("<method %s>", AS_BOUND_METHOD(value)->closure->function->name->chars);
		break;
	}

	case OBJ_CLASS: {
		printf("<class %s>", AS_CLASS(value)->name->chars);
		break;
	}

	case OBJ_CLOSURE:
		if (AS_CLOSURE(value)->function->name == NULL) {
			printf("<anonymous fn>");
		} else {
			printf("<fn %s>", AS_CLOSURE(value)->function->name->chars);
		}
		break;

	case OBJ_FUNCTION: {
		if (AS_FUNCTION(value)->name == NULL) {
			printf("<anonymous fn>");
		} else {
			printf("<fn %s>", AS_FUNCTION(value)->name->chars);
		}
		break;
	}

	case OBJ_INSTANCE: {
		printf("<instance of %s>", AS_INSTANCE(value)->obj.class->name->chars);
		break;
	}

	case OBJ_NATIVE: {
		printf("<native fn>");
		break;
	}

	case OBJ_UPVALUE: {
		printf("upvalue");
		break;
	}

	case OBJ_STRING: {
		printf("%s", AS_CSTRING(value));
		break;
	}
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movl %edi, -0x10(%rbp)
movq %rsi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movl (%rax), %eax
movq %rax, -0x28(%rbp)
subq $0x8, %rax
ja 0x7e25
movq -0x28(%rbp), %rax
leaq 0x7b4e(%rip), %rcx      # 0xf7dc
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x8(%rbp), %rax
movq %rax, -0x18(%rbp)
leaq 0x7b5a(%rip), %rdi      # 0xf800
movb $0x0, %al
callq 0x10d0
movl $0x0, -0x1c(%rbp)
movl -0x1c(%rbp), %eax
movq -0x18(%rbp), %rcx
cmpl 0x20(%rcx), %eax
jge 0x7cfd
cmpl $0x0, -0x1c(%rbp)
jle 0x7cd4
leaq 0x7b35(%rip), %rdi      # 0xf802
movb $0x0, %al
callq 0x10d0
movq -0x18(%rbp), %rax
movq 0x28(%rax), %rax
movslq -0x1c(%rbp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movl (%rax), %edi
movq 0x8(%rax), %rsi
callq 0x94a0
movl -0x1c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1c(%rbp)
jmp 0x7cb4
leaq 0x7b01(%rip), %rdi      # 0xf805
movb $0x0, %al
callq 0x10d0
jmp 0x7e25
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rax
movq 0x20(%rax), %rax
movq 0x78(%rax), %rsi
addq $0x28, %rsi
leaq 0x7adc(%rip), %rdi      # 0xf807
movb $0x0, %al
callq 0x10d0
jmp 0x7e25
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rsi
addq $0x28, %rsi
leaq 0x7ac9(%rip), %rdi      # 0xf813
movb $0x0, %al
callq 0x10d0
jmp 0x7e25
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
cmpq $0x0, 0x78(%rax)
jne 0x7d75
leaq 0x7ab2(%rip), %rdi      # 0xf81e
movb $0x0, %al
callq 0x10d0
jmp 0x7d93
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x78(%rax), %rsi
addq $0x28, %rsi
leaq 0x7aa1(%rip), %rdi      # 0xf82d
movb $0x0, %al
callq 0x10d0
jmp 0x7e25
movq -0x8(%rbp), %rax
cmpq $0x0, 0x78(%rax)
jne 0x7db3
leaq 0x7a74(%rip), %rdi      # 0xf81e
movb $0x0, %al
callq 0x10d0
jmp 0x7dcd
movq -0x8(%rbp), %rax
movq 0x78(%rax), %rsi
addq $0x28, %rsi
leaq 0x7a67(%rip), %rdi      # 0xf82d
movb $0x0, %al
callq 0x10d0
jmp 0x7e25
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x20(%rax), %rsi
addq $0x28, %rsi
leaq 0x7a4f(%rip), %rdi      # 0xf835
movb $0x0, %al
callq 0x10d0
jmp 0x7e25
leaq 0x7a50(%rip), %rdi      # 0xf846
movb $0x0, %al
callq 0x10d0
jmp 0x7e25
leaq 0x6b90(%rip), %rdi      # 0xe996
movb $0x0, %al
callq 0x10d0
jmp 0x7e25
movq -0x8(%rbp), %rsi
addq $0x28, %rsi
leaq 0x7a34(%rip), %rdi      # 0xf852
movb $0x0, %al
callq 0x10d0
addq $0x30, %rsp
popq %rbp
retq
nopl (%rax,%rax)