// File: /workspace/github_c_makefile_star2_O0/Ihsoh[P]ilang/compiler/backend/semantics.c
// Function: stat_mbr
static void _stat_mbr(
	ParserContext *ctx,
	ParserASTNode *node
) {
	assert(ctx);
	assert(node);
	assert(node->type == BE_NODE_STAT_MBR);
	assert(node->nchilds == 3);

	ParserASTNode *node_target = node->childs[0];
	assert(node_target->type == BE_NODE_IDENTIFIER);
	ParserSymbol *symbol_target = _get_var_symbol_by_id_node(ctx, node_target);
	ParserASTNode *node_type_target = BE_VAR_SYMBOL_GET_TYPE_NODE(symbol_target);
	if (node_type_target->type != BE_NODE_TYPE_POINTER) {
		goto err;
	}

	ParserASTNode *node_source_left = node->childs[1];
	_GetParamInfoResult result_source_left;
	_get_param_info(ctx, node_source_left, &result_source_left);
	ParserASTNode *node_type_source_left = result_source_left.node_type;
	if (node_type_source_left->type != BE_NODE_TYPE_POINTER) {
		goto err;
	}
	if (node_type_source_left->childs[0]->type != BE_NODE_TYPE_STRUCT) {
		goto err;
	}
	ParserASTNode *node_struct_id = node_type_source_left->childs[0]->childs[0];

	ParserASTNode *node_source_right = node->childs[2];
	assert(node_source_right->type == BE_NODE_IDENTIFIER);
	ParserSymbol *symbol_struct_member = _get_struct_member_symbol(
		ctx, node_struct_id, node_source_right
	);
	ParserASTNode *node_type_struct_member = BE_STRUCT_MEMBER_VAR_SYMBOL_GET_TYPE_NODE(symbol_struct_member);
	if (!_is_compatible_type(ctx, node_type_target->childs[0], node_type_struct_member, true)) {
		goto err;
	}

	return;
err:
	_SYNERR_NODE(
		ctx,
		node,
		"invalid parameter combination."
	);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x470, %rsp            # imm = 0x470
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
cmpq $0x0, -0x8(%rbp)
je 0x5dbac
jmp 0x5dbcb
leaq 0x225ae(%rip), %rdi     # 0x80161
leaq 0x24cc6(%rip), %rsi     # 0x82880
movl $0x1423, %edx           # imm = 0x1423
leaq 0x27b2d(%rip), %rcx     # 0x856f3
callq 0x30a0
cmpq $0x0, -0x10(%rbp)
je 0x5dbd4
jmp 0x5dbf3
leaq 0x18981(%rip), %rdi     # 0x7655c
leaq 0x24c9e(%rip), %rsi     # 0x82880
movl $0x1424, %edx           # imm = 0x1424
leaq 0x27b05(%rip), %rcx     # 0x856f3
callq 0x30a0
movq -0x10(%rbp), %rax
cmpl $0xbe5, (%rax)          # imm = 0xBE5
jne 0x5dc01
jmp 0x5dc20
leaq 0x1b786(%rip), %rdi     # 0x7938e
leaq 0x24c71(%rip), %rsi     # 0x82880
movl $0x1425, %edx           # imm = 0x1425
leaq 0x27ad8(%rip), %rcx     # 0x856f3
callq 0x30a0
movq -0x10(%rbp), %rax
cmpl $0x3, 0x44(%rax)
jne 0x5dc2c
jmp 0x5dc4b
leaq 0x1950b(%rip), %rdi     # 0x7713e
leaq 0x24c46(%rip), %rsi     # 0x82880
movl $0x1426, %edx           # imm = 0x1426
leaq 0x27aad(%rip), %rcx     # 0x856f3
callq 0x30a0
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rax
cmpl $0x200, (%rax)          # imm = 0x200
jne 0x5dc68
jmp 0x5dc87
leaq 0x1874e(%rip), %rdi     # 0x763bd
leaq 0x24c0a(%rip), %rsi     # 0x82880
movl $0x1429, %edx           # imm = 0x1429
leaq 0x27a71(%rip), %rcx     # 0x856f3
callq 0x30a0
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x5edc0
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq 0x38(%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
cmpl $0x440, (%rax)          # imm = 0x440
je 0x5dcb5
jmp 0x5dda0
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x30(%rbp)
movq -0x8(%rbp), %rdi
movq -0x30(%rbp), %rsi
leaq -0x40(%rbp), %rdx
callq 0x5efc0
movq -0x40(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rax
cmpl $0x440, (%rax)          # imm = 0x440
je 0x5dcef
jmp 0x5dda0
movq -0x48(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
cmpl $0x410, (%rax)          # imm = 0x410
je 0x5dd07
jmp 0x5dda0
movq -0x48(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq %rax, -0x50(%rbp)
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x10(%rax), %rax
movq %rax, -0x58(%rbp)
movq -0x58(%rbp), %rax
cmpl $0x200, (%rax)          # imm = 0x200
jne 0x5dd3b
jmp 0x5dd5a
leaq 0x1b6d3(%rip), %rdi     # 0x79415
leaq 0x24b37(%rip), %rsi     # 0x82880
movl $0x143d, %edx           # imm = 0x143D
leaq 0x2799e(%rip), %rcx     # 0x856f3
callq 0x30a0
movq -0x8(%rbp), %rdi
movq -0x50(%rbp), %rsi
movq -0x58(%rbp), %rdx
callq 0x4dd30
movq %rax, -0x60(%rbp)
movq -0x60(%rbp), %rax
movq 0x38(%rax), %rax
movq %rax, -0x68(%rbp)
movq -0x8(%rbp), %rdi
movq -0x28(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rsi
movq -0x68(%rbp), %rdx
movl $0x1, %ecx
callq 0x50c90
testb $0x1, %al
jne 0x5dd9e
jmp 0x5dda0
jmp 0x5ddce
leaq -0x470(%rbp), %rdi
leaq 0x26efc(%rip), %rsi     # 0x84caa
movb $0x0, %al
callq 0x3160
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rax
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
leaq -0x470(%rbp), %rdx
callq *%rax
addq $0x470, %rsp            # imm = 0x470
popq %rbp
retq
nopw (%rax,%rax)