// File: /workspace/github_c_makefile_star2_O0/dalnefre[P]kernel_abe/emit.c
// Function: emit_cons
void
emit_cons(CONS* cons, int indent, void (*emit)(char c, void* ctx), void* ctx)
{
	char buf[256];
	int emit_length = 0;
	int i;
	char c;
	char *p;

	XDBUG_ENTER("emit_cons");
	++emit_depth;
	if (boolp(cons)) {
		sprintf(buf, cons ? "-T-" : "-F-");
	} else if (nilp(cons)) {
		sprintf(buf, "NIL");
	} else if (atomp(cons)) {
		char *s = atom_str(cons);
		int qtd = s[strcspn(s, REDUCE_TOKEN_BRKS)]; /* look for special chars */

		if (qtd) {
			(*emit)('"', ctx);
		}
		if (strlen(s) > 250) {
			sprintf(buf, "%.250s...", s);
		} else {
			strncpy(buf, s, 255);
		}
		if (qtd) {
			int n = strlen(buf);

			buf[n++] = '"';
			buf[n] = '\0';
		}
	} else if (numberp(cons)) {
		sprintf(buf, "%d", MK_INT(cons));
#if NUMBER_IS_FUNC
#else
	} else if (funcp(cons)) {
		sprintf(buf, "@%p", MK_PTR(cons));
#endif
	} else if (consp(cons)) {
		if (emit_depth > EMIT_DEPTH_LIMIT) {
			sprintf(buf, "[%p;%p]", (void*)car(cons), (void*)cdr(cons));
		} else {
			(*emit)('(', ctx);
			for (emit_length = 0; emit_length < EMIT_LENGTH_LIMIT; ++emit_length) {
				emit_cons(car(cons), indent, emit, ctx);
				cons = cdr(cons);
				if (nilp(cons)) {
					break;
				} else if (!consp(cons)) {
					(*emit)(' ', ctx);
					(*emit)(':', ctx);
					(*emit)(' ', ctx);
					emit_cons(cons, indent, emit, ctx);
					break;
				}
				if (indent) {
					(*emit)('\n', ctx);
					for (i = 0; i < emit_depth; ++i) {
						(*emit)(' ', ctx);
					}
				} else {
					(*emit)(' ', ctx);
				}
			}
			sprintf(buf, "%s)", (emit_length >= EMIT_LENGTH_LIMIT) ? "... " : "");
		}
	} else {
		sprintf(buf, "#%p", (void*)cons);
	}
	/* tie off the buffer and safely stream it out one character at a time */
	buf[255] = '\0';
	p = buf;
	while ((c = *p++) != '\0') {
		(*emit)(c, ctx);
	}
	--emit_depth;
	XDBUG_RETURN;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x170, %rsp            # imm = 0x170
movq %rdi, -0x8(%rbp)
movl %esi, -0xc(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movl $0x0, -0x124(%rbp)
movl 0x117ce(%rip), %eax     # 0x2f7e8
addl $0x1, %eax
movl %eax, 0x117c5(%rip)     # 0x2f7e8
cmpq $0x0, -0x8(%rbp)
je 0x1e035
movl $0x1, %eax
cmpq %rax, -0x8(%rbp)
jne 0x1e062
leaq -0x120(%rbp), %rdi
movq -0x8(%rbp), %rcx
leaq 0xc2ee(%rip), %rsi      # 0x2a335
leaq 0xc2e3(%rip), %rax      # 0x2a331
cmpq $0x0, %rcx
cmovneq %rax, %rsi
movb $0x0, %al
callq 0x2220
jmp 0x1e429
leaq 0x11227(%rip), %rax     # 0x2f290
cmpq %rax, -0x8(%rbp)
sete %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x1e097
leaq -0x120(%rbp), %rdi
leaq 0xd449(%rip), %rsi      # 0x2b4d4
movb $0x0, %al
callq 0x2220
jmp 0x1e427
movq -0x8(%rbp), %rax
andq $0x3, %rax
cmpq $0x2, %rax
sete %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x1e1a8
movq -0x8(%rbp), %rdi
callq 0x217a0
movq %rax, -0x140(%rbp)
movq -0x140(%rbp), %rax
movq %rax, -0x150(%rbp)
movq -0x140(%rbp), %rdi
leaq 0xc256(%rip), %rsi      # 0x2a339
callq 0x2140
movq %rax, %rcx
movq -0x150(%rbp), %rax
movsbl (%rax,%rcx), %eax
movl %eax, -0x144(%rbp)
cmpl $0x0, -0x144(%rbp)
je 0x1e114
movq -0x18(%rbp), %rax
movq -0x20(%rbp), %rsi
movl $0x22, %edi
callq *%rax
movq -0x140(%rbp), %rdi
callq 0x20c0
cmpq $0xfa, %rax
jbe 0x1e146
leaq -0x120(%rbp), %rdi
movq -0x140(%rbp), %rdx
leaq 0xc207(%rip), %rsi      # 0x2a344
movb $0x0, %al
callq 0x2220
jmp 0x1e15e
leaq -0x120(%rbp), %rdi
movq -0x140(%rbp), %rsi
movl $0xff, %edx
callq 0x2070
cmpl $0x0, -0x144(%rbp)
je 0x1e1a3
leaq -0x120(%rbp), %rdi
callq 0x20c0
movl %eax, -0x148(%rbp)
movl -0x148(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x148(%rbp)
cltq
movb $0x22, -0x120(%rbp,%rax)
movslq -0x148(%rbp), %rax
movb $0x0, -0x120(%rbp,%rax)
jmp 0x1e425
movq -0x8(%rbp), %rax
andq $0x3, %rax
cmpq $0x3, %rax
sete %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x1e1e8
leaq -0x120(%rbp), %rdi
movq -0x8(%rbp), %rax
sarq $0x2, %rax
movl %eax, %edx
leaq 0xc525(%rip), %rsi      # 0x2a701
movb $0x0, %al
callq 0x2220
jmp 0x1e423
xorl %eax, %eax
cmpq $0x0, -0x8(%rbp)
movb %al, -0x151(%rbp)
je 0x1e20c
movq -0x8(%rbp), %rax
andq $0x3, %rax
cmpq $0x0, %rax
sete %al
movb %al, -0x151(%rbp)
movb -0x151(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x1e408
cmpl $0x6, 0x115be(%rip)     # 0x2f7e8
jle 0x1e277
leaq -0x120(%rbp), %rax
movq %rax, -0x168(%rbp)
movq -0x8(%rbp), %rdi
callq 0x25380
movq %rax, -0x160(%rbp)
movq -0x8(%rbp), %rdi
callq 0x25510
movq -0x168(%rbp), %rdi
movq -0x160(%rbp), %rdx
movq %rax, %rcx
leaq 0xc0e3(%rip), %rsi      # 0x2a34e
movb $0x0, %al
callq 0x2220
jmp 0x1e406
movq -0x18(%rbp), %rax
movq -0x20(%rbp), %rsi
movl $0x28, %edi
callq *%rax
movl $0x0, -0x124(%rbp)
cmpl $0x9, -0x124(%rbp)
jge 0x1e3d6
movq -0x8(%rbp), %rdi
callq 0x25380
movq %rax, %rdi
movl -0xc(%rbp), %esi
movq -0x18(%rbp), %rdx
movq -0x20(%rbp), %rcx
callq 0x1dff0
movq -0x8(%rbp), %rdi
callq 0x25510
movq %rax, -0x8(%rbp)
leaq 0x10fc3(%rip), %rax     # 0x2f290
cmpq %rax, -0x8(%rbp)
sete %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x1e2e6
jmp 0x1e3d6
xorl %eax, %eax
cmpq $0x0, -0x8(%rbp)
movb %al, -0x169(%rbp)
je 0x1e30a
movq -0x8(%rbp), %rax
andq $0x3, %rax
cmpq $0x0, %rax
sete %al
movb %al, -0x169(%rbp)
movb -0x169(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
jne 0x1e360
movq -0x18(%rbp), %rax
movq -0x20(%rbp), %rsi
movl $0x20, %edi
callq *%rax
movq -0x18(%rbp), %rax
movq -0x20(%rbp), %rsi
movl $0x3a, %edi
callq *%rax
movq -0x18(%rbp), %rax
movq -0x20(%rbp), %rsi
movl $0x20, %edi
callq *%rax
movq -0x8(%rbp), %rdi
movl -0xc(%rbp), %esi
movq -0x18(%rbp), %rdx
movq -0x20(%rbp), %rcx
callq 0x1dff0
jmp 0x1e3d6
jmp 0x1e362
cmpl $0x0, -0xc(%rbp)
je 0x1e3b1
movq -0x18(%rbp), %rax
movq -0x20(%rbp), %rsi
movl $0xa, %edi
callq *%rax
movl $0x0, -0x128(%rbp)
movl -0x128(%rbp), %eax
cmpl 0x1145b(%rip), %eax     # 0x2f7e8
jge 0x1e3af
movq -0x18(%rbp), %rax
movq -0x20(%rbp), %rsi
movl $0x20, %edi
callq *%rax
movl -0x128(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x128(%rbp)
jmp 0x1e381
jmp 0x1e3c0
movq -0x18(%rbp), %rax
movq -0x20(%rbp), %rsi
movl $0x20, %edi
callq *%rax
jmp 0x1e3c2
movl -0x124(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x124(%rbp)
jmp 0x1e290
leaq -0x120(%rbp), %rdi
movl -0x124(%rbp), %ecx
leaq 0xaf85(%rip), %rdx      # 0x2936f
leaq 0xbf69(%rip), %rax      # 0x2a35a
cmpl $0x9, %ecx
cmovgeq %rax, %rdx
leaq 0xbf57(%rip), %rsi      # 0x2a356
movb $0x0, %al
callq 0x2220
jmp 0x1e421
leaq -0x120(%rbp), %rdi
movq -0x8(%rbp), %rdx
leaq 0xbf45(%rip), %rsi      # 0x2a35f
movb $0x0, %al
callq 0x2220
jmp 0x1e423
jmp 0x1e425
jmp 0x1e427
jmp 0x1e429
movb $0x0, -0x21(%rbp)
leaq -0x120(%rbp), %rax
movq %rax, -0x138(%rbp)
movq -0x138(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x138(%rbp)
movb (%rax), %al
movb %al, -0x129(%rbp)
movsbl %al, %eax
cmpl $0x0, %eax
je 0x1e475
movq -0x18(%rbp), %rax
movb -0x129(%rbp), %cl
movq -0x20(%rbp), %rsi
movsbl %cl, %edi
callq *%rax
jmp 0x1e43b
movl 0x1136d(%rip), %eax     # 0x2f7e8
addl $-0x1, %eax
movl %eax, 0x11364(%rip)     # 0x2f7e8
addq $0x170, %rsp            # imm = 0x170
popq %rbp
retq
nopl (%rax)