// File: /workspace/github_c_makefile_star2_O3/Ihsoh[P]ilang/compiler/frontend/semantics.c
// Function: process_struct_member
static void _process_struct_member(
	ParserContext *ctx,
	ParserASTNode *node,
	ParserASTNode *node_struct_body,
	ParserSymbol *symbol_struct
) {
	assert(ctx);
	assert(node);
	assert(node->type == FE_NODE_STRUCT);
	assert(node->nchilds == 2);
	assert(node_struct_body);
	assert(node_struct_body->type == FE_NODE_STRUCT_BODY);
	assert(symbol_struct);

	for (int i = 0; i < node_struct_body->nchilds; i++) {
		ParserASTNode *child = node_struct_body->childs[i];
		assert(child);
		if (child->type == FE_NODE_VAR) {
			FE_VAR_AST_NODE_SET_TYPE(child, FE_VAR_TYPE_STRUCT_MEMBER);
			for (int j = 0; j < child->nchilds; j++) {
				ParserASTNode *node_var_item = child->childs[j];
				assert(node_var_item->type == FE_NODE_VAR_ITEM);
				
				if (node_var_item->nchilds == 2) {
					ParserASTNode *node_var_id = node_var_item->childs[0];
					assert(node_var_id->type == FE_NODE_IDENTIFIER);

					ParserASTNode *node_var_type = node_var_item->childs[1];
					uint8_t var_type = 0;
					_type(ctx, node_var_type, &var_type);

					fe_parser_add_struct_member_var_symbol_to_symbol(
						ctx,
						symbol_struct,
						node_var_id->token,
						var_type,
						node_var_type
					);
				} else if (node_var_item->nchilds == 3) {
					_SYNERR_NODE(
						ctx,
						node,
						"struct variable cannot contain initial expression."
					);
				} else {
					assert(0);
				}
			}
		} else {
			assert(0);
		}
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x428, %rsp            # imm = 0x428
movq %rcx, -0x30(%rbp)
movq %rdi, -0x38(%rbp)
cmpl $0xd00, (%rsi)          # imm = 0xD00
jne 0x32d46
movq %rsi, %r14
cmpl $0x2, 0x44(%rsi)
jne 0x32d65
testq %rdx, %rdx
je 0x32d84
cmpl $0xd01, (%rdx)          # imm = 0xD01
jne 0x32da3
cmpq $0x0, -0x30(%rbp)
je 0x32dc2
movl 0x44(%rdx), %eax
testl %eax, %eax
jle 0x32c99
xorl %esi, %esi
movq %rdx, -0x40(%rbp)
movq %r14, -0x50(%rbp)
movq -0x38(%rbp), %rbx
movq 0x48(%rdx), %rcx
movq (%rcx,%rsi,8), %r12
testq %r12, %r12
je 0x32d08
cmpl $0xc00, (%r12)          # imm = 0xC00
jne 0x32d27
movb $0x3, 0x60(%r12)
cmpl $0x0, 0x44(%r12)
jle 0x32c8a
movq %rsi, -0x48(%rbp)
xorl %r15d, %r15d
movq 0x48(%r12), %rax
movq (%rax,%r15,8), %rax
cmpl $0xc01, (%rax)          # imm = 0xC01
jne 0x32cab
movl 0x44(%rax), %ecx
cmpl $0x3, %ecx
je 0x32c29
cmpl $0x2, %ecx
jne 0x32ce9
movq 0x48(%rax), %rax
movq (%rax), %r13
cmpl $0x200, (%r13)          # imm = 0x200
jne 0x32cca
movq 0x8(%rax), %r14
movb $0x0, -0x450(%rbp)
movq %rbx, %rdi
movq %r14, %rsi
leaq -0x450(%rbp), %rdx
callq 0x2b24f
movq 0x10(%r13), %rdx
movzbl -0x450(%rbp), %ecx
movq %rbx, %rdi
movq -0x30(%rbp), %rsi
movq %r14, %r8
movq -0x50(%rbp), %r14
callq 0x24e4a
jmp 0x32c6e
movups 0x19d28(%rip), %xmm0    # 0x4c958
movaps %xmm0, -0x430(%rbp)
movups 0x19d0a(%rip), %xmm0    # 0x4c948
movaps %xmm0, -0x440(%rbp)
movups 0x19cec(%rip), %xmm0    # 0x4c938
movaps %xmm0, -0x450(%rbp)
movl $0x2e6e6f, -0x421(%rbp) # imm = 0x2E6E6F
movq -0x38(%rbp), %rdi
movq %r14, %rsi
leaq -0x450(%rbp), %rdx
callq *0x58(%rdi)
incq %r15
movslq 0x44(%r12), %rax
cmpq %rax, %r15
jl 0x32bb1
movq -0x40(%rbp), %rdx
movl 0x44(%rdx), %eax
movq -0x48(%rbp), %rsi
incq %rsi
movslq %eax, %rcx
cmpq %rcx, %rsi
jl 0x32b79
addq $0x428, %rsp            # imm = 0x428
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0xe8e5(%rip), %rdi      # 0x41597
leaq 0x17c41(%rip), %rsi     # 0x4a8fa
leaq 0x19bd2(%rip), %rcx     # 0x4c892
movl $0x145e, %edx           # imm = 0x145E
callq 0x30a0
leaq 0x19c3f(%rip), %rdi     # 0x4c910
leaq 0x17c22(%rip), %rsi     # 0x4a8fa
leaq 0x19bb3(%rip), %rcx     # 0x4c892
movl $0x1462, %edx           # imm = 0x1462
callq 0x30a0
leaq 0xc670(%rip), %rdi      # 0x3f360
leaq 0x17c03(%rip), %rsi     # 0x4a8fa
leaq 0x19b94(%rip), %rcx     # 0x4c892
movl $0x1476, %edx           # imm = 0x1476
callq 0x30a0
leaq 0xc5ef(%rip), %rdi      # 0x3f2fe
leaq 0x17be4(%rip), %rsi     # 0x4a8fa
leaq 0x19b75(%rip), %rcx     # 0x4c892
movl $0x1459, %edx           # imm = 0x1459
callq 0x30a0
leaq 0xc632(%rip), %rdi      # 0x3f360
leaq 0x17bc5(%rip), %rsi     # 0x4a8fa
leaq 0x19b56(%rip), %rcx     # 0x4c892
movl $0x147a, %edx           # imm = 0x147A
callq 0x30a0
leaq 0x18083(%rip), %rdi     # 0x4add0
leaq 0x17ba6(%rip), %rsi     # 0x4a8fa
leaq 0x19b37(%rip), %rcx     # 0x4c892
movl $0x1451, %edx           # imm = 0x1451
callq 0x30a0
leaq 0x17f89(%rip), %rdi     # 0x4acf5
leaq 0x17b87(%rip), %rsi     # 0x4a8fa
leaq 0x19b18(%rip), %rcx     # 0x4c892
movl $0x1452, %edx           # imm = 0x1452
callq 0x30a0
leaq 0x19b66(%rip), %rdi     # 0x4c8f1
leaq 0x17b68(%rip), %rsi     # 0x4a8fa
leaq 0x19af9(%rip), %rcx     # 0x4c892
movl $0x1453, %edx           # imm = 0x1453
callq 0x30a0
leaq 0x133ce(%rip), %rdi     # 0x46178
leaq 0x17b49(%rip), %rsi     # 0x4a8fa
leaq 0x19ada(%rip), %rcx     # 0x4c892
movl $0x1454, %edx           # imm = 0x1454
callq 0x30a0
leaq 0x19b39(%rip), %rdi     # 0x4c902
leaq 0x17b2a(%rip), %rsi     # 0x4a8fa
leaq 0x19abb(%rip), %rcx     # 0x4c892
movl $0x1455, %edx           # imm = 0x1455
callq 0x30a0