// File: /workspace/github_c_makefile_star2_O0/ccxvii[P]mujs/./jsrun.c
// Function: js_call
void js_call(js_State *J, int n)
{
	js_Object *obj;
	int savebot;

	if (n < 0)
		js_rangeerror(J, "number of arguments cannot be negative");

	if (!js_iscallable(J, -n-2))
		js_typeerror(J, "%s is not callable", js_typeof(J, -n-2));

	obj = js_toobject(J, -n-2);

	savebot = BOT;
	BOT = TOP - n - 1;

	if (obj->type == JS_CFUNCTION) {
		jsR_pushtrace(J, obj->u.f.function->name, obj->u.f.function->filename, obj->u.f.function->line);
		if (obj->u.f.function->lightweight)
			jsR_calllwfunction(J, n, obj->u.f.function, obj->u.f.scope);
		else
			jsR_callfunction(J, n, obj->u.f.function, obj->u.f.scope);
		--J->tracetop;
	} else if (obj->type == JS_CSCRIPT) {
		jsR_pushtrace(J, obj->u.f.function->name, obj->u.f.function->filename, obj->u.f.function->line);
		jsR_callscript(J, n, obj->u.f.function, obj->u.f.scope);
		--J->tracetop;
	} else if (obj->type == JS_CCFUNCTION) {
		jsR_pushtrace(J, obj->u.c.name, "native", 0);
		jsR_callcfunction(J, n, obj->u.c.length, obj->u.c.function);
		--J->tracetop;
	}

	BOT = savebot;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x8(%rbp)
movl %esi, -0xc(%rbp)
cmpl $0x0, -0xc(%rbp)
jge 0x17ec7
movq -0x8(%rbp), %rdi
leaq 0x23fac(%rip), %rsi     # 0x3be6c
movb $0x0, %al
callq 0xbd10
movq -0x8(%rbp), %rdi
xorl %esi, %esi
subl -0xc(%rbp), %esi
subl $0x2, %esi
callq 0x15290
cmpl $0x0, %eax
jne 0x17f0b
movq -0x8(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x8(%rbp), %rdi
xorl %esi, %esi
subl -0xc(%rbp), %esi
subl $0x2, %esi
callq 0x15480
movq -0x28(%rbp), %rdi
movq %rax, %rdx
leaq 0x23f8f(%rip), %rsi     # 0x3be93
movb $0x0, %al
callq 0xbfe0
movq -0x8(%rbp), %rdi
xorl %esi, %esi
subl -0xc(%rbp), %esi
subl $0x2, %esi
callq 0x11760
movq %rax, -0x18(%rbp)
movq -0x8(%rbp), %rax
movl 0x144(%rax), %eax
movl %eax, -0x1c(%rbp)
movq -0x8(%rbp), %rax
movl 0x140(%rax), %ecx
subl -0xc(%rbp), %ecx
subl $0x1, %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x144(%rax)
movq -0x18(%rbp), %rax
cmpl $0x2, (%rax)
jne 0x17fdf
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rax
movq (%rax), %rsi
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x50(%rax), %rdx
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rax
movl 0x58(%rax), %ecx
callq 0x180b0
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rax
cmpl $0x0, 0xc(%rax)
je 0x17fab
movq -0x8(%rbp), %rdi
movl -0xc(%rbp), %esi
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rdx
movq -0x18(%rbp), %rax
movq 0x28(%rax), %rcx
callq 0x18170
jmp 0x17fc7
movq -0x8(%rbp), %rdi
movl -0xc(%rbp), %esi
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rdx
movq -0x18(%rbp), %rax
movq 0x28(%rax), %rcx
callq 0x18250
movq -0x8(%rbp), %rax
movl 0x2190(%rax), %ecx
addl $-0x1, %ecx
movl %ecx, 0x2190(%rax)
jmp 0x18099
movq -0x18(%rbp), %rax
cmpl $0x3, (%rax)
jne 0x18044
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rax
movq (%rax), %rsi
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x50(%rax), %rdx
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rax
movl 0x58(%rax), %ecx
callq 0x180b0
movq -0x8(%rbp), %rdi
movl -0xc(%rbp), %esi
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rdx
movq -0x18(%rbp), %rax
movq 0x28(%rax), %rcx
callq 0x18480
movq -0x8(%rbp), %rax
movl 0x2190(%rax), %ecx
addl $-0x1, %ecx
movl %ecx, 0x2190(%rax)
jmp 0x18097
movq -0x18(%rbp), %rax
cmpl $0x4, (%rax)
jne 0x18095
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rsi
leaq 0x23e46(%rip), %rdx     # 0x3bea6
xorl %ecx, %ecx
callq 0x180b0
movq -0x8(%rbp), %rdi
movl -0xc(%rbp), %esi
movq -0x18(%rbp), %rax
movl 0x38(%rax), %edx
movq -0x18(%rbp), %rax
movq 0x28(%rax), %rcx
callq 0x185a0
movq -0x8(%rbp), %rax
movl 0x2190(%rax), %ecx
addl $-0x1, %ecx
movl %ecx, 0x2190(%rax)
jmp 0x18097
jmp 0x18099
movl -0x1c(%rbp), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x144(%rax)
addq $0x30, %rsp
popq %rbp
retq
nopl (%rax)