// File: /workspace/github_c_makefile_star2_O2/ArtifexSoftware[P]mujs/pp.c
// Function: snode
static void snode(int d, js_Ast *node)
{
	void (*afun)(int,js_Ast*) = snode;
	void (*bfun)(int,js_Ast*) = snode;
	void (*cfun)(int,js_Ast*) = snode;
	void (*dfun)(int,js_Ast*) = snode;

	if (!node) {
		return;
	}

	if (node->type == AST_LIST) {
		slist(d, node);
		return;
	}

	pc('(');
	ps(astname[node->type]);
	switch (node->type) {
	default: break;
	case AST_IDENTIFIER: pc(' '); ps(node->string); break;
	case EXP_IDENTIFIER: pc(' '); ps(node->string); break;
	case EXP_STRING: pc(' '); pstr(node->string); break;
	case EXP_REGEXP: pc(' '); pregexp(node->string, node->number); break;
	case EXP_NUMBER: printf(" %.9g", node->number); break;
	case STM_BLOCK: afun = sblock; break;
	case AST_FUNDEC: case EXP_FUN: cfun = sblock; break;
	case EXP_PROP_GET: cfun = sblock; break;
	case EXP_PROP_SET: cfun = sblock; break;
	case STM_SWITCH: bfun = sblock; break;
	case STM_CASE: bfun = sblock; break;
	case STM_DEFAULT: afun = sblock; break;
	}
	if (node->a) { pc(' '); afun(d, node->a); }
	if (node->b) { pc(' '); bfun(d, node->b); }
	if (node->c) { pc(' '); cfun(d, node->c); }
	if (node->d) { pc(' '); dfun(d, node->d); }
	pc(')');
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
testq %rsi, %rsi
je 0x5d49
movq %rsi, %r14
movl %edi, %ebx
cmpl $0x0, (%rsi)
je 0x5d58
pushq $0x28
popq %rdi
callq 0x4040
movl (%r14), %eax
leaq 0x33161(%rip), %rcx     # 0x38e70
movq (%rcx,%rax,8), %rdi
callq 0x5115
movl (%r14), %eax
leaq -0x3f(%rip), %r15       # 0x5ce3
leal -0x1(%rax), %ecx
cmpl $0x10, %ecx
ja 0x5d93
leaq 0x1c5e7(%rip), %rax     # 0x22318
movslq (%rax,%rcx,4), %rcx
addq %rax, %rcx
jmpq *%rcx
leaq -0xda(%rip), %r12       # 0x5c67
movq %r15, %r13
jmp 0x5e18
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
pushq $0x5b
popq %rdi
pushq $0x5d
popq %rbp
pushq $0x20
popq %r15
callq 0x4040
testq %r14, %r14
je 0x5e7d
cmpl $0x0, (%r14)
jne 0x5e92
movq 0x10(%r14), %rsi
movl %ebx, %edi
callq 0x5ce3
movq 0x18(%r14), %r14
testq %r14, %r14
je 0x5d67
movl %r15d, %edi
jmp 0x5d62
cmpl $0x47, %eax
je 0x5da7
cmpl $0x55, %eax
je 0x5dc9
cmpl $0x5a, %eax
je 0x5dc9
cmpl $0x5b, %eax
jne 0x5e12
movq %r15, %r13
movq %r15, %r12
leaq -0x14d(%rip), %r15      # 0x5c67
jmp 0x5e18
pushq $0x20
popq %rdi
callq 0x4040
movq 0x38(%r14), %rdi
callq 0x5115
jmp 0x5e12
leaq -0x169(%rip), %r13      # 0x5c67
jmp 0x5e15
movsd 0x30(%r14), %xmm0
leaq 0x1c8b4(%rip), %rdi     # 0x22693
movb $0x1, %al
callq 0x4120
jmp 0x5e12
pushq $0x20
popq %rdi
callq 0x4040
movq 0x38(%r14), %rdi
cvttsd2si 0x30(%r14), %esi
callq 0x5b67
jmp 0x5e12
pushq $0x20
popq %rdi
callq 0x4040
movq 0x38(%r14), %rdi
callq 0x59c8
movq %r15, %r13
movq %r15, %r12
cmpq $0x0, 0x10(%r14)
je 0x5e30
pushq $0x20
popq %rdi
callq 0x4040
movq 0x10(%r14), %rsi
movl %ebx, %edi
callq *%r15
cmpq $0x0, 0x18(%r14)
je 0x5e48
pushq $0x20
popq %rdi
callq 0x4040
movq 0x18(%r14), %rsi
movl %ebx, %edi
callq *%r13
cmpq $0x0, 0x20(%r14)
je 0x5e60
pushq $0x20
popq %rdi
callq 0x4040
movq 0x20(%r14), %rsi
movl %ebx, %edi
callq *%r12
pushq $0x29
popq %rbp
cmpq $0x0, 0x28(%r14)
je 0x5e7d
pushq $0x20
popq %rdi
callq 0x4040
movq 0x28(%r14), %rsi
movl %ebx, %edi
callq 0x5ce3
movl %ebp, %edi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x4040
leaq 0x1c5ef(%rip), %rdi     # 0x22488
leaq 0x1c5ff(%rip), %rsi     # 0x2249f
leaq 0x1c7f2(%rip), %rcx     # 0x22699
movl $0x336, %edx            # imm = 0x336
callq 0x4160
nopl (%rax)