// File: pranavmodx[P]modlang/src/../header/builtins.hpp
// Function: Push_Front(std::vector<Object*, std::allocator<Object*>>&)
Object *Push_Front(std::vector<Object *> &objs)
{
	if (objs.size() != 2)
		return new Error("error: argument length (" + std::to_string(objs.size()) + ") not equal to parameter length (2)\n");

	Object *obj = objs[0];
	const ObjectType type = obj->type();

	if (type == ERROR_OBJ)
		return obj;

	if (objs[1]->type() == ERROR_OBJ)
		return objs[1];

	else if (type == DEQUE_OBJ)
	{
		((Deque *)obj)->elements.push_front(objs[1]);
		return __NULL;
	}

	return new Error("error: unsupported object for push()");
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x120, %rsp            # imm = 0x120
movq %rdi, -0x10(%rbp)
movq -0x10(%rbp), %rdi
callq 0x373f0
cmpq $0x2, %rax
je 0x2e35a
movl $0x28, %edi
callq 0x52a0
movq %rax, -0x100(%rbp)
movb $0x1, -0x7d(%rbp)
movq -0x10(%rbp), %rdi
callq 0x373f0
movq %rax, %rsi
leaq -0x70(%rbp), %rdi
callq 0x37410
jmp 0x2e27e
leaq 0x17694(%rip), %rsi     # 0x45919
leaq -0x50(%rbp), %rdi
leaq -0x70(%rbp), %rdx
callq 0x1bde0
jmp 0x2e294
leaq 0x176df(%rip), %rdx     # 0x4597a
leaq -0x30(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x1bb10
jmp 0x2e2aa
movq -0x100(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x2b980
jmp 0x2e2bc
movq -0x100(%rbp), %rax
movb $0x0, -0x7d(%rbp)
movq %rax, -0x8(%rbp)
leaq -0x30(%rbp), %rdi
callq 0x5518
leaq -0x50(%rbp), %rdi
callq 0x5518
leaq -0x70(%rbp), %rdi
callq 0x5518
jmp 0x2e5a8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x2e33c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x2e333
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x2e32a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x30(%rbp), %rdi
callq 0x5518
leaq -0x50(%rbp), %rdi
callq 0x5518
leaq -0x70(%rbp), %rdi
callq 0x5518
testb $0x1, -0x7d(%rbp)
jne 0x2e344
jmp 0x2e355
movq -0x100(%rbp), %rdi
movl $0x28, %esi
callq 0x52b0
jmp 0x2e5b5
movq -0x10(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x374f0
movq (%rax), %rax
movq %rax, -0x88(%rbp)
movq -0x88(%rbp), %rsi
movq (%rsi), %rax
leaq -0xa8(%rbp), %rdi
callq *(%rax)
leaq -0xa8(%rbp), %rdi
leaq 0x3906e(%rip), %rsi     # 0x67400
callq 0x16920
testb $0x1, %al
jne 0x2e39d
jmp 0x2e3b7
movq -0x88(%rbp), %rax
movq %rax, -0x8(%rbp)
movl $0x1, -0xac(%rbp)
jmp 0x2e58c
movq -0x10(%rbp), %rdi
movl $0x1, %esi
callq 0x374f0
movq (%rax), %rsi
movq (%rsi), %rax
movq (%rax), %rax
leaq -0xd0(%rbp), %rdi
callq *%rax
jmp 0x2e3d9
leaq -0xd0(%rbp), %rdi
leaq 0x39019(%rip), %rsi     # 0x67400
callq 0x16920
movb %al, -0x101(%rbp)
leaq -0xd0(%rbp), %rdi
callq 0x5518
movb -0x101(%rbp), %al
testb $0x1, %al
jne 0x2e40a
jmp 0x2e43f
movq -0x10(%rbp), %rdi
movl $0x1, %esi
callq 0x374f0
movq (%rax), %rax
movq %rax, -0x8(%rbp)
movl $0x1, -0xac(%rbp)
jmp 0x2e58c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x2e59a
leaq -0xa8(%rbp), %rdi
leaq 0x38ef3(%rip), %rsi     # 0x67340
callq 0x16920
testb $0x1, %al
jne 0x2e458
jmp 0x2e4a6
movq -0x88(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x110(%rbp)
movq -0x10(%rbp), %rdi
movl $0x1, %esi
callq 0x374f0
movq -0x110(%rbp), %rdi
movq %rax, %rsi
callq 0x377c0
jmp 0x2e489
leaq 0x38130(%rip), %rax     # 0x665c0
movq (%rax), %rax
movq %rax, -0x8(%rbp)
movl $0x1, -0xac(%rbp)
jmp 0x2e58c
jmp 0x2e4a8
movl $0x28, %edi
callq 0x52a0
movq %rax, -0x118(%rbp)
jmp 0x2e4bb
movb $0x1, -0xf2(%rbp)
leaq -0xf1(%rbp), %rdi
movq %rdi, -0x120(%rbp)
callq 0x54a0
movq -0x120(%rbp), %rdx
leaq 0x174cd(%rip), %rsi     # 0x459b0
leaq -0xf0(%rbp), %rdi
callq 0x134c0
jmp 0x2e4f1
movq -0x118(%rbp), %rdi
leaq -0xf0(%rbp), %rsi
callq 0x2b980
jmp 0x2e506
movq -0x118(%rbp), %rax
movb $0x0, -0xf2(%rbp)
movq %rax, -0x8(%rbp)
leaq -0xf0(%rbp), %rdi
callq 0x5518
leaq -0xf1(%rbp), %rdi
callq 0x52f0
movl $0x1, -0xac(%rbp)
jmp 0x2e58c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x2e562
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0xf0(%rbp), %rdi
callq 0x5518
leaq -0xf1(%rbp), %rdi
callq 0x52f0
testb $0x1, -0xf2(%rbp)
jne 0x2e579
jmp 0x2e58a
movq -0x118(%rbp), %rdi
movl $0x28, %esi
callq 0x52b0
jmp 0x2e59a
leaq -0xa8(%rbp), %rdi
callq 0x5518
jmp 0x2e5a8
leaq -0xa8(%rbp), %rdi
callq 0x5518
jmp 0x2e5b5
movq -0x8(%rbp), %rax
addq $0x120, %rsp            # imm = 0x120
popq %rbp
retq
movq -0x78(%rbp), %rdi
callq 0x5490
nop