// File: /workspace/github_c_makefile_star2_O3/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 0x6500
movq %rsi, %r14
movl %edi, %ebx
cmpl $0x0, (%rsi)
je 0x650f
movl $0x28, %edi
callq 0x4040
movl (%r14), %eax
leaq 0x3b9bd(%rip), %rcx     # 0x41e70
movq (%rcx,%rax,8), %rdi
movq 0x3cb1a(%rip), %r12     # 0x42fd8
movq (%r12), %rsi
callq 0x4170
movl (%r14), %eax
leaq -0x4c(%rip), %r15       # 0x6485
cmpl $0x46, %eax
jg 0x6546
decl %eax
cmpl $0x10, %eax
ja 0x65d6
leaq 0x26e30(%rip), %rcx     # 0x2d318
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq -0x17b(%rip), %r12      # 0x637d
movq %r15, %r13
jmp 0x65dc
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movl $0x5b, %edi
callq 0x4040
cmpl $0x0, (%r14)
jne 0x6660
movq 0x10(%r14), %rsi
movl %ebx, %edi
callq 0x6485
movq 0x18(%r14), %r14
movl $0x20, %edi
testq %r14, %r14
jne 0x6514
movl $0x5d, %ebp
jmp 0x664b
cmpl $0x59, %eax
jg 0x6557
cmpl $0x47, %eax
je 0x6561
cmpl $0x55, %eax
je 0x6589
jmp 0x65d6
cmpl $0x5a, %eax
je 0x6589
cmpl $0x5b, %eax
jne 0x65d6
movq %r15, %r13
movq %r15, %r12
leaq -0x1f1(%rip), %r15      # 0x637d
jmp 0x65dc
movl $0x20, %edi
callq 0x4040
movq 0x38(%r14), %rdi
movq (%r12), %rsi
callq 0x4170
jmp 0x65d6
leaq -0x213(%rip), %r13      # 0x637d
jmp 0x65d9
movl $0x20, %edi
callq 0x4040
movq 0x38(%r14), %rdi
callq 0x5d36
jmp 0x65d6
movsd 0x30(%r14), %xmm0
leaq 0x270df(%rip), %rdi     # 0x2d693
movb $0x1, %al
callq 0x4120
jmp 0x65d6
movl $0x20, %edi
callq 0x4040
movq 0x38(%r14), %rdi
cvttsd2si 0x30(%r14), %esi
callq 0x5ec0
movq %r15, %r13
movq %r15, %r12
cmpq $0x0, 0x10(%r14)
je 0x65f6
movl $0x20, %edi
callq 0x4040
movq 0x10(%r14), %rsi
movl %ebx, %edi
callq *%r15
cmpq $0x0, 0x18(%r14)
je 0x6610
movl $0x20, %edi
callq 0x4040
movq 0x18(%r14), %rsi
movl %ebx, %edi
callq *%r13
cmpq $0x0, 0x20(%r14)
je 0x662a
movl $0x20, %edi
callq 0x4040
movq 0x20(%r14), %rsi
movl %ebx, %edi
callq *%r12
movl $0x29, %ebp
cmpq $0x0, 0x28(%r14)
je 0x664b
movl $0x20, %edi
callq 0x4040
movq 0x28(%r14), %rsi
movl %ebx, %edi
callq 0x6485
movl %ebp, %edi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x4040
leaq 0x26e21(%rip), %rdi     # 0x2d488
leaq 0x26e31(%rip), %rsi     # 0x2d49f
leaq 0x27024(%rip), %rcx     # 0x2d699
movl $0x336, %edx            # imm = 0x336
callq 0x4160
nop