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

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

	if (type == ERROR_OBJ)
		return obj;

	else if (type == DEQUE_OBJ)
	{
		if (((Deque *)obj)->elements.empty())
			return new Error("error: cannot pop from empty deque");

		((Deque *)obj)->elements.pop_front();
		return __NULL;
	}

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

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x130, %rsp            # imm = 0x130
movq %rdi, -0x10(%rbp)
movq -0x10(%rbp), %rdi
callq 0x373f0
cmpq $0x0, %rax
je 0x2f54a
movl $0x28, %edi
callq 0x52a0
movq %rax, -0x108(%rbp)
movb $0x1, -0x7d(%rbp)
movq -0x10(%rbp), %rdi
callq 0x373f0
movq %rax, %rsi
leaq -0x70(%rbp), %rdi
callq 0x37410
jmp 0x2f46e
leaq 0x164a4(%rip), %rsi     # 0x45919
leaq -0x50(%rbp), %rdi
leaq -0x70(%rbp), %rdx
callq 0x1bde0
jmp 0x2f484
leaq 0x164a7(%rip), %rdx     # 0x45932
leaq -0x30(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x1bb10
jmp 0x2f49a
movq -0x108(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x2b980
jmp 0x2f4ac
movq -0x108(%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 0x2f806
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x2f52c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x2f523
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x2f51a
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 0x2f534
jmp 0x2f545
movq -0x108(%rbp), %rdi
movl $0x28, %esi
callq 0x52b0
jmp 0x2f813
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 0x37e7e(%rip), %rsi     # 0x67400
callq 0x16920
testb $0x1, %al
jne 0x2f58d
jmp 0x2f5a7
movq -0x88(%rbp), %rax
movq %rax, -0x8(%rbp)
movl $0x1, -0xac(%rbp)
jmp 0x2f7ea
leaq -0xa8(%rbp), %rdi
leaq 0x37d8b(%rip), %rsi     # 0x67340
callq 0x16920
testb $0x1, %al
jne 0x2f5c3
jmp 0x2f704
movq -0x88(%rbp), %rdi
addq $0x8, %rdi
callq 0x379f0
testb $0x1, %al
jne 0x2f5dc
jmp 0x2f6d7
movl $0x28, %edi
callq 0x52a0
movq %rax, -0x110(%rbp)
jmp 0x2f5ef
movb $0x1, -0xd2(%rbp)
leaq -0xd1(%rbp), %rdi
movq %rdi, -0x118(%rbp)
callq 0x54a0
movq -0x118(%rbp), %rdx
leaq 0x16491(%rip), %rsi     # 0x45aa8
leaq -0xd0(%rbp), %rdi
callq 0x134c0
jmp 0x2f625
movq -0x110(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
callq 0x2b980
jmp 0x2f63a
movq -0x110(%rbp), %rax
movb $0x0, -0xd2(%rbp)
movq %rax, -0x8(%rbp)
leaq -0xd0(%rbp), %rdi
callq 0x5518
leaq -0xd1(%rbp), %rdi
callq 0x52f0
movl $0x1, -0xac(%rbp)
jmp 0x2f7ea
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x2f7f8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x2f6aa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0xd0(%rbp), %rdi
callq 0x5518
leaq -0xd1(%rbp), %rdi
callq 0x52f0
testb $0x1, -0xd2(%rbp)
jne 0x2f6c1
jmp 0x2f6d2
movq -0x110(%rbp), %rdi
movl $0x28, %esi
callq 0x52b0
jmp 0x2f7f8
movq -0x88(%rbp), %rdi
addq $0x8, %rdi
callq 0x37a20
leaq 0x36ed2(%rip), %rax     # 0x665c0
movq (%rax), %rax
movq %rax, -0x8(%rbp)
movl $0x1, -0xac(%rbp)
jmp 0x2f7ea
jmp 0x2f706
movl $0x28, %edi
callq 0x52a0
movq %rax, -0x120(%rbp)
jmp 0x2f719
movb $0x1, -0xfa(%rbp)
leaq -0xf9(%rbp), %rdi
movq %rdi, -0x128(%rbp)
callq 0x54a0
movq -0x128(%rbp), %rdx
leaq 0x1638a(%rip), %rsi     # 0x45acb
leaq -0xf8(%rbp), %rdi
callq 0x134c0
jmp 0x2f74f
movq -0x120(%rbp), %rdi
leaq -0xf8(%rbp), %rsi
callq 0x2b980
jmp 0x2f764
movq -0x120(%rbp), %rax
movb $0x0, -0xfa(%rbp)
movq %rax, -0x8(%rbp)
leaq -0xf8(%rbp), %rdi
callq 0x5518
leaq -0xf9(%rbp), %rdi
callq 0x52f0
movl $0x1, -0xac(%rbp)
jmp 0x2f7ea
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x2f7c0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0xf8(%rbp), %rdi
callq 0x5518
leaq -0xf9(%rbp), %rdi
callq 0x52f0
testb $0x1, -0xfa(%rbp)
jne 0x2f7d7
jmp 0x2f7e8
movq -0x120(%rbp), %rdi
movl $0x28, %esi
callq 0x52b0
jmp 0x2f7f8
leaq -0xa8(%rbp), %rdi
callq 0x5518
jmp 0x2f806
leaq -0xa8(%rbp), %rdi
callq 0x5518
jmp 0x2f813
movq -0x8(%rbp), %rax
addq $0x130, %rsp            # imm = 0x130
popq %rbp
retq
movq -0x78(%rbp), %rdi
callq 0x5490
nopl (%rax)