// File: /workspace/github_c_makefile_star2_O2/ArtifexSoftware[P]mujs/pp.c
// Function: pexpi
static void pexpi(int d, int p, js_Ast *exp)
{
	int tp, paren;

	if (!exp) return;

	tp = prec(exp->type);
	paren = 0;
	if (tp < p) {
		pc('(');
		paren = 1;
	}
	p = tp;

	switch (exp->type) {
	case AST_IDENTIFIER: ps(exp->string); break;
	case EXP_IDENTIFIER: ps(exp->string); break;
	case EXP_NUMBER: printf("%.9g", exp->number); break;
	case EXP_STRING: pstr(exp->string); break;
	case EXP_REGEXP: pregexp(exp->string, exp->number); break;

	case EXP_ELISION: ps("elision"); break;
	case EXP_NULL: ps("null"); break;
	case EXP_TRUE: ps("true"); break;
	case EXP_FALSE: ps("false"); break;
	case EXP_THIS: ps("this"); break;

	case EXP_OBJECT: pobject(d, exp->a); break;
	case EXP_ARRAY: parray(d, exp->a); break;

	case EXP_DELETE: puna(d, p, exp, "delete ", ""); break;
	case EXP_VOID: puna(d, p, exp, "void ", ""); break;
	case EXP_TYPEOF: puna(d, p, exp, "typeof ", ""); break;
	case EXP_PREINC: puna(d, p, exp, "++", ""); break;
	case EXP_PREDEC: puna(d, p, exp, "--", ""); break;
	case EXP_POSTINC: puna(d, p, exp, "", "++"); break;
	case EXP_POSTDEC: puna(d, p, exp, "", "--"); break;
	case EXP_POS: puna(d, p, exp, "+", ""); break;
	case EXP_NEG: puna(d, p, exp, "-", ""); break;
	case EXP_BITNOT: puna(d, p, exp, "~", ""); break;
	case EXP_LOGNOT: puna(d, p, exp, "!", ""); break;

	case EXP_LOGOR: pbin(d, p, exp, "||"); break;
	case EXP_LOGAND: pbin(d, p, exp, "&&"); break;
	case EXP_BITOR: pbin(d, p, exp, "|"); break;
	case EXP_BITXOR: pbin(d, p, exp, "^"); break;
	case EXP_BITAND: pbin(d, p, exp, "&"); break;
	case EXP_EQ: pbin(d, p, exp, "=="); break;
	case EXP_NE: pbin(d, p, exp, "!="); break;
	case EXP_STRICTEQ: pbin(d, p, exp, "==="); break;
	case EXP_STRICTNE: pbin(d, p, exp, "!=="); break;
	case EXP_LT: pbin(d, p, exp, "<"); break;
	case EXP_GT: pbin(d, p, exp, ">"); break;
	case EXP_LE: pbin(d, p, exp, "<="); break;
	case EXP_GE: pbin(d, p, exp, ">="); break;
	case EXP_IN: pbin(d, p, exp, "in"); break;
	case EXP_SHL: pbin(d, p, exp, "<<"); break;
	case EXP_SHR: pbin(d, p, exp, ">>"); break;
	case EXP_USHR: pbin(d, p, exp, ">>>"); break;
	case EXP_ADD: pbin(d, p, exp, "+"); break;
	case EXP_SUB: pbin(d, p, exp, "-"); break;
	case EXP_MUL: pbin(d, p, exp, "*"); break;
	case EXP_DIV: pbin(d, p, exp, "/"); break;
	case EXP_MOD: pbin(d, p, exp, "%"); break;
	case EXP_ASS: pbin(d, p, exp, "="); break;
	case EXP_ASS_MUL: pbin(d, p, exp, "*="); break;
	case EXP_ASS_DIV: pbin(d, p, exp, "/="); break;
	case EXP_ASS_MOD: pbin(d, p, exp, "%="); break;
	case EXP_ASS_ADD: pbin(d, p, exp, "+="); break;
	case EXP_ASS_SUB: pbin(d, p, exp, "-="); break;
	case EXP_ASS_SHL: pbin(d, p, exp, "<<="); break;
	case EXP_ASS_SHR: pbin(d, p, exp, ">>="); break;
	case EXP_ASS_USHR: pbin(d, p, exp, ">>>="); break;
	case EXP_ASS_BITAND: pbin(d, p, exp, "&="); break;
	case EXP_ASS_BITXOR: pbin(d, p, exp, "^="); break;
	case EXP_ASS_BITOR: pbin(d, p, exp, "|="); break;

	case EXP_INSTANCEOF:
		pexpi(d, p, exp->a);
		ps(" instanceof ");
		pexpi(d, p, exp->b);
		break;

	case EXP_COMMA:
		pexpi(d, p, exp->a);
		pc(','); sp();
		pexpi(d, p, exp->b);
		break;

	case EXP_COND:
		pexpi(d, p, exp->a);
		sp(); pc('?'); sp();
		pexpi(d, p, exp->b);
		sp(); pc(':'); sp();
		pexpi(d, p, exp->c);
		break;

	case EXP_INDEX:
		pexpi(d, p, exp->a);
		pc('[');
		pexpi(d, 0, exp->b);
		pc(']');
		break;

	case EXP_MEMBER:
		pexpi(d, p, exp->a);
		pc('.');
		pexpi(d, 0, exp->b);
		break;

	case EXP_CALL:
		pexpi(d, p, exp->a);
		pc('(');
		pargs(d, exp->b);
		pc(')');
		break;

	case EXP_NEW:
		ps("new ");
		pexpi(d, p, exp->a);
		pc('(');
		pargs(d, exp->b);
		pc(')');
		break;

	case EXP_FUN:
		if (p == 0) pc('(');
		ps("function ");
		pexpi(d, 0, exp->a);
		pc('(');
		pargs(d, exp->b);
		pc(')'); sp(); pc('{'); nl();
		pstmlist(d, exp->c);
		in(d); pc('}');
		if (p == 0) pc(')');
		break;

	default:
		ps("<UNKNOWN>");
		break;
	}

	if (paren) pc(')');
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
testq %rdx, %rdx
je 0x581e
movq %rdx, %r15
movl %esi, %ebx
movl %edi, %r14d
movl (%rdx), %eax
xorl %ebp, %ebp
leal -0x2(%rax), %ecx
cmpl $0x43, %ecx
ja 0x582d
leaq 0x1ce2c(%rip), %rdx     # 0x220e0
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movl $0xaa, %ebp
jmp 0x530f
pushq $0x14
jmp 0x530e
movl $0x8c, %ebp
jmp 0x530f
pushq $0x64
jmp 0x530e
movl $0xa0, %ebp
jmp 0x530f
pushq $0x5a
jmp 0x530e
pushq $0x6e
jmp 0x530e
movl $0x82, %ebp
jmp 0x530f
movl $0x96, %ebp
jmp 0x530f
pushq $0x78
jmp 0x530e
pushq $0x1e
jmp 0x530e
pushq $0x28
jmp 0x530e
pushq $0x32
jmp 0x530e
pushq $0xa
jmp 0x530e
pushq $0x3c
jmp 0x530e
pushq $0x50
jmp 0x530e
pushq $0x46
popq %rbp
xorl %r12d, %r12d
cmpl %ebx, %ebp
jge 0x5321
pushq $0x28
popq %rdi
callq 0x4040
movl (%r15), %eax
addl $-0x2, %eax
cmpl $0x43, %eax
ja 0x5835
leaq 0x1cebc(%rip), %rcx     # 0x221f0
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x38(%r15), %rdi
jmp 0x583c
leaq 0x1d223(%rip), %rcx     # 0x22570
jmp 0x57f7
leaq 0x1d1ee(%rip), %rcx     # 0x22547
jmp 0x57f7
leaq 0x1d1d7(%rip), %rcx     # 0x2253c
jmp 0x57f7
leaq 0x1d1f4(%rip), %rcx     # 0x22565
jmp 0x57f7
leaq 0x1d1df(%rip), %rcx     # 0x2255c
jmp 0x57f7
leaq 0x1d1b6(%rip), %rcx     # 0x2253f
jmp 0x57f7
leaq 0x1d1a0(%rip), %rcx     # 0x22535
jmp 0x57f7
leaq 0x1d1cb(%rip), %rcx     # 0x2256c
jmp 0x57f7
leaq 0x25bc7(%rip), %rcx     # 0x2af74
jmp 0x569c
leaq 0x1d1b8(%rip), %rcx     # 0x22571
jmp 0x57f7
leaq 0x1d478(%rip), %rcx     # 0x2283d
jmp 0x57f7
leaq 0x1d169(%rip), %rcx     # 0x2253a
jmp 0x569c
leaq 0x1d149(%rip), %rcx     # 0x22526
jmp 0x569c
leaq 0x1d15b(%rip), %rcx     # 0x22544
jmp 0x57f7
leaq 0x272e3(%rip), %rdi     # 0x2c6d8
callq 0x5115
movq 0x10(%r15), %rdx
movl %r14d, %edi
movl %ebp, %esi
callq 0x527e
pushq $0x28
popq %rdi
callq 0x4040
movq 0x18(%r15), %rsi
movl %r14d, %edi
callq 0x512e
pushq $0x29
jmp 0x54e4
movq 0x10(%r15), %rdx
movl %r14d, %edi
movl %ebp, %esi
callq 0x527e
pushq $0x2c
popq %rdi
callq 0x4040
callq 0x5187
jmp 0x5601
leaq 0x1d108(%rip), %rcx     # 0x22552
jmp 0x57f7
leaq 0x26771(%rip), %rcx     # 0x2bbc7
leaq 0x1d0da(%rip), %r8      # 0x22537
jmp 0x56a3
leaq 0x1d0c3(%rip), %rcx     # 0x2252c
jmp 0x569c
leaq 0x1d0df(%rip), %rcx     # 0x22554
jmp 0x57f7
leaq 0x1d0b7(%rip), %rcx     # 0x22538
jmp 0x569c
movq 0x38(%r15), %rdi
cvttsd2si 0x30(%r15), %esi
callq 0x5b67
jmp 0x5804
leaq 0x1d0b9(%rip), %rcx     # 0x2255a
jmp 0x57f7
leaq 0x1d08a(%rip), %rcx     # 0x22537
jmp 0x569c
leaq 0x1d25d(%rip), %rdi     # 0x22716
jmp 0x583c
movq 0x10(%r15), %rdx
movl %r14d, %edi
movl %ebp, %esi
callq 0x527e
pushq $0x5b
popq %rdi
callq 0x4040
movq 0x18(%r15), %rdx
movl %r14d, %edi
xorl %esi, %esi
callq 0x527e
pushq $0x5d
popq %rdi
callq 0x4040
jmp 0x5804
movq 0x38(%r15), %rdi
callq 0x59c8
jmp 0x5804
leaq 0x1d054(%rip), %rcx     # 0x22558
jmp 0x57f7
leaq 0x1d028(%rip), %rcx     # 0x22538
jmp 0x57f7
leaq 0x1d1e7(%rip), %rdi     # 0x22703
jmp 0x583c
movq 0x10(%r15), %r12
pushq $0x5b
popq %rdi
callq 0x4040
pushq $0xf
popq %r15
testq %r12, %r12
je 0x54e2
cmpl $0x0, (%r12)
jne 0x598a
movq 0x10(%r12), %rdx
movl %r14d, %edi
movl %r15d, %esi
callq 0x527e
movq 0x18(%r12), %r12
testq %r12, %r12
je 0x5531
callq 0x5c58
jmp 0x5531
movsd 0x30(%r15), %xmm0
leaq 0x1d125(%rip), %rdi     # 0x22694
movb $0x1, %al
callq 0x4120
jmp 0x5804
leaq 0x1cfce(%rip), %rcx     # 0x22550
jmp 0x57f7
leaq 0x1cfa6(%rip), %rcx     # 0x22534
jmp 0x569c
leaq 0x1d172(%rip), %rdi     # 0x2270c
jmp 0x583c
leaq 0x1cfa6(%rip), %rcx     # 0x2254c
jmp 0x57f7
leaq 0x1d13c(%rip), %rdi     # 0x226ee
jmp 0x583c
leaq 0x1cf7f(%rip), %rcx     # 0x2253d
jmp 0x57f7
leaq 0x26d65(%rip), %rdi     # 0x2c32f
jmp 0x583c
leaq 0x1cf48(%rip), %rcx     # 0x2251e
jmp 0x569c
leaq 0x1cf5e(%rip), %rcx     # 0x22540
jmp 0x57f7
movq 0x10(%r15), %rdx
movl %r14d, %edi
movl %ebp, %esi
callq 0x527e
leaq 0x1cf81(%rip), %rdi     # 0x2257d
callq 0x5115
movq 0x18(%r15), %rdx
jmp 0x57e4
testb %r12b, %r12b
je 0x5617
pushq $0x28
popq %rdi
callq 0x4040
leaq 0x1cea3(%rip), %rdi     # 0x224c1
callq 0x5115
movq 0x10(%r15), %rdx
movl %r14d, %edi
xorl %esi, %esi
callq 0x527e
pushq $0x28
popq %rdi
callq 0x4040
movq 0x18(%r15), %rsi
movl %r14d, %edi
callq 0x512e
pushq $0x29
popq %rdi
callq 0x4040
callq 0x5187
pushq $0x7b
popq %rdi
callq 0x4040
callq 0x5080
movq 0x20(%r15), %rsi
movl %r14d, %edi
callq 0x4b32
movl %r14d, %edi
callq 0x50ed
pushq $0x7d
popq %rdi
callq 0x4040
testb %r12b, %r12b
jne 0x541c
jmp 0x5804
leaq 0x1cecf(%rip), %rcx     # 0x2255f
jmp 0x57f7
leaq 0x1ce99(%rip), %rcx     # 0x22535
leaq 0x26524(%rip), %r8      # 0x2bbc7
movl %r14d, %edi
movl %ebp, %esi
movq %r15, %rdx
callq 0x5bd9
jmp 0x5804
leaq 0x1ce9a(%rip), %rcx     # 0x22556
jmp 0x57f7
movl %ebp, 0x8(%rsp)
movl %ebx, 0xc(%rsp)
movq 0x10(%r15), %r13
pushq $0x7b
popq %rdi
callq 0x4040
testq %r13, %r13
je 0x5843
callq 0x5080
leal 0x1(%r14), %r12d
movl %r12d, %edi
callq 0x50ed
jmp 0x5847
leaq 0x1ce58(%rip), %rcx     # 0x22553
jmp 0x57f7
movq 0x10(%r15), %rdx
movl %r14d, %edi
movl %ebp, %esi
callq 0x527e
pushq $0x2e
popq %rdi
callq 0x4040
movq 0x18(%r15), %rdx
movl %r14d, %edi
xorl %esi, %esi
jmp 0x57e9
leaq 0x1ce37(%rip), %rcx     # 0x22562
jmp 0x57f7
leaq 0x1ce14(%rip), %rcx     # 0x2254b
jmp 0x57f7
leaq 0x26484(%rip), %rcx     # 0x2bbc7
leaq 0x1cdea(%rip), %r8      # 0x22534
jmp 0x56a3
leaq 0x1ce21(%rip), %rcx     # 0x22577
jmp 0x57f7
leaq 0x1ce18(%rip), %rcx     # 0x2257a
jmp 0x57f7
leaq 0x1cdfd(%rip), %rcx     # 0x2256b
jmp 0x57f7
leaq 0x1cdee(%rip), %rcx     # 0x22568
jmp 0x57f7
leaq 0x1cdc2(%rip), %rcx     # 0x22545
jmp 0x57f7
leaq 0x1cdc3(%rip), %rcx     # 0x2254f
jmp 0x57f7
leaq 0x1cdad(%rip), %rcx     # 0x22542
jmp 0x57f7
leaq 0x1cdd1(%rip), %rcx     # 0x2256f
jmp 0x57f7
movq 0x10(%r15), %rdx
movl %r14d, %edi
movl %ebp, %esi
callq 0x527e
callq 0x5187
pushq $0x3f
popq %rdi
callq 0x4040
callq 0x5187
movq 0x18(%r15), %rdx
movl %r14d, %edi
movl %ebp, %esi
callq 0x527e
callq 0x5187
pushq $0x3a
popq %rdi
callq 0x4040
callq 0x5187
movq 0x20(%r15), %rdx
movl %r14d, %edi
movl %ebp, %esi
callq 0x527e
jmp 0x5804
leaq 0x1cd7d(%rip), %rcx     # 0x22574
movl %r14d, %edi
movl %ebp, %esi
movq %r15, %rdx
callq 0x5c13
cmpl %ebx, %ebp
jge 0x581e
pushq $0x29
popq %rdi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x4040
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movb $0x1, %r12b
jmp 0x5312
leaq 0x1cd4e(%rip), %rdi     # 0x2258a
callq 0x5115
jmp 0x5804
leal 0x1(%r14), %r12d
pushq $0x7b
popq %rbx
pushq $0x7d
popq %rbp
movq %r14, 0x10(%rsp)
testq %r13, %r13
je 0x5975
cmpl $0x0, (%r13)
jne 0x59a9
movq 0x10(%r13), %r15
movl (%r15), %eax
cmpl $0x10, %eax
je 0x58e9
cmpl $0xf, %eax
je 0x58c0
cmpl $0xe, %eax
jne 0x594c
movq 0x10(%r15), %rdx
movl %r12d, %edi
movl %ebp, %r14d
movl %ebx, %ebp
pushq $0xf
popq %rbx
movl %ebx, %esi
callq 0x527e
pushq $0x3a
popq %rdi
callq 0x4040
callq 0x5187
movq 0x18(%r15), %rdx
movl %r12d, %edi
movl %ebx, %esi
movl %ebp, %ebx
movl %r14d, %ebp
movq 0x10(%rsp), %r14
callq 0x527e
jmp 0x594c
leaq 0x1cd15(%rip), %rdi     # 0x225dc
callq 0x5115
movq 0x10(%r15), %rdx
movl %r12d, %edi
pushq $0xf
popq %rsi
callq 0x527e
leaq 0x25d14(%rip), %rdi     # 0x2b5f6
callq 0x5115
jmp 0x5920
leaq 0x1ccf1(%rip), %rdi     # 0x225e1
callq 0x5115
movq 0x10(%r15), %rdx
movl %r12d, %edi
pushq $0xf
popq %rsi
callq 0x527e
pushq $0x28
popq %rdi
callq 0x4040
movq 0x18(%r15), %rsi
movl %r12d, %edi
callq 0x512e
pushq $0x29
popq %rdi
callq 0x4040
callq 0x5187
movl %ebx, %edi
callq 0x4040
callq 0x5080
movq 0x20(%r15), %rsi
movl %r12d, %edi
callq 0x4b32
movl %r12d, %edi
callq 0x50ed
movl %ebp, %edi
callq 0x4040
movq 0x18(%r13), %r13
movl %r14d, %r15d
testq %r13, %r13
je 0x5963
pushq $0x2c
popq %rdi
callq 0x4040
movl %r12d, %r15d
callq 0x5080
movl %r15d, %edi
callq 0x50ed
jmp 0x5852
pushq $0x7d
popq %rdi
callq 0x4040
movl 0xc(%rsp), %ebx
movl 0x8(%rsp), %ebp
jmp 0x5804
leaq 0x1caf7(%rip), %rdi     # 0x22488
leaq 0x1cb07(%rip), %rsi     # 0x2249f
leaq 0x1cc47(%rip), %rcx     # 0x225e6
movl $0x145, %edx            # imm = 0x145
callq 0x4160
leaq 0x1cad8(%rip), %rdi     # 0x22488
leaq 0x1cae8(%rip), %rsi     # 0x2249f
leaq 0x1cc02(%rip), %rcx     # 0x225c0
movl $0x157, %edx            # imm = 0x157
callq 0x4160