// File: pranavmodx[P]modlang/src/../header/builtins.hpp
// Function: Pop(std::vector<Object*, std::allocator<Object*>>&)
Object *Pop(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 == STRING_OBJ)
	{
		if (((String *)obj)->value.empty())
			return new Error("error: cannot pop from empty string");
		((String *)obj)->value.pop_back();
		return __NULL;
	}

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

		((Array *)obj)->elements.pop_back();
		return __NULL;
	}

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

		((Stack *)obj)->elements.pop();
		return __NULL;
	}

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

		((Queue *)obj)->elements.pop();
		return __NULL;
	}

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

		((MaxHeap *)obj)->elements.pop();
		return __NULL;
	}

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

		((MinHeap *)obj)->elements.pop();
		return __NULL;
	}

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

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x260, %rsp            # imm = 0x260
movq %rdi, -0x10(%rbp)
movq -0x10(%rbp), %rdi
callq 0x373f0
cmpq $0x0, %rax
je 0x2ea7a
movl $0x28, %edi
callq 0x52a0
movq %rax, -0x1d0(%rbp)
movb $0x1, -0x7d(%rbp)
movq -0x10(%rbp), %rdi
callq 0x373f0
movq %rax, %rsi
leaq -0x70(%rbp), %rdi
callq 0x37410
jmp 0x2e99e
leaq 0x16f74(%rip), %rsi     # 0x45919
leaq -0x50(%rbp), %rdi
leaq -0x70(%rbp), %rdx
callq 0x1bde0
jmp 0x2e9b4
leaq 0x16f77(%rip), %rdx     # 0x45932
leaq -0x30(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x1bb10
jmp 0x2e9ca
movq -0x1d0(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x2b980
jmp 0x2e9dc
movq -0x1d0(%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 0x2f3fc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x2ea5c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x2ea53
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x2ea4a
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 0x2ea64
jmp 0x2ea75
movq -0x1d0(%rbp), %rdi
movl $0x28, %esi
callq 0x52b0
jmp 0x2f409
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 0x3894e(%rip), %rsi     # 0x67400
callq 0x16920
testb $0x1, %al
jne 0x2eabd
jmp 0x2ead7
movq -0x88(%rbp), %rax
movq %rax, -0x8(%rbp)
movl $0x1, -0xac(%rbp)
jmp 0x2f3e0
leaq -0xa8(%rbp), %rdi
leaq 0x3877b(%rip), %rsi     # 0x67260
callq 0x16920
testb $0x1, %al
jne 0x2eaf3
jmp 0x2ec34
movq -0x88(%rbp), %rdi
addq $0x8, %rdi
callq 0x5460
testb $0x1, %al
jne 0x2eb0c
jmp 0x2ec07
movl $0x28, %edi
callq 0x52a0
movq %rax, -0x1d8(%rbp)
jmp 0x2eb1f
movb $0x1, -0xd2(%rbp)
leaq -0xd1(%rbp), %rdi
movq %rdi, -0x1e0(%rbp)
callq 0x54a0
movq -0x1e0(%rbp), %rdx
leaq 0x16e8e(%rip), %rsi     # 0x459d5
leaq -0xd0(%rbp), %rdi
callq 0x134c0
jmp 0x2eb55
movq -0x1d8(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
callq 0x2b980
jmp 0x2eb6a
movq -0x1d8(%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 0x2f3e0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x2f3ee
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x2ebda
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 0x2ebf1
jmp 0x2ec02
movq -0x1d8(%rbp), %rdi
movl $0x28, %esi
callq 0x52b0
jmp 0x2f3ee
movq -0x88(%rbp), %rdi
addq $0x8, %rdi
callq 0x5330
leaq 0x379a2(%rip), %rax     # 0x665c0
movq (%rax), %rax
movq %rax, -0x8(%rbp)
movl $0x1, -0xac(%rbp)
jmp 0x2f3e0
leaq -0xa8(%rbp), %rdi
leaq 0x3865e(%rip), %rsi     # 0x672a0
callq 0x16920
testb $0x1, %al
jne 0x2ec50
jmp 0x2ed80
movq -0x88(%rbp), %rdi
addq $0x8, %rdi
callq 0x37820
testb $0x1, %al
jne 0x2ec69
jmp 0x2ed53
movl $0x28, %edi
callq 0x52a0
movq %rax, -0x1e8(%rbp)
jmp 0x2ec7c
movb $0x1, -0xfa(%rbp)
leaq -0xf9(%rbp), %rdi
movq %rdi, -0x1f0(%rbp)
callq 0x54a0
movq -0x1f0(%rbp), %rdx
leaq 0x16d55(%rip), %rsi     # 0x459f9
leaq -0xf8(%rbp), %rdi
callq 0x134c0
jmp 0x2ecb2
movq -0x1e8(%rbp), %rdi
leaq -0xf8(%rbp), %rsi
callq 0x2b980
jmp 0x2ecc7
movq -0x1e8(%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 0x2f3e0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x2ed26
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 0x2ed3d
jmp 0x2ed4e
movq -0x1e8(%rbp), %rdi
movl $0x28, %esi
callq 0x52b0
jmp 0x2f3ee
movq -0x88(%rbp), %rdi
addq $0x8, %rdi
callq 0x37860
leaq 0x37856(%rip), %rax     # 0x665c0
movq (%rax), %rax
movq %rax, -0x8(%rbp)
movl $0x1, -0xac(%rbp)
jmp 0x2f3e0
leaq -0xa8(%rbp), %rdi
leaq 0x38572(%rip), %rsi     # 0x67300
callq 0x16920
testb $0x1, %al
jne 0x2ed9c
jmp 0x2eedc
movq -0x88(%rbp), %rdi
addq $0x8, %rdi
callq 0x37890
movb %al, -0x1f1(%rbp)
jmp 0x2edb4
movb -0x1f1(%rbp), %al
testb $0x1, %al
jne 0x2edc3
jmp 0x2eead
movl $0x28, %edi
callq 0x52a0
movq %rax, -0x200(%rbp)
jmp 0x2edd6
movb $0x1, -0x122(%rbp)
leaq -0x121(%rbp), %rdi
movq %rdi, -0x208(%rbp)
callq 0x54a0
movq -0x208(%rbp), %rdx
leaq 0x16c1e(%rip), %rsi     # 0x45a1c
leaq -0x120(%rbp), %rdi
callq 0x134c0
jmp 0x2ee0c
movq -0x200(%rbp), %rdi
leaq -0x120(%rbp), %rsi
callq 0x2b980
jmp 0x2ee21
movq -0x200(%rbp), %rax
movb $0x0, -0x122(%rbp)
movq %rax, -0x8(%rbp)
leaq -0x120(%rbp), %rdi
callq 0x5518
leaq -0x121(%rbp), %rdi
callq 0x52f0
movl $0x1, -0xac(%rbp)
jmp 0x2f3e0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x2ee80
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x120(%rbp), %rdi
callq 0x5518
leaq -0x121(%rbp), %rdi
callq 0x52f0
testb $0x1, -0x122(%rbp)
jne 0x2ee97
jmp 0x2eea8
movq -0x200(%rbp), %rdi
movl $0x28, %esi
callq 0x52b0
jmp 0x2f3ee
movq -0x88(%rbp), %rdi
addq $0x8, %rdi
callq 0x378b0
jmp 0x2eebf
leaq 0x376fa(%rip), %rax     # 0x665c0
movq (%rax), %rax
movq %rax, -0x8(%rbp)
movl $0x1, -0xac(%rbp)
jmp 0x2f3e0
leaq -0xa8(%rbp), %rdi
leaq 0x38436(%rip), %rsi     # 0x67320
callq 0x16920
testb $0x1, %al
jne 0x2eef8
jmp 0x2f038
movq -0x88(%rbp), %rdi
addq $0x8, %rdi
callq 0x378d0
movb %al, -0x209(%rbp)
jmp 0x2ef10
movb -0x209(%rbp), %al
testb $0x1, %al
jne 0x2ef1f
jmp 0x2f009
movl $0x28, %edi
callq 0x52a0
movq %rax, -0x218(%rbp)
jmp 0x2ef32
movb $0x1, -0x14a(%rbp)
leaq -0x149(%rbp), %rdi
movq %rdi, -0x220(%rbp)
callq 0x54a0
movq -0x220(%rbp), %rdx
leaq 0x16ae5(%rip), %rsi     # 0x45a3f
leaq -0x148(%rbp), %rdi
callq 0x134c0
jmp 0x2ef68
movq -0x218(%rbp), %rdi
leaq -0x148(%rbp), %rsi
callq 0x2b980
jmp 0x2ef7d
movq -0x218(%rbp), %rax
movb $0x0, -0x14a(%rbp)
movq %rax, -0x8(%rbp)
leaq -0x148(%rbp), %rdi
callq 0x5518
leaq -0x149(%rbp), %rdi
callq 0x52f0
movl $0x1, -0xac(%rbp)
jmp 0x2f3e0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x2efdc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x148(%rbp), %rdi
callq 0x5518
leaq -0x149(%rbp), %rdi
callq 0x52f0
testb $0x1, -0x14a(%rbp)
jne 0x2eff3
jmp 0x2f004
movq -0x218(%rbp), %rdi
movl $0x28, %esi
callq 0x52b0
jmp 0x2f3ee
movq -0x88(%rbp), %rdi
addq $0x8, %rdi
callq 0x378f0
jmp 0x2f01b
leaq 0x3759e(%rip), %rax     # 0x665c0
movq (%rax), %rax
movq %rax, -0x8(%rbp)
movl $0x1, -0xac(%rbp)
jmp 0x2f3e0
leaq -0xa8(%rbp), %rdi
leaq 0x3831a(%rip), %rsi     # 0x67360
callq 0x16920
testb $0x1, %al
jne 0x2f054
jmp 0x2f194
movq -0x88(%rbp), %rdi
addq $0x28, %rdi
callq 0x37910
movb %al, -0x221(%rbp)
jmp 0x2f06c
movb -0x221(%rbp), %al
testb $0x1, %al
jne 0x2f07b
jmp 0x2f165
movl $0x28, %edi
callq 0x52a0
movq %rax, -0x230(%rbp)
jmp 0x2f08e
movb $0x1, -0x172(%rbp)
leaq -0x171(%rbp), %rdi
movq %rdi, -0x238(%rbp)
callq 0x54a0
movq -0x238(%rbp), %rdx
leaq 0x169ac(%rip), %rsi     # 0x45a62
leaq -0x170(%rbp), %rdi
callq 0x134c0
jmp 0x2f0c4
movq -0x230(%rbp), %rdi
leaq -0x170(%rbp), %rsi
callq 0x2b980
jmp 0x2f0d9
movq -0x230(%rbp), %rax
movb $0x0, -0x172(%rbp)
movq %rax, -0x8(%rbp)
leaq -0x170(%rbp), %rdi
callq 0x5518
leaq -0x171(%rbp), %rdi
callq 0x52f0
movl $0x1, -0xac(%rbp)
jmp 0x2f3e0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x2f138
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x170(%rbp), %rdi
callq 0x5518
leaq -0x171(%rbp), %rdi
callq 0x52f0
testb $0x1, -0x172(%rbp)
jne 0x2f14f
jmp 0x2f160
movq -0x230(%rbp), %rdi
movl $0x28, %esi
callq 0x52b0
jmp 0x2f3ee
movq -0x88(%rbp), %rdi
addq $0x28, %rdi
callq 0x37930
jmp 0x2f177
leaq 0x37442(%rip), %rax     # 0x665c0
movq (%rax), %rax
movq %rax, -0x8(%rbp)
movl $0x1, -0xac(%rbp)
jmp 0x2f3e0
leaq -0xa8(%rbp), %rdi
leaq 0x381de(%rip), %rsi     # 0x67380
callq 0x16920
testb $0x1, %al
jne 0x2f1b0
jmp 0x2f2f0
movq -0x88(%rbp), %rdi
addq $0x28, %rdi
callq 0x37980
movb %al, -0x239(%rbp)
jmp 0x2f1c8
movb -0x239(%rbp), %al
testb $0x1, %al
jne 0x2f1d7
jmp 0x2f2c1
movl $0x28, %edi
callq 0x52a0
movq %rax, -0x248(%rbp)
jmp 0x2f1ea
movb $0x1, -0x19a(%rbp)
leaq -0x199(%rbp), %rdi
movq %rdi, -0x250(%rbp)
callq 0x54a0
movq -0x250(%rbp), %rdx
leaq 0x16850(%rip), %rsi     # 0x45a62
leaq -0x198(%rbp), %rdi
callq 0x134c0
jmp 0x2f220
movq -0x248(%rbp), %rdi
leaq -0x198(%rbp), %rsi
callq 0x2b980
jmp 0x2f235
movq -0x248(%rbp), %rax
movb $0x0, -0x19a(%rbp)
movq %rax, -0x8(%rbp)
leaq -0x198(%rbp), %rdi
callq 0x5518
leaq -0x199(%rbp), %rdi
callq 0x52f0
movl $0x1, -0xac(%rbp)
jmp 0x2f3e0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x2f294
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x198(%rbp), %rdi
callq 0x5518
leaq -0x199(%rbp), %rdi
callq 0x52f0
testb $0x1, -0x19a(%rbp)
jne 0x2f2ab
jmp 0x2f2bc
movq -0x248(%rbp), %rdi
movl $0x28, %esi
callq 0x52b0
jmp 0x2f3ee
movq -0x88(%rbp), %rdi
addq $0x28, %rdi
callq 0x379a0
jmp 0x2f2d3
leaq 0x372e6(%rip), %rax     # 0x665c0
movq (%rax), %rax
movq %rax, -0x8(%rbp)
movl $0x1, -0xac(%rbp)
jmp 0x2f3e0
jmp 0x2f2f2
jmp 0x2f2f4
jmp 0x2f2f6
jmp 0x2f2f8
jmp 0x2f2fa
jmp 0x2f2fc
movl $0x28, %edi
callq 0x52a0
movq %rax, -0x258(%rbp)
jmp 0x2f30f
movb $0x1, -0x1c2(%rbp)
leaq -0x1c1(%rbp), %rdi
movq %rdi, -0x260(%rbp)
callq 0x54a0
movq -0x260(%rbp), %rdx
leaq 0x1674d(%rip), %rsi     # 0x45a84
leaq -0x1c0(%rbp), %rdi
callq 0x134c0
jmp 0x2f345
movq -0x258(%rbp), %rdi
leaq -0x1c0(%rbp), %rsi
callq 0x2b980
jmp 0x2f35a
movq -0x258(%rbp), %rax
movb $0x0, -0x1c2(%rbp)
movq %rax, -0x8(%rbp)
leaq -0x1c0(%rbp), %rdi
callq 0x5518
leaq -0x1c1(%rbp), %rdi
callq 0x52f0
movl $0x1, -0xac(%rbp)
jmp 0x2f3e0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x2f3b6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x1c0(%rbp), %rdi
callq 0x5518
leaq -0x1c1(%rbp), %rdi
callq 0x52f0
testb $0x1, -0x1c2(%rbp)
jne 0x2f3cd
jmp 0x2f3de
movq -0x258(%rbp), %rdi
movl $0x28, %esi
callq 0x52b0
jmp 0x2f3ee
leaq -0xa8(%rbp), %rdi
callq 0x5518
jmp 0x2f3fc
leaq -0xa8(%rbp), %rdi
callq 0x5518
jmp 0x2f409
movq -0x8(%rbp), %rax
addq $0x260, %rsp            # imm = 0x260
popq %rbp
retq
movq -0x78(%rbp), %rdi
callq 0x5490
nopw %cs:(%rax,%rax)