// File: /workspace/github_c_makefile_star2_O3/ArtifexSoftware[P]mujs/./jscompile.c
// Function: ctrycatchfinally
static void ctrycatchfinally(JF, js_Ast *trystm, js_Ast *catchvar, js_Ast *catchstm, js_Ast *finallystm)
{
	int L1, L2, L3;
	L1 = emitjump(J, F, OP_TRY);
	{
		/* if we get here, we have caught an exception in the try block */
		L2 = emitjump(J, F, OP_TRY);
		{
			/* if we get here, we have caught an exception in the catch block */
			cstm(J, F, finallystm); /* inline finally block */
			emit(J, F, OP_THROW); /* rethrow exception */
		}
		label(J, F, L2);
		if (F->strict) {
			checkfutureword(J, F, catchvar);
			if (!strcmp(catchvar->string, "arguments"))
				jsC_error(J, catchvar, "redefining 'arguments' is not allowed in strict mode");
			if (!strcmp(catchvar->string, "eval"))
				jsC_error(J, catchvar, "redefining 'eval' is not allowed in strict mode");
		}
		emitline(J, F, catchvar);
		emitstring(J, F, OP_CATCH, catchvar->string);
		cstm(J, F, catchstm);
		emit(J, F, OP_ENDCATCH);
		emit(J, F, OP_ENDTRY);
		L3 = emitjump(J, F, OP_JUMP); /* skip past the try block to the finally block */
	}
	label(J, F, L1);
	cstm(J, F, trystm);
	emit(J, F, OP_ENDTRY);
	label(J, F, L3);
	cstm(J, F, finallystm);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %r9, %r14
movq %r8, %r13
movq %rcx, %rbp
movq %rdx, 0x10(%rsp)
movq %rsi, %r15
movq %rdi, %rbx
movl 0x5c(%rsi), %edx
callq 0x1d6ca
movq %rbx, %rdi
movq %r15, %rsi
movl $0x4a, %edx
callq 0x1d6ca
movslq 0x2c(%r15), %rax
movq %rax, 0x8(%rsp)
movq %rbx, %rdi
movq %r15, %rsi
xorl %edx, %edx
callq 0x1d6ca
movl 0x5c(%r15), %edx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x1d6ca
movq %rbx, %rdi
movq %r15, %rsi
movl $0x4a, %edx
callq 0x1d6ca
movslq 0x2c(%r15), %r12
movq %rbx, %rdi
movq %r15, %rsi
xorl %edx, %edx
callq 0x1d6ca
movq %rbx, %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0x1d733
movl 0x5c(%r15), %edx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x1d6ca
movq %rbx, %rdi
movq %r15, %rsi
movl $0x49, %edx
callq 0x1d6ca
movl 0x2c(%r15), %eax
cmpl $0x10000, %eax          # imm = 0x10000
jae 0x1f28c
movq 0x20(%r15), %rcx
movw %ax, (%rcx,%r12,2)
cmpl $0x0, 0x10(%r15)
je 0x1f17b
movq %rbx, %rdi
movq %r15, %rsi
movq %rbp, %rdx
callq 0x1d3df
movq 0x38(%rbp), %r12
leaq 0x14d78(%rip), %rsi     # 0x33ec4
movq %r12, %rdi
callq 0x32f0
testl %eax, %eax
je 0x1f29d
leaq 0x14da0(%rip), %rsi     # 0x33f03
movq %r12, %rdi
callq 0x32f0
testl %eax, %eax
jne 0x1f17f
leaq 0x14d92(%rip), %rdx     # 0x33f08
jmp 0x1f2a4
movq 0x38(%rbp), %r12
movl 0x4(%rbp), %eax
movl %eax, 0x5c(%r15)
movq %rbx, %rdi
movq %r15, %rsi
movl $0x4c, %edx
movq %r12, %rcx
callq 0x1f56f
movq %rbx, %rdi
movq %r15, %rsi
movq %r13, %rdx
callq 0x1d733
movl 0x5c(%r15), %edx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x1d6ca
movq %rbx, %rdi
movq %r15, %rsi
movl $0x4d, %edx
callq 0x1d6ca
movl 0x5c(%r15), %edx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x1d6ca
movq %rbx, %rdi
movq %r15, %rsi
movl $0x4b, %edx
callq 0x1d6ca
movl 0x5c(%r15), %edx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x1d6ca
movq %rbx, %rdi
movq %r15, %rsi
movl $0x51, %edx
callq 0x1d6ca
movslq 0x2c(%r15), %r12
movq %rbx, %rdi
movq %r15, %rsi
xorl %edx, %edx
callq 0x1d6ca
movl 0x2c(%r15), %eax
cmpl $0x10000, %eax          # imm = 0x10000
jae 0x1f28c
movq 0x20(%r15), %rcx
movq 0x8(%rsp), %rdx
movw %ax, (%rcx,%rdx,2)
movq %rbx, %rdi
movq %r15, %rsi
movq 0x10(%rsp), %rdx
callq 0x1d733
movl 0x5c(%r15), %edx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x1d6ca
movq %rbx, %rdi
movq %r15, %rsi
movl $0x4b, %edx
callq 0x1d6ca
movl 0x2c(%r15), %eax
cmpl $0x10000, %eax          # imm = 0x10000
jae 0x1f28c
movq 0x20(%r15), %rcx
movw %ax, (%rcx,%r12,2)
movq %rbx, %rdi
movq %r15, %rsi
movq %r14, %rdx
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x1d733
leaq 0x14ee7(%rip), %rsi     # 0x3417a
movq %rbx, %rdi
xorl %eax, %eax
callq 0xc952
leaq 0x14c2a(%rip), %rdx     # 0x33ece
movq %rbx, %rdi
movq %rbp, %rsi
xorl %eax, %eax
callq 0x8d38