// File: /workspace/github_c_makefile_star2_O2/mirth-lang[P]mirth/bin/mirth1.c
// Function: mirth_type_Type_free
void mirth_type_Type_free (VAL v) {
	struct mirth_type_Type self = V_mirth_type_Type(v);
	switch (self.tag) {
		case mirth_type_Type_Error: break;
		case mirth_type_Type_Ignore: break;
		case mirth_type_Type_Prim: {
			free(self.ptr.Prim);
		} break;
		case mirth_type_Type_Meta: {
			free(self.ptr.Meta);
		} break;
		case mirth_type_Type_Hole: {
			free(self.ptr.Hole);
		} break;
		case mirth_type_Type_Var: {
			free(self.ptr.Var);
		} break;
		case mirth_type_Type_Table: {
			free(self.ptr.Table);
		} break;
		case mirth_type_Type_Data: {
			free(self.ptr.Data);
		} break;
		case mirth_type_Type_DataPartial: {
			decref(MK_mirth_data_DataPartial(self.ptr.DataPartial->mDataPartial));
			free(self.ptr.DataPartial);
		} break;
		case mirth_type_Type_Stack: {
			decref(MK_mirth_type_StackType(self.ptr.Stack->mStackType));
			free(self.ptr.Stack);
		} break;
		case mirth_type_Type_Arrow: {
			decref(MK_mirth_type_ArrowType(self.ptr.Arrow->mArrowType));
			free(self.ptr.Arrow);
		} break;
		case mirth_type_Type_App: {
			decref(MK_mirth_type_Type(self.ptr.App->mType_1));
			decref(MK_mirth_type_Type(self.ptr.App->mType));
			free(self.ptr.App);
		} break;
		case mirth_type_Type_Mut: {
			decref(MK_mirth_type_Type(self.ptr.Mut->mType));
			free(self.ptr.Mut);
		} break;
		case mirth_type_Type_Value: {
			decref(MK_mirth_type_Value(self.ptr.Value->mValue));
			free(self.ptr.Value);
		} break;
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rax
shrq $0x30, %rax
addl $-0x2, %eax
cmpl $0xb, %eax
ja 0x1cb81
movq %rdi, %rbx
movabsq $0xfffffffffffc, %r15   # imm = 0xFFFFFFFFFFFC
andq %r15, %rbx
leaq 0xb5a81(%rip), %rcx     # 0xd24a4
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x5030
movq 0x10(%rbx), %rax
andq %rax, %r15
sete %cl
testb $0x3, %al
setne %al
orb %cl, %al
jne 0x1ca2c
decl (%r15)
jne 0x1ca2c
leaq 0xec1ac(%rip), %rsi     # 0x108c09
jmp 0x1cb41
movq 0x10(%rbx), %rcx
leaq 0xec07c(%rip), %r14     # 0x108ae9
movq %rcx, %rax
andq %r15, %rax
sete %dl
testb $0x3, %cl
setne %cl
orb %dl, %cl
jne 0x1ca97
decl (%rax)
jne 0x1ca97
movl 0x8(%rbx), %edi
shlq $0x30, %rdi
orq 0x10(%rbx), %rdi
movq %r14, %rsi
callq 0xce94
movq 0x20(%rbx), %rax
andq %rax, %r15
sete %cl
testb $0x3, %al
setne %al
orb %cl, %al
jne 0x1ca2c
decl (%r15)
jne 0x1ca2c
movl 0x18(%rbx), %edi
shlq $0x30, %rdi
orq 0x20(%rbx), %rdi
movq %r14, %rsi
jmp 0x1cb77
movq 0x10(%rbx), %rax
andq %rax, %r15
sete %cl
testb $0x3, %al
setne %al
orb %cl, %al
jne 0x1ca2c
decl (%r15)
jne 0x1ca2c
leaq 0xec0d4(%rip), %rsi     # 0x108bc1
jmp 0x1cb41
movq 0x8(%rbx), %rdi
andq %rdi, %r15
sete %al
testb $0x3, %dil
setne %cl
orb %al, %cl
jne 0x1ca2c
decl (%r15)
jne 0x1ca2c
leaq 0xec019(%rip), %rsi     # 0x108b31
jmp 0x1cb77
movq 0x10(%rbx), %rax
andq %rax, %r15
sete %cl
testb $0x3, %al
setne %al
orb %cl, %al
jne 0x1ca2c
decl (%r15)
jne 0x1ca2c
leaq 0xebfa8(%rip), %rsi     # 0x108ae9
movl 0x8(%rbx), %edi
shlq $0x30, %rdi
orq 0x10(%rbx), %rdi
jmp 0x1cb77
movq 0x8(%rbx), %rdi
andq %rdi, %r15
sete %al
testb $0x3, %dil
setne %cl
orb %al, %cl
jne 0x1ca2c
decl (%r15)
jne 0x1ca2c
leaq 0xec002(%rip), %rsi     # 0x108b79
callq 0xce94
jmp 0x1ca2c
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq