// File: /workspace/github_c_makefile_star2_O0/Ihsoh[P]ilang/compiler/frontend/semantics.c
// Function: print_type_node
static void _print_type_node(ParserASTNode *node, FILE *file) {
	assert(node);
	assert(file);

	switch (node->type) {
		case FE_NODE_TYPE_CHAR: {
			assert(node->nchilds == 0);
			fputs("char", file);
			break;
		}
		case FE_NODE_TYPE_INT8: {
			assert(node->nchilds == 0);
			fputs("int8", file);
			break;
		}
		case FE_NODE_TYPE_UINT8: {
			assert(node->nchilds == 0);
			fputs("uint8", file);
			break;
		}
		case FE_NODE_TYPE_INT16: {
			assert(node->nchilds == 0);
			fputs("int16", file);
			break;
		}
		case FE_NODE_TYPE_UINT16: {
			assert(node->nchilds == 0);
			fputs("uint16", file);
			break;
		}
		case FE_NODE_TYPE_INT32: {
			assert(node->nchilds == 0);
			fputs("int32", file);
			break;
		}
		case FE_NODE_TYPE_UINT32: {
			assert(node->nchilds == 0);
			fputs("uint32", file);
			break;
		}
		case FE_NODE_TYPE_INT64: {
			assert(node->nchilds == 0);
			fputs("int64", file);
			break;
		}
		case FE_NODE_TYPE_UINT64: {
			assert(node->nchilds == 0);
			fputs("uint64", file);
			break;
		}
		case FE_NODE_TYPE_FLOAT: {
			assert(node->nchilds == 0);
			fputs("float", file);
			break;
		}
		case FE_NODE_TYPE_DOUBLE: {
			assert(node->nchilds == 0);
			fputs("double", file);
			break;
		}
		case FE_NODE_TYPE_STRUCT: {
			assert(node->nchilds == 1);

			fputs("struct ", file);

			ParserASTNode *node_id = node->childs[0];
			assert(node_id->type == FE_NODE_IDENTIFIER);

			cmn_print_token(node_id->token, file);
			break;
		}
		case FE_NODE_TYPE_ARRAY: {
			assert(node->nchilds == 2);
			ParserASTNode *node_array_dims = node->childs[0];
			assert(node_array_dims->type == FE_NODE_TYPE_ARRAY_DIMS);
			ParserASTNode *node_t = node->childs[1];

			for (int i = 0; i < node_array_dims->nchilds; i++) {
				ParserASTNode *node_array_dim = node_array_dims->childs[i];
				assert(node_array_dim->type == FE_NODE_LITERAL_UINT);
				fputc('[', file);
				cmn_print_token(node_array_dim->token, file);
				fputc(']', file);
			}

			_print_type_node(node_t, file);

			break;
		}
		case FE_NODE_TYPE_FUNC: {
			assert(node->nchilds == 1 || node->nchilds == 2);
			ParserASTNode *node_params = NULL;
			ParserASTNode *node_t = NULL;

			node_params = node->childs[0];
			if (node->nchilds == 2) {
				node_t = node->childs[1];
			}

			_print_func_params(node_params, file);

			if (node_t != NULL) {
				fputc(':', file);
				_print_type_node(node_t, file);
			}
			break;
		}
		case FE_NODE_TYPE_POINTER: {
			assert(node->nchilds == 1);
			ParserASTNode *node_t = node->childs[0];

			fputc('*', file);

			_print_type_node(node_t, file);
			break;
		}
		case FE_NODE_TYPE_VOID: {
			assert(node->nchilds == 0);
			fputs("void", file);
			break;
		}
		default: {
			assert(0);
		}
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
cmpq $0x0, -0x8(%rbp)
je 0x5f8b9
jmp 0x5f8d8
leaq 0x16713(%rip), %rdi     # 0x75fd3
leaq 0x1e983(%rip), %rsi     # 0x7e24a
movl $0x1630, %edx           # imm = 0x1630
leaq 0x21c10(%rip), %rcx     # 0x814e3
callq 0x30a0
cmpq $0x0, -0x10(%rbp)
je 0x5f8e1
jmp 0x5f900
leaq 0x1217c(%rip), %rdi     # 0x71a64
leaq 0x1e95b(%rip), %rsi     # 0x7e24a
movl $0x1631, %edx           # imm = 0x1631
leaq 0x21be8(%rip), %rcx     # 0x814e3
callq 0x30a0
movq -0x8(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x54(%rbp)
subl $0x400, %eax            # imm = 0x400
je 0x5fa09
jmp 0x5f916
movl -0x54(%rbp), %eax
subl $0x401, %eax            # imm = 0x401
je 0x5fa49
jmp 0x5f926
movl -0x54(%rbp), %eax
subl $0x402, %eax            # imm = 0x402
je 0x5fac9
jmp 0x5f936
movl -0x54(%rbp), %eax
subl $0x403, %eax            # imm = 0x403
je 0x5fb49
jmp 0x5f946
movl -0x54(%rbp), %eax
subl $0x404, %eax            # imm = 0x404
je 0x5fbc9
jmp 0x5f956
movl -0x54(%rbp), %eax
subl $0x405, %eax            # imm = 0x405
je 0x5fa89
jmp 0x5f966
movl -0x54(%rbp), %eax
subl $0x406, %eax            # imm = 0x406
je 0x5fb09
jmp 0x5f976
movl -0x54(%rbp), %eax
subl $0x407, %eax            # imm = 0x407
je 0x5fb89
jmp 0x5f986
movl -0x54(%rbp), %eax
subl $0x408, %eax            # imm = 0x408
je 0x5fc09
jmp 0x5f996
movl -0x54(%rbp), %eax
subl $0x409, %eax            # imm = 0x409
je 0x5fc49
jmp 0x5f9a6
movl -0x54(%rbp), %eax
subl $0x40a, %eax            # imm = 0x40A
je 0x5fc89
jmp 0x5f9b6
movl -0x54(%rbp), %eax
subl $0x410, %eax            # imm = 0x410
je 0x5fcc9
jmp 0x5f9c6
movl -0x54(%rbp), %eax
subl $0x420, %eax            # imm = 0x420
je 0x5fd56
jmp 0x5f9d6
movl -0x54(%rbp), %eax
subl $0x430, %eax            # imm = 0x430
je 0x5fe6e
jmp 0x5f9e6
movl -0x54(%rbp), %eax
subl $0x440, %eax            # imm = 0x440
je 0x5ff10
jmp 0x5f9f6
movl -0x54(%rbp), %eax
subl $0x4ff, %eax            # imm = 0x4FF
je 0x5ff67
jmp 0x5ffa4
movq -0x8(%rbp), %rax
cmpl $0x0, 0x44(%rax)
jne 0x5fa15
jmp 0x5fa34
leaq 0x1ebe3(%rip), %rdi     # 0x7e5ff
leaq 0x1e827(%rip), %rsi     # 0x7e24a
movl $0x1635, %edx           # imm = 0x1635
leaq 0x21ab4(%rip), %rcx     # 0x814e3
callq 0x30a0
movq -0x10(%rbp), %rsi
leaq 0x14cfe(%rip), %rdi     # 0x7473d
callq 0x30b0
jmp 0x5ffc3
movq -0x8(%rbp), %rax
cmpl $0x0, 0x44(%rax)
jne 0x5fa55
jmp 0x5fa74
leaq 0x1eba3(%rip), %rdi     # 0x7e5ff
leaq 0x1e7e7(%rip), %rsi     # 0x7e24a
movl $0x163a, %edx           # imm = 0x163A
leaq 0x21a74(%rip), %rcx     # 0x814e3
callq 0x30a0
movq -0x10(%rbp), %rsi
leaq 0x14cc4(%rip), %rdi     # 0x74743
callq 0x30b0
jmp 0x5ffc3
movq -0x8(%rbp), %rax
cmpl $0x0, 0x44(%rax)
jne 0x5fa95
jmp 0x5fab4
leaq 0x1eb63(%rip), %rdi     # 0x7e5ff
leaq 0x1e7a7(%rip), %rsi     # 0x7e24a
movl $0x163f, %edx           # imm = 0x163F
leaq 0x21a34(%rip), %rcx     # 0x814e3
callq 0x30a0
movq -0x10(%rbp), %rsi
leaq 0x14c83(%rip), %rdi     # 0x74742
callq 0x30b0
jmp 0x5ffc3
movq -0x8(%rbp), %rax
cmpl $0x0, 0x44(%rax)
jne 0x5fad5
jmp 0x5faf4
leaq 0x1eb23(%rip), %rdi     # 0x7e5ff
leaq 0x1e767(%rip), %rsi     # 0x7e24a
movl $0x1644, %edx           # imm = 0x1644
leaq 0x219f4(%rip), %rcx     # 0x814e3
callq 0x30a0
movq -0x10(%rbp), %rsi
leaq 0x14c4a(%rip), %rdi     # 0x74749
callq 0x30b0
jmp 0x5ffc3
movq -0x8(%rbp), %rax
cmpl $0x0, 0x44(%rax)
jne 0x5fb15
jmp 0x5fb34
leaq 0x1eae3(%rip), %rdi     # 0x7e5ff
leaq 0x1e727(%rip), %rsi     # 0x7e24a
movl $0x1649, %edx           # imm = 0x1649
leaq 0x219b4(%rip), %rcx     # 0x814e3
callq 0x30a0
movq -0x10(%rbp), %rsi
leaq 0x14c09(%rip), %rdi     # 0x74748
callq 0x30b0
jmp 0x5ffc3
movq -0x8(%rbp), %rax
cmpl $0x0, 0x44(%rax)
jne 0x5fb55
jmp 0x5fb74
leaq 0x1eaa3(%rip), %rdi     # 0x7e5ff
leaq 0x1e6e7(%rip), %rsi     # 0x7e24a
movl $0x164e, %edx           # imm = 0x164E
leaq 0x21974(%rip), %rcx     # 0x814e3
callq 0x30a0
movq -0x10(%rbp), %rsi
leaq 0x14bd1(%rip), %rdi     # 0x74750
callq 0x30b0
jmp 0x5ffc3
movq -0x8(%rbp), %rax
cmpl $0x0, 0x44(%rax)
jne 0x5fb95
jmp 0x5fbb4
leaq 0x1ea63(%rip), %rdi     # 0x7e5ff
leaq 0x1e6a7(%rip), %rsi     # 0x7e24a
movl $0x1653, %edx           # imm = 0x1653
leaq 0x21934(%rip), %rcx     # 0x814e3
callq 0x30a0
movq -0x10(%rbp), %rsi
leaq 0x14b90(%rip), %rdi     # 0x7474f
callq 0x30b0
jmp 0x5ffc3
movq -0x8(%rbp), %rax
cmpl $0x0, 0x44(%rax)
jne 0x5fbd5
jmp 0x5fbf4
leaq 0x1ea23(%rip), %rdi     # 0x7e5ff
leaq 0x1e667(%rip), %rsi     # 0x7e24a
movl $0x1658, %edx           # imm = 0x1658
leaq 0x218f4(%rip), %rcx     # 0x814e3
callq 0x30a0
movq -0x10(%rbp), %rsi
leaq 0x14b58(%rip), %rdi     # 0x74757
callq 0x30b0
jmp 0x5ffc3
movq -0x8(%rbp), %rax
cmpl $0x0, 0x44(%rax)
jne 0x5fc15
jmp 0x5fc34
leaq 0x1e9e3(%rip), %rdi     # 0x7e5ff
leaq 0x1e627(%rip), %rsi     # 0x7e24a
movl $0x165d, %edx           # imm = 0x165D
leaq 0x218b4(%rip), %rcx     # 0x814e3
callq 0x30a0
movq -0x10(%rbp), %rsi
leaq 0x14b17(%rip), %rdi     # 0x74756
callq 0x30b0
jmp 0x5ffc3
movq -0x8(%rbp), %rax
cmpl $0x0, 0x44(%rax)
jne 0x5fc55
jmp 0x5fc74
leaq 0x1e9a3(%rip), %rdi     # 0x7e5ff
leaq 0x1e5e7(%rip), %rsi     # 0x7e24a
movl $0x1662, %edx           # imm = 0x1662
leaq 0x21874(%rip), %rcx     # 0x814e3
callq 0x30a0
movq -0x10(%rbp), %rsi
leaq 0x14ade(%rip), %rdi     # 0x7475d
callq 0x30b0
jmp 0x5ffc3
movq -0x8(%rbp), %rax
cmpl $0x0, 0x44(%rax)
jne 0x5fc95
jmp 0x5fcb4
leaq 0x1e963(%rip), %rdi     # 0x7e5ff
leaq 0x1e5a7(%rip), %rsi     # 0x7e24a
movl $0x1667, %edx           # imm = 0x1667
leaq 0x21834(%rip), %rcx     # 0x814e3
callq 0x30a0
movq -0x10(%rbp), %rsi
leaq 0x14aa4(%rip), %rdi     # 0x74763
callq 0x30b0
jmp 0x5ffc3
movq -0x8(%rbp), %rax
cmpl $0x1, 0x44(%rax)
jne 0x5fcd5
jmp 0x5fcf4
leaq 0x1f414(%rip), %rdi     # 0x7f0f0
leaq 0x1e567(%rip), %rsi     # 0x7e24a
movl $0x166c, %edx           # imm = 0x166C
leaq 0x217f4(%rip), %rcx     # 0x814e3
callq 0x30a0
movq -0x10(%rbp), %rsi
leaq 0x163e8(%rip), %rdi     # 0x760e7
callq 0x30b0
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rax
cmpl $0x200, (%rax)          # imm = 0x200
jne 0x5fd21
jmp 0x5fd40
leaq 0x14a64(%rip), %rdi     # 0x7478c
leaq 0x1e51b(%rip), %rsi     # 0x7e24a
movl $0x1671, %edx           # imm = 0x1671
leaq 0x217a8(%rip), %rcx     # 0x814e3
callq 0x30a0
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x10(%rbp), %rsi
callq 0x3e80
jmp 0x5ffc3
movq -0x8(%rbp), %rax
cmpl $0x2, 0x44(%rax)
jne 0x5fd62
jmp 0x5fd81
leaq 0x1e90b(%rip), %rdi     # 0x7e674
leaq 0x1e4da(%rip), %rsi     # 0x7e24a
movl $0x1677, %edx           # imm = 0x1677
leaq 0x21767(%rip), %rcx     # 0x814e3
callq 0x30a0
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
cmpl $0x421, (%rax)          # imm = 0x421
jne 0x5fd9e
jmp 0x5fdbd
leaq 0x14a0b(%rip), %rdi     # 0x747b0
leaq 0x1e49e(%rip), %rsi     # 0x7e24a
movl $0x1679, %edx           # imm = 0x1679
leaq 0x2172b(%rip), %rcx     # 0x814e3
callq 0x30a0
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x28(%rbp)
movl $0x0, -0x2c(%rbp)
movl -0x2c(%rbp), %eax
movq -0x20(%rbp), %rcx
cmpl 0x44(%rcx), %eax
jge 0x5fe5c
movq -0x20(%rbp), %rax
movq 0x48(%rax), %rax
movslq -0x2c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
cmpl $0x300, (%rax)          # imm = 0x300
jne 0x5fe02
jmp 0x5fe21
leaq 0x149f5(%rip), %rdi     # 0x747fe
leaq 0x1e43a(%rip), %rsi     # 0x7e24a
movl $0x167e, %edx           # imm = 0x167E
leaq 0x216c7(%rip), %rcx     # 0x814e3
callq 0x30a0
movq -0x10(%rbp), %rsi
movl $0x5b, %edi
callq 0x30d0
movq -0x38(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x10(%rbp), %rsi
callq 0x3e80
movq -0x10(%rbp), %rsi
movl $0x5d, %edi
callq 0x30d0
movl -0x2c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2c(%rbp)
jmp 0x5fdd4
movq -0x28(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x5f8a0
jmp 0x5ffc3
movq -0x8(%rbp), %rax
cmpl $0x1, 0x44(%rax)
je 0x5fe82
movq -0x8(%rbp), %rax
cmpl $0x2, 0x44(%rax)
jne 0x5fe84
jmp 0x5fea3
leaq 0x1e7d3(%rip), %rdi     # 0x7e65e
leaq 0x1e3b8(%rip), %rsi     # 0x7e24a
movl $0x1689, %edx           # imm = 0x1689
leaq 0x21645(%rip), %rcx     # 0x814e3
callq 0x30a0
movq $0x0, -0x40(%rbp)
movq $0x0, -0x48(%rbp)
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq %rax, -0x40(%rbp)
movq -0x8(%rbp), %rax
cmpl $0x2, 0x44(%rax)
jne 0x5fedc
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x48(%rbp)
movq -0x40(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x5ffd0
cmpq $0x0, -0x48(%rbp)
je 0x5ff0b
movq -0x10(%rbp), %rsi
movl $0x3a, %edi
callq 0x30d0
movq -0x48(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x5f8a0
jmp 0x5ffc3
movq -0x8(%rbp), %rax
cmpl $0x1, 0x44(%rax)
jne 0x5ff1c
jmp 0x5ff3b
leaq 0x1f1cd(%rip), %rdi     # 0x7f0f0
leaq 0x1e320(%rip), %rsi     # 0x7e24a
movl $0x169b, %edx           # imm = 0x169B
leaq 0x215ad(%rip), %rcx     # 0x814e3
callq 0x30a0
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq %rax, -0x50(%rbp)
movq -0x10(%rbp), %rsi
movl $0x2a, %edi
callq 0x30d0
movq -0x50(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x5f8a0
jmp 0x5ffc3
movq -0x8(%rbp), %rax
cmpl $0x0, 0x44(%rax)
jne 0x5ff73
jmp 0x5ff92
leaq 0x1e685(%rip), %rdi     # 0x7e5ff
leaq 0x1e2c9(%rip), %rsi     # 0x7e24a
movl $0x16a4, %edx           # imm = 0x16A4
leaq 0x21556(%rip), %rcx     # 0x814e3
callq 0x30a0
movq -0x10(%rbp), %rsi
leaq 0x18464(%rip), %rdi     # 0x78401
callq 0x30b0
jmp 0x5ffc3
leaq 0x124b0(%rip), %rdi     # 0x7245b
leaq 0x1e298(%rip), %rsi     # 0x7e24a
movl $0x16a9, %edx           # imm = 0x16A9
leaq 0x21525(%rip), %rcx     # 0x814e3
callq 0x30a0
addq $0x60, %rsp
popq %rbp
retq
nopl (%rax)