// File: /workspace/github_c_makefile_star2_O0/markdryan[P]subtilis/common/type.c
// Function: prv_full_type_name
static void prv_full_type_name(const subtilis_type_t *typ,
			       subtilis_buffer_t *buf, subtilis_error_t *err)
{
	const char *vec_of = "vector of ";
	const char *array_of = "array of ";

	switch (typ->type) {
	case SUBTILIS_TYPE_FN:
		prv_fn_type_name(&typ->params.fn, buf, err);
		return;
	case SUBTILIS_TYPE_REC:
		prv_rec_type_name(&typ->params.rec, buf, err);
		return;
	case SUBTILIS_TYPE_ARRAY_FN:
		subtilis_buffer_append_string(buf, array_of, err);
		if (err->type != SUBTILIS_ERROR_OK)
			return;
		prv_fn_type_name(&typ->params.array.params.fn, buf, err);
		return;
	case SUBTILIS_TYPE_VECTOR_FN:
		subtilis_buffer_append_string(buf, vec_of, err);
		if (err->type != SUBTILIS_ERROR_OK)
			return;
		prv_fn_type_name(&typ->params.array.params.fn, buf, err);
		return;
	case SUBTILIS_TYPE_ARRAY_REC:
		subtilis_buffer_append_string(buf, array_of, err);
		if (err->type != SUBTILIS_ERROR_OK)
			return;
		prv_rec_type_name(&typ->params.array.params.rec, buf, err);
		return;
	case SUBTILIS_TYPE_VECTOR_REC:
		subtilis_buffer_append_string(buf, vec_of, err);
		if (err->type != SUBTILIS_ERROR_OK)
			return;
		prv_rec_type_name(&typ->params.array.params.rec, buf, err);
		return;
	default:
		break;
	}

	subtilis_buffer_append_string(buf, subtilis_type_name(typ), err);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
leaq 0x6df26(%rip), %rax     # 0xac181
movq %rax, -0x20(%rbp)
leaq 0x6df26(%rip), %rax     # 0xac18c
movq %rax, -0x28(%rbp)
movq -0x8(%rbp), %rax
movl (%rax), %eax
addl $-0x9, %eax
movl %eax, %ecx
movq %rcx, -0x30(%rbp)
subl $0xd, %eax
ja 0x3e3b2
movq -0x30(%rbp), %rax
leaq 0x6d0eb(%rip), %rcx     # 0xab378
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x8(%rbp), %rdi
addq $0x8, %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
callq 0x3f700
jmp 0x3e3d5
movq -0x8(%rbp), %rdi
addq $0x8, %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
callq 0x3f840
jmp 0x3e3d5
movq -0x10(%rbp), %rdi
movq -0x28(%rbp), %rsi
movq -0x18(%rbp), %rdx
callq 0x16310
movq -0x18(%rbp), %rax
cmpl $0x0, (%rax)
je 0x3e2e9
jmp 0x3e3d5
movq -0x8(%rbp), %rdi
addq $0x8, %rdi
addq $0x30, %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
callq 0x3f700
jmp 0x3e3d5
movq -0x10(%rbp), %rdi
movq -0x20(%rbp), %rsi
movq -0x18(%rbp), %rdx
callq 0x16310
movq -0x18(%rbp), %rax
cmpl $0x0, (%rax)
je 0x3e326
jmp 0x3e3d5
movq -0x8(%rbp), %rdi
addq $0x8, %rdi
addq $0x30, %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
callq 0x3f700
jmp 0x3e3d5
movq -0x10(%rbp), %rdi
movq -0x28(%rbp), %rsi
movq -0x18(%rbp), %rdx
callq 0x16310
movq -0x18(%rbp), %rax
cmpl $0x0, (%rax)
je 0x3e360
jmp 0x3e3d5
movq -0x8(%rbp), %rdi
addq $0x8, %rdi
addq $0x30, %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
callq 0x3f840
jmp 0x3e3d5
movq -0x10(%rbp), %rdi
movq -0x20(%rbp), %rsi
movq -0x18(%rbp), %rdx
callq 0x16310
movq -0x18(%rbp), %rax
cmpl $0x0, (%rax)
je 0x3e397
jmp 0x3e3d5
movq -0x8(%rbp), %rdi
addq $0x8, %rdi
addq $0x30, %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
callq 0x3f840
jmp 0x3e3d5
jmp 0x3e3b4
movq -0x10(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x8(%rbp), %rdi
callq 0x3e190
movq -0x38(%rbp), %rdi
movq %rax, %rsi
movq -0x18(%rbp), %rdx
callq 0x16310
addq $0x40, %rsp
popq %rbp
retq
nopl (%rax,%rax)