// File: /workspace/github_c_makefile_star2_O0/MaoKo[P]FGFX/fgfp/src/cfg_production.c
// Function: preprocess_literal
int
preprocess_literal(cfg_t const* cfg) {
	if (!cfg)
		{ return (ERROR); }

	int is_error = DONE;
	for (size_t i = 0; i < SIZE_VECTOR(cfg->terminal); ++i) {
		symbol_t* literal = (symbol_t*)AT_VECTOR(cfg->terminal, i);
		if (literal->kind == T_LITERAL) {
			symbol_t* ter = (symbol_t*)AT_VECTOR(cfg->terminal,
										literal->terminal_alias);
			if (!ter->prec) {
				literal->share_prec = true;
				ter->prec = literal->prec;
			}

			if (ter->prec != literal->prec) {
				errorf(0, "The terminal %s has %s alias with different"
							" precedence.", ter->name, literal->name);
				literal->share_prec = false;
				is_error = ERROR;
			}
		}
	}

	if (is_error == ERROR)
		{ return (ERROR); }
	
	for (size_t i = 0; i < SIZE_VECTOR(cfg->productions); ++i) {
		production_t* prod = (production_t*)AT_VECTOR(cfg->productions, i);
		if (prod->mimic_sym && (prod->mimic_sym->kind == T_LITERAL)) {
			prod->mimic_sym = (symbol_t*)AT_VECTOR(cfg->terminal,
											prod->mimic_sym->terminal_alias);
		}
		list_rhs_t* list = prod->rhs_element;
		while (list) {
			if (list->symbol_rhs->kind == T_LITERAL) {
				list->symbol_rhs = (symbol_t*)AT_VECTOR(cfg->terminal,
										list->symbol_rhs->terminal_alias);
			}
			list = list->next;
		}
	}
	return (DONE);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x10(%rbp)
cmpq $0x0, -0x10(%rbp)
jne 0x6bcf
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x6d9b
movl $0x0, -0x14(%rbp)
movq $0x0, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq -0x10(%rbp), %rcx
movq 0x10(%rcx), %rcx
cmpq 0x10(%rcx), %rax
jae 0x6caf
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq (%rax), %rax
movq -0x20(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
cmpl $0x28, 0x8(%rax)
jne 0x6c9c
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq (%rax), %rax
movq -0x28(%rbp), %rcx
movslq 0x18(%rcx), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rax
cmpq $0x0, 0x20(%rax)
jne 0x6c57
movq -0x28(%rbp), %rax
movb $0x1, 0x1c(%rax)
movq -0x28(%rbp), %rax
movq 0x20(%rax), %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x30(%rbp), %rax
movq 0x20(%rax), %rax
movq -0x28(%rbp), %rcx
cmpq 0x20(%rcx), %rax
je 0x6c9a
movq -0x30(%rbp), %rax
movq 0x10(%rax), %rdx
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rcx
xorl %eax, %eax
movl %eax, %edi
leaq 0x5dd1(%rip), %rsi      # 0xca55
movb $0x0, %al
callq 0x4210
movq -0x28(%rbp), %rax
movb $0x0, 0x1c(%rax)
movl $0xffffffff, -0x14(%rbp) # imm = 0xFFFFFFFF
jmp 0x6c9c
jmp 0x6c9e
movq -0x20(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x20(%rbp)
jmp 0x6bde
cmpl $-0x1, -0x14(%rbp)
jne 0x6cc1
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x6d9b
movq $0x0, -0x38(%rbp)
movq -0x38(%rbp), %rax
movq -0x10(%rbp), %rcx
movq (%rcx), %rcx
cmpq 0x10(%rcx), %rax
jae 0x6d94
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq (%rax), %rax
movq -0x38(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rax
cmpq $0x0, 0x28(%rax)
je 0x6d30
movq -0x40(%rbp), %rax
movq 0x28(%rax), %rax
cmpl $0x28, 0x8(%rax)
jne 0x6d30
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq (%rax), %rax
movq -0x40(%rbp), %rcx
movq 0x28(%rcx), %rcx
movslq 0x18(%rcx), %rcx
movq (%rax,%rcx,8), %rcx
movq -0x40(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x40(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x48(%rbp)
cmpq $0x0, -0x48(%rbp)
je 0x6d81
movq -0x48(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x28, 0x8(%rax)
jne 0x6d74
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq (%rax), %rax
movq -0x48(%rbp), %rcx
movq 0x8(%rcx), %rcx
movslq 0x18(%rcx), %rcx
movq (%rax,%rcx,8), %rcx
movq -0x48(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x48(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x48(%rbp)
jmp 0x6d3c
jmp 0x6d83
movq -0x38(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x38(%rbp)
jmp 0x6cc9
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x50, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)