// File: /workspace/github_c_makefile_star2_O0/lucvoo[P]sparse-dev/pre-process.c
// Function: merge
static int merge(struct token *left, struct token *right)
{
	static char buffer[512];
	enum token_type res = combine(left, right, buffer);
	int n;

	switch (res) {
	case TOKEN_IDENT:
		left->ident = built_in_ident(buffer);
		left->pos.noexpand = 0;
		return 1;

	case TOKEN_NUMBER:
		token_type(left) = TOKEN_NUMBER;	/* could be . + num */
		left->number = xstrdup(buffer);
		return 1;

	case TOKEN_SPECIAL:
		if (buffer[2] && buffer[3])
			break;
		for (n = SPECIAL_BASE; n < SPECIAL_ARG_SEPARATOR; n++) {
			if (!memcmp(buffer, combinations[n-SPECIAL_BASE], 3)) {
				left->special = n;
				return 1;
			}
		}
		break;

	case TOKEN_WIDE_CHAR:
	case TOKEN_WIDE_STRING:
		token_type(left) = res;
		left->pos.noexpand = 0;
		left->string = right->string;
		return 1;

	case TOKEN_WIDE_CHAR_EMBEDDED_0 ... TOKEN_WIDE_CHAR_EMBEDDED_3:
		token_type(left) = res;
		left->pos.noexpand = 0;
		memcpy(left->embedded, right->embedded, 4);
		return 1;

	default:
		;
	}
	sparse_error(left->pos, "'##' failed: concatenation is not a valid token");
	return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
leaq 0x5f4b1(%rip), %rdx     # 0x8f550
callq 0x302b0
movl %eax, -0x1c(%rbp)
movl -0x1c(%rbp), %eax
addl $-0x3, %eax
movl %eax, %ecx
movq %rcx, -0x28(%rbp)
subl $0xf, %eax
ja 0x3025b
movq -0x28(%rbp), %rax
leaq 0x37695(%rip), %rcx     # 0x6775c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq 0x5f479(%rip), %rdi     # 0x8f550
callq 0x44f10
movq %rax, %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x10(%rbp), %rax
movabsq $0x7fffffffffffffff, %rcx # imm = 0x7FFFFFFFFFFFFFFF
andq (%rax), %rcx
orq $0x0, %rcx
movq %rcx, (%rax)
movl $0x1, -0x4(%rbp)
jmp 0x30279
movq -0x10(%rbp), %rax
movq (%rax), %rcx
andq $-0x40, %rcx
orq $0x5, %rcx
movq %rcx, (%rax)
leaq 0x5f42c(%rip), %rdi     # 0x8f550
callq 0x46350
movq %rax, %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x10(%rax)
movl $0x1, -0x4(%rbp)
jmp 0x30279
movsbl 0x5f40b(%rip), %eax     # 0x8f552
cmpl $0x0, %eax
je 0x3015d
movsbl 0x5f400(%rip), %eax     # 0x8f553
cmpl $0x0, %eax
je 0x3015d
jmp 0x3025d
movl $0x100, -0x20(%rbp)     # imm = 0x100
cmpl $0x118, -0x20(%rbp)     # imm = 0x118
jge 0x301be
movl -0x20(%rbp), %eax
subl $0x100, %eax            # imm = 0x100
cltq
leaq 0x5a902(%rip), %rsi     # 0x8aa80
shlq $0x2, %rax
addq %rax, %rsi
leaq 0x5f3c4(%rip), %rdi     # 0x8f550
movl $0x3, %edx
callq 0x11180
cmpl $0x0, %eax
jne 0x301b1
movl -0x20(%rbp), %ecx
movq -0x10(%rbp), %rax
movl %ecx, 0x10(%rax)
movl $0x1, -0x4(%rbp)
jmp 0x30279
jmp 0x301b3
movl -0x20(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x20(%rbp)
jmp 0x30164
jmp 0x3025d
movl -0x1c(%rbp), %ecx
movq -0x10(%rbp), %rax
movl %ecx, %ecx
movl %ecx, %edx
movq (%rax), %rcx
andq $0x3f, %rdx
andq $-0x40, %rcx
orq %rdx, %rcx
movq %rcx, (%rax)
movq -0x10(%rbp), %rax
movabsq $0x7fffffffffffffff, %rcx # imm = 0x7FFFFFFFFFFFFFFF
andq (%rax), %rcx
orq $0x0, %rcx
movq %rcx, (%rax)
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x10(%rax)
movl $0x1, -0x4(%rbp)
jmp 0x30279
movl -0x1c(%rbp), %ecx
movq -0x10(%rbp), %rax
movl %ecx, %ecx
movl %ecx, %edx
movq (%rax), %rcx
andq $0x3f, %rdx
andq $-0x40, %rcx
orq %rdx, %rcx
movq %rcx, (%rax)
movq -0x10(%rbp), %rax
movabsq $0x7fffffffffffffff, %rcx # imm = 0x7FFFFFFFFFFFFFFF
andq (%rax), %rcx
orq $0x0, %rcx
movq %rcx, (%rax)
movq -0x10(%rbp), %rax
movq -0x18(%rbp), %rcx
movl 0x10(%rcx), %ecx
movl %ecx, 0x10(%rax)
movl $0x1, -0x4(%rbp)
jmp 0x30279
jmp 0x3025d
movq -0x10(%rbp), %rax
movq (%rax), %rdi
leaq 0x379aa(%rip), %rsi     # 0x67c15
movb $0x0, %al
callq 0x16f90
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x30, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)