// File: pranavmodx[P]modlang/src/../header/builtins.hpp
// Function: Size(std::vector<Object*, std::allocator<Object*>>&)
Object *Size(std::vector<Object *> &objs)
{
	if (objs.size() != 1)
		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 == HASHSET_OBJ)
		return new Integer(((HashSet *)obj)->pairs.size());

	else if (type == STACK_OBJ)
		return new Integer(((Stack *)obj)->elements.size());

	else if (type == QUEUE_OBJ)
		return new Integer(((Queue *)obj)->elements.size());

	else if (type == DEQUE_OBJ)
		return new Integer(((Deque *)obj)->elements.size());

	else if (type == MAXHEAP_OBJ)
		return new Integer(((MaxHeap *)obj)->elements.size());

	else if (type == MINHEAP_OBJ)
		return new Integer(((MinHeap *)obj)->elements.size());

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

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x140, %rsp            # imm = 0x140
movq %rdi, -0x10(%rbp)
movq -0x10(%rbp), %rdi
callq 0x373f0
cmpq $0x1, %rax
je 0x2d3ba
movl $0x28, %edi
callq 0x52a0
movq %rax, -0xe0(%rbp)
movb $0x1, -0x7d(%rbp)
movq -0x10(%rbp), %rdi
callq 0x373f0
movq %rax, %rsi
leaq -0x70(%rbp), %rdi
callq 0x37410
jmp 0x2d2de
leaq 0x18634(%rip), %rsi     # 0x45919
leaq -0x50(%rbp), %rdi
leaq -0x70(%rbp), %rdx
callq 0x1bde0
jmp 0x2d2f4
leaq 0x18637(%rip), %rdx     # 0x45932
leaq -0x30(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x1bb10
jmp 0x2d30a
movq -0xe0(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x2b980
jmp 0x2d31c
movq -0xe0(%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 0x2d8a7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x2d39c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x2d393
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x2d38a
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 0x2d3a4
jmp 0x2d3b5
movq -0xe0(%rbp), %rdi
movl $0x28, %esi
callq 0x52b0
jmp 0x2d8b4
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 0x3a00e(%rip), %rsi     # 0x67400
callq 0x16920
testb $0x1, %al
jne 0x2d3fd
jmp 0x2d417
movq -0x88(%rbp), %rax
movq %rax, -0x8(%rbp)
movl $0x1, -0xac(%rbp)
jmp 0x2d88b
leaq -0xa8(%rbp), %rdi
leaq 0x39ebb(%rip), %rsi     # 0x672e0
callq 0x16920
testb $0x1, %al
jne 0x2d433
jmp 0x2d4b3
movl $0x10, %edi
callq 0x52a0
movq %rax, -0xe8(%rbp)
jmp 0x2d446
movq -0x88(%rbp), %rdi
addq $0x8, %rdi
callq 0x37580
movq -0xe8(%rbp), %rdi
movl %eax, %esi
callq 0x37510
jmp 0x2d466
movq -0xe8(%rbp), %rax
movq %rax, -0x8(%rbp)
movl $0x1, -0xac(%rbp)
jmp 0x2d88b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x2d899
movq -0xe8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
movl $0x10, %esi
callq 0x52b0
jmp 0x2d899
leaq -0xa8(%rbp), %rdi
leaq 0x39e3f(%rip), %rsi     # 0x67300
callq 0x16920
testb $0x1, %al
jne 0x2d4cc
jmp 0x2d54b
movl $0x10, %edi
callq 0x52a0
movq %rax, -0xf0(%rbp)
jmp 0x2d4df
movq -0x88(%rbp), %rdi
addq $0x8, %rdi
callq 0x375a0
movq %rax, -0xf8(%rbp)
jmp 0x2d4f8
movq -0xf0(%rbp), %rdi
movq -0xf8(%rbp), %rax
movl %eax, %esi
callq 0x37510
jmp 0x2d50f
movq -0xf0(%rbp), %rax
movq %rax, -0x8(%rbp)
movl $0x1, -0xac(%rbp)
jmp 0x2d88b
movq -0xf0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
movl $0x10, %esi
callq 0x52b0
jmp 0x2d899
leaq -0xa8(%rbp), %rdi
leaq 0x39dc7(%rip), %rsi     # 0x67320
callq 0x16920
testb $0x1, %al
jne 0x2d564
jmp 0x2d5e3
movl $0x10, %edi
callq 0x52a0
movq %rax, -0x100(%rbp)
jmp 0x2d577
movq -0x88(%rbp), %rdi
addq $0x8, %rdi
callq 0x375c0
movq %rax, -0x108(%rbp)
jmp 0x2d590
movq -0x100(%rbp), %rdi
movq -0x108(%rbp), %rax
movl %eax, %esi
callq 0x37510
jmp 0x2d5a7
movq -0x100(%rbp), %rax
movq %rax, -0x8(%rbp)
movl $0x1, -0xac(%rbp)
jmp 0x2d88b
movq -0x100(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
movl $0x10, %esi
callq 0x52b0
jmp 0x2d899
leaq -0xa8(%rbp), %rdi
leaq 0x39d4f(%rip), %rsi     # 0x67340
callq 0x16920
testb $0x1, %al
jne 0x2d5fc
jmp 0x2d66b
movl $0x10, %edi
callq 0x52a0
movq %rax, -0x110(%rbp)
jmp 0x2d60f
movq -0x88(%rbp), %rdi
addq $0x8, %rdi
callq 0x375e0
movq -0x110(%rbp), %rdi
movl %eax, %esi
callq 0x37510
jmp 0x2d62f
movq -0x110(%rbp), %rax
movq %rax, -0x8(%rbp)
movl $0x1, -0xac(%rbp)
jmp 0x2d88b
movq -0x110(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
movl $0x10, %esi
callq 0x52b0
jmp 0x2d899
leaq -0xa8(%rbp), %rdi
leaq 0x39ce7(%rip), %rsi     # 0x67360
callq 0x16920
testb $0x1, %al
jne 0x2d684
jmp 0x2d703
movl $0x10, %edi
callq 0x52a0
movq %rax, -0x118(%rbp)
jmp 0x2d697
movq -0x88(%rbp), %rdi
addq $0x28, %rdi
callq 0x37610
movq %rax, -0x120(%rbp)
jmp 0x2d6b0
movq -0x118(%rbp), %rdi
movq -0x120(%rbp), %rax
movl %eax, %esi
callq 0x37510
jmp 0x2d6c7
movq -0x118(%rbp), %rax
movq %rax, -0x8(%rbp)
movl $0x1, -0xac(%rbp)
jmp 0x2d88b
movq -0x118(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
movl $0x10, %esi
callq 0x52b0
jmp 0x2d899
leaq -0xa8(%rbp), %rdi
leaq 0x39c6f(%rip), %rsi     # 0x67380
callq 0x16920
testb $0x1, %al
jne 0x2d71c
jmp 0x2d79b
movl $0x10, %edi
callq 0x52a0
movq %rax, -0x128(%rbp)
jmp 0x2d72f
movq -0x88(%rbp), %rdi
addq $0x28, %rdi
callq 0x37630
movq %rax, -0x130(%rbp)
jmp 0x2d748
movq -0x128(%rbp), %rdi
movq -0x130(%rbp), %rax
movl %eax, %esi
callq 0x37510
jmp 0x2d75f
movq -0x128(%rbp), %rax
movq %rax, -0x8(%rbp)
movl $0x1, -0xac(%rbp)
jmp 0x2d88b
movq -0x128(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
movl $0x10, %esi
callq 0x52b0
jmp 0x2d899
jmp 0x2d79d
jmp 0x2d79f
jmp 0x2d7a1
jmp 0x2d7a3
jmp 0x2d7a5
jmp 0x2d7a7
movl $0x28, %edi
callq 0x52a0
movq %rax, -0x138(%rbp)
jmp 0x2d7ba
movb $0x1, -0xd2(%rbp)
leaq -0xd1(%rbp), %rdi
movq %rdi, -0x140(%rbp)
callq 0x54a0
movq -0x140(%rbp), %rdx
leaq 0x18174(%rip), %rsi     # 0x45956
leaq -0xd0(%rbp), %rdi
callq 0x134c0
jmp 0x2d7f0
movq -0x138(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
callq 0x2b980
jmp 0x2d805
movq -0x138(%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 0x2d88b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x2d861
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 0x2d878
jmp 0x2d889
movq -0x138(%rbp), %rdi
movl $0x28, %esi
callq 0x52b0
jmp 0x2d899
leaq -0xa8(%rbp), %rdi
callq 0x5518
jmp 0x2d8a7
leaq -0xa8(%rbp), %rdi
callq 0x5518
jmp 0x2d8b4
movq -0x8(%rbp), %rax
addq $0x140, %rsp            # imm = 0x140
popq %rbp
retq
movq -0x78(%rbp), %rdi
callq 0x5490
nopl (%rax)