// File: /workspace/github_c_makefile_star2_O0/goodpaul6[P]generic/script.c
// Function: write_value
static void write_value(script_value_t* val, char quote)
{
	if(!val)
	{
		printf("null");
		return;
	}
	
	switch(val->type)
	{
		case VAL_NULL: printf("null"); break;
		case VAL_BOOL: printf("%s", val->boolean ? "true" : "false"); break;
		case VAL_CHAR: printf("%c", val->code); break;
		case VAL_NUMBER: printf("%g", val->number); break;
		case VAL_STRING: quote ? printf("\"%s\"", val->string.data) : printf("%s", val->string.data); break;
		case VAL_FUNC: printf("func (extern: %s, index: %d)", val->function.is_extern ? "true" : "false", val->function.index); break;
		case VAL_ARRAY:
		{
			printf("[");
			for(int i = 0; i < val->array.length; ++i)
			{
				script_value_t* mem = vec_get_value(&val->array, i, script_value_t*);
				if (val == mem)
					printf("__self__");
				else
					write_value(mem, quote);
				if(i + 1 < val->array.length) printf(", ");
			}
			printf("]");
		} break;
		case VAL_STRUCT_INSTANCE:
		{
			printf("{ ");
			for(int i = 0; i < val->ds.members.length; ++i)
			{
				script_value_t* mem = vec_get_value(&val->ds.members, i, script_value_t*);
				if (val == mem)
					printf("__self__");
				else
					write_value(mem, quote);
				if(i + 1 < val->ds.members.length) printf(", ");
			}
			printf(" }");
		} break;
		case VAL_NATIVE:
		{
			printf("native 0x%lX", (unsigned long)val->nat.value);
		} break;
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movb %sil, %al
movq %rdi, -0x8(%rbp)
movb %al, -0x9(%rbp)
cmpq $0x0, -0x8(%rbp)
jne 0xc40c
leaq 0x88e7(%rip), %rdi      # 0x14ce7
movb $0x0, %al
callq 0x20c0
jmp 0xc679
movq -0x8(%rbp), %rax
movl 0xc(%rax), %eax
movq %rax, -0x30(%rbp)
subq $0x8, %rax
ja 0xc679
movq -0x30(%rbp), %rax
leaq 0x7094(%rip), %rcx      # 0x134c0
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq 0x88ab(%rip), %rdi      # 0x14ce7
movb $0x0, %al
callq 0x20c0
jmp 0xc679
movq -0x8(%rbp), %rax
movsbl 0x20(%rax), %ecx
leaq 0x88bc(%rip), %rsi      # 0x14d13
leaq 0x88b0(%rip), %rax      # 0x14d0e
cmpl $0x0, %ecx
cmovneq %rax, %rsi
leaq 0x90da(%rip), %rdi      # 0x15546
movb $0x0, %al
callq 0x20c0
jmp 0xc679
movq -0x8(%rbp), %rax
movsbl 0x20(%rax), %esi
leaq 0x89d8(%rip), %rdi      # 0x14e5f
movb $0x0, %al
callq 0x20c0
jmp 0xc679
movq -0x8(%rbp), %rax
movsd 0x20(%rax), %xmm0
leaq 0x8976(%rip), %rdi      # 0x14e19
movb $0x1, %al
callq 0x20c0
jmp 0xc679
movsbl -0x9(%rbp), %eax
cmpl $0x0, %eax
je 0xc4d0
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rsi
leaq 0x899b(%rip), %rdi      # 0x14e62
movb $0x0, %al
callq 0x20c0
jmp 0xc4e6
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rsi
leaq 0x9067(%rip), %rdi      # 0x15546
movb $0x0, %al
callq 0x20c0
jmp 0xc679
movq -0x8(%rbp), %rax
movsbl 0x20(%rax), %ecx
leaq 0x8819(%rip), %rsi      # 0x14d13
leaq 0x880d(%rip), %rax      # 0x14d0e
cmpl $0x0, %ecx
cmovneq %rax, %rsi
movq -0x8(%rbp), %rax
movl 0x24(%rax), %edx
leaq 0x8951(%rip), %rdi      # 0x14e67
movb $0x0, %al
callq 0x20c0
jmp 0xc679
leaq 0x8827(%rip), %rdi      # 0x14d50
movb $0x0, %al
callq 0x20c0
movl $0x0, -0x10(%rbp)
movslq -0x10(%rbp), %rax
movq -0x8(%rbp), %rcx
cmpq 0x30(%rcx), %rax
jae 0xc5b1
movq -0x8(%rbp), %rdi
addq $0x20, %rdi
movslq -0x10(%rbp), %rsi
callq 0x11890
movq (%rax), %rax
movq %rax, -0x18(%rbp)
movq -0x8(%rbp), %rax
cmpq -0x18(%rbp), %rax
jne 0xc577
leaq 0x8916(%rip), %rdi      # 0x14e84
movb $0x0, %al
callq 0x20c0
jmp 0xc584
movq -0x18(%rbp), %rdi
movsbl -0x9(%rbp), %esi
callq 0xc3e0
movl -0x10(%rbp), %eax
addl $0x1, %eax
cltq
movq -0x8(%rbp), %rcx
cmpq 0x30(%rcx), %rax
jae 0xc5a4
leaq 0x88bf(%rip), %rdi      # 0x14e5c
movb $0x0, %al
callq 0x20c0
jmp 0xc5a6
movl -0x10(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x10(%rbp)
jmp 0xc537
leaq 0x879a(%rip), %rdi      # 0x14d52
movb $0x0, %al
callq 0x20c0
jmp 0xc679
leaq 0x88c2(%rip), %rdi      # 0x14e8d
movb $0x0, %al
callq 0x20c0
movl $0x0, -0x1c(%rbp)
movslq -0x1c(%rbp), %rax
movq -0x8(%rbp), %rcx
cmpq 0x30(%rcx), %rax
jae 0xc653
movq -0x8(%rbp), %rdi
addq $0x20, %rdi
movslq -0x1c(%rbp), %rsi
callq 0x11890
movq (%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x8(%rbp), %rax
cmpq -0x28(%rbp), %rax
jne 0xc619
leaq 0x8874(%rip), %rdi      # 0x14e84
movb $0x0, %al
callq 0x20c0
jmp 0xc626
movq -0x28(%rbp), %rdi
movsbl -0x9(%rbp), %esi
callq 0xc3e0
movl -0x1c(%rbp), %eax
addl $0x1, %eax
cltq
movq -0x8(%rbp), %rcx
cmpq 0x30(%rcx), %rax
jae 0xc646
leaq 0x881d(%rip), %rdi      # 0x14e5c
movb $0x0, %al
callq 0x20c0
jmp 0xc648
movl -0x1c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1c(%rbp)
jmp 0xc5d9
leaq 0x8836(%rip), %rdi      # 0x14e90
movb $0x0, %al
callq 0x20c0
jmp 0xc679
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rsi
leaq 0x8821(%rip), %rdi      # 0x14e93
movb $0x0, %al
callq 0x20c0
addq $0x30, %rsp
popq %rbp
retq
nop