// File: /workspace/github_c_makefile_star2_O0/lucvoo[P]sparse-dev/pre-process.c
// Function: dump_macro
static void dump_macro(struct symbol *sym)
{
	int nargs = sym->arglist ? sym->arglist->count.normal : 0;
	struct token *args[nargs];
	struct token *token;

	printf("#define %s", show_ident(sym->ident));
	token = sym->arglist;
	if (token) {
		const char *sep = "";
		int narg = 0;
		putchar('(');
		for (; !eof_token(token); token = token->next) {
			if (token_type(token) == TOKEN_ARG_COUNT)
				continue;
			if (is_VA_ARGS_token(token))
				printf("%s...", sep);
			else
				printf("%s%s", sep, show_token(token));
			args[narg++] = token;
			sep = ",";
		}
		putchar(')');
	}

	token = sym->expansion;
	while (token_type(token) != TOKEN_UNTAINT) {
		struct token *next = token->next;
		if (token->pos.whitespace)
			putchar(' ');
		switch (token_type(token)) {
		case TOKEN_CONCAT:
			printf("##");
			break;
		case TOKEN_STR_ARGUMENT:
			printf("#");
			/* fall-through */
		case TOKEN_QUOTED_ARGUMENT:
		case TOKEN_MACRO_ARGUMENT:
			token = args[token->argnum];
			/* fall-through */
		default:
			printf("%s", show_token(token));
		}
		token = next;
	}
	putchar('\n');
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
cmpq $0x0, 0x50(%rax)
je 0x2bedc
movq -0x8(%rbp), %rax
movq 0x50(%rax), %rax
movl 0x10(%rax), %eax
andl $0x3ff, %eax            # imm = 0x3FF
movl %eax, -0x44(%rbp)
jmp 0x2bee3
xorl %eax, %eax
movl %eax, -0x44(%rbp)
jmp 0x2bee3
movl -0x44(%rbp), %eax
movl %eax, -0xc(%rbp)
movl -0xc(%rbp), %eax
movq %rsp, %rcx
movq %rcx, -0x18(%rbp)
leaq 0xf(,%rax,8), %rdx
andq $-0x10, %rdx
movq %rsp, %rcx
subq %rdx, %rcx
movq %rcx, -0x50(%rbp)
movq %rcx, %rsp
movq %rax, -0x20(%rbp)
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x44150
movq %rax, %rsi
leaq 0x3be8b(%rip), %rdi     # 0x67db2
movb $0x0, %al
callq 0x110f0
movq -0x8(%rbp), %rax
movq 0x50(%rax), %rax
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x28(%rbp)
je 0x2c014
leaq 0x368dd(%rip), %rax     # 0x62829
movq %rax, -0x30(%rbp)
movl $0x0, -0x34(%rbp)
movl $0x28, %edi
callq 0x11040
leaq 0x80a58(%rip), %rax     # 0xac9c0
cmpq %rax, -0x28(%rbp)
sete %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x2bf7a
jmp 0x2c00a
movq -0x28(%rbp), %rax
movq (%rax), %rax
andq $0x3f, %rax
cmpl $0x1b, %eax
jne 0x2bf8c
jmp 0x2bff9
movq -0x28(%rbp), %rdi
callq 0x30cb0
cmpl $0x0, %eax
je 0x2bfae
movq -0x30(%rbp), %rsi
leaq 0x3be18(%rip), %rdi     # 0x67dbd
movb $0x0, %al
callq 0x110f0
jmp 0x2bfd4
movq -0x30(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0x28(%rbp), %rdi
callq 0x44420
movq -0x58(%rbp), %rsi
movq %rax, %rdx
leaq 0x38e74(%rip), %rdi     # 0x64e41
movb $0x0, %al
callq 0x110f0
movq -0x50(%rbp), %rax
movq -0x28(%rbp), %rdx
movl -0x34(%rbp), %ecx
movl %ecx, %esi
addl $0x1, %esi
movl %esi, -0x34(%rbp)
movslq %ecx, %rcx
movq %rdx, (%rax,%rcx,8)
leaq 0x375db(%rip), %rax     # 0x635d0
movq %rax, -0x30(%rbp)
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x28(%rbp)
jmp 0x2bf61
movl $0x29, %edi
callq 0x11040
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
movq (%rax), %rax
andq $0x3f, %rax
cmpl $0x1a, %eax
je 0x2c0e2
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x40(%rbp)
movq -0x28(%rbp), %rax
movq (%rax), %rax
shrq $0x15, %rax
andq $0x1, %rax
cmpl $0x0, %eax
je 0x2c05e
movl $0x20, %edi
callq 0x11040
movq -0x28(%rbp), %rax
movl (%rax), %eax
andl $0x3f, %eax
addl $-0x15, %eax
movl %eax, %ecx
movq %rcx, -0x60(%rbp)
subl $0x3, %eax
ja 0x2c0bb
movq -0x60(%rbp), %rax
leaq 0x3b60c(%rip), %rcx     # 0x6768c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq 0x3bd33(%rip), %rdi     # 0x67dc3
movb $0x0, %al
callq 0x110f0
jmp 0x2c0d5
leaq 0x3bd24(%rip), %rdi     # 0x67dc4
movb $0x0, %al
callq 0x110f0
movq -0x50(%rbp), %rax
movq -0x28(%rbp), %rcx
movslq 0x10(%rcx), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rdi
callq 0x44420
movq %rax, %rsi
leaq 0x410c7(%rip), %rdi     # 0x6d195
movb $0x0, %al
callq 0x110f0
movq -0x40(%rbp), %rax
movq %rax, -0x28(%rbp)
jmp 0x2c020
movl $0xa, %edi
callq 0x11040
movq -0x18(%rbp), %rax
movq %rax, %rsp
movq %rbp, %rsp
popq %rbp
retq
nopl (%rax,%rax)