// File: Eronana[P]strawberry/src/vm.cpp
// Function: VirtualMachine::F_OBJECT_GET()
DEF_FUNC(OBJECT_GET)
{
    switch(reg_this.type)
    {
        case T_STRING:
            if(STOP.type==T_STRING)
            {
                object_proto_get("String",STOP.toString(),STOP);
                if(STOP.type!=T_NULL)break;
            }
            if(isnumber(STOP.toString()))
            {
                array_last_index=STOP.toInt();
                if(array_last_index>=0&&array_last_index<reg_this.v_string->length())
                {
                    STOP.type=T_STRING;
                    STOP.v_string=newString();
                    *STOP.v_string=(*reg_this.v_string)[array_last_index];
                    break;
                }
            }
            STOP.setNull();
            break;
        case T_ARRAY:
            if(STOP.type==T_STRING)
            {
                object_proto_get("Array",STOP.toString(),STOP);
                if(STOP.type!=T_NULL)break;
            }
            if(isnumber(STOP.toString()))
            {
                array_last_index=STOP.toInt();
                if(array_last_index>=0&&array_last_index<reg_this.v_array->size())
                {
                    STOP=(*reg_this.v_array)[array_last_index];
                    break;
                }
            }
            STOP.setNull();
            break;
        case T_OBJECT:
            array_last_index=-1;
            object_last_key=STOP.toString();
            object_get(reg_this,object_last_key,STOP);
            break;
        case T_INT:
            object_proto_get("Int",STOP.toString(),STOP);
            break;
        case T_FLOAT:
            object_proto_get("Float",STOP.toString(),STOP);
            break;
        case T_BOOL:
            object_proto_get("Bool",STOP.toString(),STOP);
            break;
        case T_FUNCTION:
            if(reg_this.type==T_FUNCTION&&STOP.toString()=="prototype")
            {
                STOP.type=T_OBJECT;
                STOP.v_object=reg_this.v_function.prototype;
                break;
            }
        case T_NATIVE_FUNCTION:
            object_proto_get("Function",STOP.toString(),STOP);
            break;
        default:
            STOP.setNull();
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x360, %rsp            # imm = 0x360
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x260(%rbp)
movl 0x468(%rax), %eax
decl %eax
movl %eax, %ecx
movq %rcx, -0x258(%rbp)
subl $0x7, %eax
ja 0xc942
movq -0x258(%rbp), %rax
leaq 0x4c2e6(%rip), %rcx     # 0x58108
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x260(%rbp), %rdi
addq $0x68, %rdi
xorl %esi, %esi
callq 0xf6f0
cmpl $0x4, (%rax)
jne 0xbf55
leaq -0x29(%rbp), %rdi
movq %rdi, -0x268(%rbp)
callq 0x75f0
movq -0x268(%rbp), %rdx
leaq 0x4c2d8(%rip), %rsi     # 0x5813c
leaq -0x28(%rbp), %rdi
callq 0xf990
jmp 0xbe6f
movq -0x260(%rbp), %rdi
addq $0x68, %rdi
xorl %esi, %esi
callq 0xf6f0
movq %rax, -0x270(%rbp)
jmp 0xbe8a
movq -0x270(%rbp), %rsi
leaq -0x60(%rbp), %rdi
callq 0x15770
jmp 0xbe9c
movq -0x260(%rbp), %rdi
addq $0x68, %rdi
xorl %esi, %esi
callq 0xf6f0
movq %rax, -0x278(%rbp)
jmp 0xbeb7
movq -0x278(%rbp), %rcx
movq -0x260(%rbp), %rdi
leaq -0x28(%rbp), %rsi
leaq -0x60(%rbp), %rdx
callq 0xbc70
jmp 0xbed4
leaq -0x60(%rbp), %rdi
callq 0x71d0
leaq -0x28(%rbp), %rdi
callq 0x71d0
leaq -0x29(%rbp), %rdi
callq 0x7310
movq -0x260(%rbp), %rdi
addq $0x68, %rdi
xorl %esi, %esi
callq 0xf6f0
cmpl $0x0, (%rax)
je 0xbf53
jmp 0xc95c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0xbf45
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0xbf3c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x60(%rbp), %rdi
callq 0x71d0
leaq -0x28(%rbp), %rdi
callq 0x71d0
leaq -0x29(%rbp), %rdi
callq 0x7310
jmp 0xc965
jmp 0xbf55
movq -0x260(%rbp), %rdi
addq $0x68, %rdi
xorl %esi, %esi
callq 0xf6f0
movq %rax, %rsi
leaq -0x80(%rbp), %rdi
callq 0x15770
leaq -0x80(%rbp), %rdi
callq 0xbd60
movb %al, -0x279(%rbp)
leaq -0x80(%rbp), %rdi
callq 0x71d0
movb -0x279(%rbp), %al
testb $0x1, %al
jne 0xbf9a
jmp 0xc098
movq -0x260(%rbp), %rdi
addq $0x68, %rdi
xorl %esi, %esi
callq 0xf6f0
movq %rax, %rdi
callq 0x15640
movl %eax, %ecx
movq -0x260(%rbp), %rax
movl %ecx, 0x4d8(%rax)
cmpl $0x0, 0x4d8(%rax)
jl 0xc096
movq -0x260(%rbp), %rax
movslq 0x4d8(%rax), %rcx
movq %rcx, -0x288(%rbp)
movq 0x470(%rax), %rdi
callq 0x74f0
movq %rax, %rcx
movq -0x288(%rbp), %rax
cmpq %rcx, %rax
jae 0xc096
movq -0x260(%rbp), %rdi
addq $0x68, %rdi
xorl %esi, %esi
callq 0xf6f0
movl $0x4, (%rax)
callq 0x21520
movq -0x260(%rbp), %rdi
movq %rax, -0x298(%rbp)
addq $0x68, %rdi
xorl %esi, %esi
callq 0xf6f0
movq -0x298(%rbp), %rdx
movq %rax, %rcx
movq -0x260(%rbp), %rax
movq %rdx, 0x8(%rcx)
movq 0x470(%rax), %rdi
movslq 0x4d8(%rax), %rsi
callq 0x7660
movq -0x260(%rbp), %rdi
movb (%rax), %al
movb %al, -0x289(%rbp)
addq $0x68, %rdi
xorl %esi, %esi
callq 0xf6f0
movq %rax, %rcx
movb -0x289(%rbp), %al
movq 0x8(%rcx), %rdi
movsbl %al, %esi
callq 0x7590
jmp 0xc95c
jmp 0xc098
movq -0x260(%rbp), %rdi
addq $0x68, %rdi
xorl %esi, %esi
callq 0xf6f0
movq %rax, %rdi
callq 0x15ac0
jmp 0xc95c
movq -0x260(%rbp), %rdi
addq $0x68, %rdi
xorl %esi, %esi
callq 0xf6f0
cmpl $0x4, (%rax)
jne 0xc202
leaq -0xa1(%rbp), %rdi
movq %rdi, -0x2a0(%rbp)
callq 0x75f0
movq -0x2a0(%rbp), %rdx
leaq 0x4c050(%rip), %rsi     # 0x58143
leaq -0xa0(%rbp), %rdi
callq 0xf990
jmp 0xc101
movq -0x260(%rbp), %rdi
addq $0x68, %rdi
xorl %esi, %esi
callq 0xf6f0
movq %rax, -0x2a8(%rbp)
jmp 0xc11c
movq -0x2a8(%rbp), %rsi
leaq -0xc8(%rbp), %rdi
callq 0x15770
jmp 0xc131
movq -0x260(%rbp), %rdi
addq $0x68, %rdi
xorl %esi, %esi
callq 0xf6f0
movq %rax, -0x2b0(%rbp)
jmp 0xc14c
movq -0x2b0(%rbp), %rcx
movq -0x260(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
leaq -0xc8(%rbp), %rdx
callq 0xbc70
jmp 0xc16f
leaq -0xc8(%rbp), %rdi
callq 0x71d0
leaq -0xa0(%rbp), %rdi
callq 0x71d0
leaq -0xa1(%rbp), %rdi
callq 0x7310
movq -0x260(%rbp), %rdi
addq $0x68, %rdi
xorl %esi, %esi
callq 0xf6f0
cmpl $0x0, (%rax)
je 0xc200
jmp 0xc95c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0xc1ef
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0xc1e3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0xc8(%rbp), %rdi
callq 0x71d0
leaq -0xa0(%rbp), %rdi
callq 0x71d0
leaq -0xa1(%rbp), %rdi
callq 0x7310
jmp 0xc965
jmp 0xc202
movq -0x260(%rbp), %rdi
addq $0x68, %rdi
xorl %esi, %esi
callq 0xf6f0
movq %rax, %rsi
leaq -0xe8(%rbp), %rdi
callq 0x15770
leaq -0xe8(%rbp), %rdi
callq 0xbd60
movb %al, -0x2b1(%rbp)
leaq -0xe8(%rbp), %rdi
callq 0x71d0
movb -0x2b1(%rbp), %al
testb $0x1, %al
jne 0xc250
jmp 0xc315
movq -0x260(%rbp), %rdi
addq $0x68, %rdi
xorl %esi, %esi
callq 0xf6f0
movq %rax, %rdi
callq 0x15640
movl %eax, %ecx
movq -0x260(%rbp), %rax
movl %ecx, 0x4d8(%rax)
cmpl $0x0, 0x4d8(%rax)
jl 0xc313
movq -0x260(%rbp), %rax
movslq 0x4d8(%rax), %rcx
movq %rcx, -0x2c0(%rbp)
movq 0x470(%rax), %rdi
callq 0xfc10
movq %rax, %rcx
movq -0x2c0(%rbp), %rax
cmpq %rcx, %rax
jae 0xc313
movq -0x260(%rbp), %rax
movq 0x470(%rax), %rdi
movslq 0x4d8(%rax), %rsi
callq 0xf750
movq -0x260(%rbp), %rdi
movq %rax, -0x2c8(%rbp)
addq $0x68, %rdi
xorl %esi, %esi
callq 0xf6f0
movq -0x2c8(%rbp), %rcx
movq (%rcx), %rdx
movq %rdx, (%rax)
movq 0x8(%rcx), %rdx
movq %rdx, 0x8(%rax)
movq 0x10(%rcx), %rdx
movq %rdx, 0x10(%rax)
movq 0x18(%rcx), %rcx
movq %rcx, 0x18(%rax)
jmp 0xc95c
jmp 0xc315
movq -0x260(%rbp), %rdi
addq $0x68, %rdi
xorl %esi, %esi
callq 0xf6f0
movq %rax, %rdi
callq 0x15ac0
jmp 0xc95c
movq -0x260(%rbp), %rdi
movl $0xffffffff, 0x4d8(%rdi) # imm = 0xFFFFFFFF
addq $0x68, %rdi
xorl %esi, %esi
callq 0xf6f0
movq %rax, %rsi
leaq -0x108(%rbp), %rdi
callq 0x15770
movq -0x260(%rbp), %rdi
addq $0x4e0, %rdi            # imm = 0x4E0
leaq -0x108(%rbp), %rsi
callq 0x73c0
leaq -0x108(%rbp), %rdi
callq 0x71d0
movq -0x260(%rbp), %rdi
movq %rdi, %rax
addq $0x468, %rax            # imm = 0x468
movq %rax, -0x2d8(%rbp)
movq %rdi, %rax
addq $0x4e0, %rax            # imm = 0x4E0
movq %rax, -0x2d0(%rbp)
addq $0x68, %rdi
xorl %esi, %esi
callq 0xf6f0
movq -0x2d8(%rbp), %rdi
movq -0x2d0(%rbp), %rsi
movq %rax, %rdx
callq 0xbbc0
jmp 0xc95c
leaq -0x129(%rbp), %rdi
movq %rdi, -0x2e0(%rbp)
callq 0x75f0
movq -0x2e0(%rbp), %rdx
leaq 0x4bd3f(%rip), %rsi     # 0x58132
leaq -0x128(%rbp), %rdi
callq 0xf990
jmp 0xc401
movq -0x260(%rbp), %rdi
addq $0x68, %rdi
xorl %esi, %esi
callq 0xf6f0
movq %rax, -0x2e8(%rbp)
jmp 0xc41c
movq -0x2e8(%rbp), %rsi
leaq -0x150(%rbp), %rdi
callq 0x15770
jmp 0xc431
movq -0x260(%rbp), %rdi
addq $0x68, %rdi
xorl %esi, %esi
callq 0xf6f0
movq %rax, -0x2f0(%rbp)
jmp 0xc44c
movq -0x2f0(%rbp), %rcx
movq -0x260(%rbp), %rdi
leaq -0x128(%rbp), %rsi
leaq -0x150(%rbp), %rdx
callq 0xbc70
jmp 0xc46f
leaq -0x150(%rbp), %rdi
callq 0x71d0
leaq -0x128(%rbp), %rdi
callq 0x71d0
leaq -0x129(%rbp), %rdi
callq 0x7310
jmp 0xc95c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0xc4d8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0xc4cc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x150(%rbp), %rdi
callq 0x71d0
leaq -0x128(%rbp), %rdi
callq 0x71d0
leaq -0x129(%rbp), %rdi
callq 0x7310
jmp 0xc965
leaq -0x171(%rbp), %rdi
movq %rdi, -0x2f8(%rbp)
callq 0x75f0
movq -0x2f8(%rbp), %rdx
leaq 0x4bc2c(%rip), %rsi     # 0x58136
leaq -0x170(%rbp), %rdi
callq 0xf990
jmp 0xc518
movq -0x260(%rbp), %rdi
addq $0x68, %rdi
xorl %esi, %esi
callq 0xf6f0
movq %rax, -0x300(%rbp)
jmp 0xc533
movq -0x300(%rbp), %rsi
leaq -0x198(%rbp), %rdi
callq 0x15770
jmp 0xc548
movq -0x260(%rbp), %rdi
addq $0x68, %rdi
xorl %esi, %esi
callq 0xf6f0
movq %rax, -0x308(%rbp)
jmp 0xc563
movq -0x308(%rbp), %rcx
movq -0x260(%rbp), %rdi
leaq -0x170(%rbp), %rsi
leaq -0x198(%rbp), %rdx
callq 0xbc70
jmp 0xc586
leaq -0x198(%rbp), %rdi
callq 0x71d0
leaq -0x170(%rbp), %rdi
callq 0x71d0
leaq -0x171(%rbp), %rdi
callq 0x7310
jmp 0xc95c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0xc5ef
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0xc5e3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x198(%rbp), %rdi
callq 0x71d0
leaq -0x170(%rbp), %rdi
callq 0x71d0
leaq -0x171(%rbp), %rdi
callq 0x7310
jmp 0xc965
leaq -0x1b9(%rbp), %rdi
movq %rdi, -0x310(%rbp)
callq 0x75f0
movq -0x310(%rbp), %rdx
leaq 0x4bb0c(%rip), %rsi     # 0x5812d
leaq -0x1b8(%rbp), %rdi
callq 0xf990
jmp 0xc62f
movq -0x260(%rbp), %rdi
addq $0x68, %rdi
xorl %esi, %esi
callq 0xf6f0
movq %rax, -0x318(%rbp)
jmp 0xc64a
movq -0x318(%rbp), %rsi
leaq -0x1e0(%rbp), %rdi
callq 0x15770
jmp 0xc65f
movq -0x260(%rbp), %rdi
addq $0x68, %rdi
xorl %esi, %esi
callq 0xf6f0
movq %rax, -0x320(%rbp)
jmp 0xc67a
movq -0x320(%rbp), %rcx
movq -0x260(%rbp), %rdi
leaq -0x1b8(%rbp), %rsi
leaq -0x1e0(%rbp), %rdx
callq 0xbc70
jmp 0xc69d
leaq -0x1e0(%rbp), %rdi
callq 0x71d0
leaq -0x1b8(%rbp), %rdi
callq 0x71d0
leaq -0x1b9(%rbp), %rdi
callq 0x7310
jmp 0xc95c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0xc706
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0xc6fa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x1e0(%rbp), %rdi
callq 0x71d0
leaq -0x1b8(%rbp), %rdi
callq 0x71d0
leaq -0x1b9(%rbp), %rdi
callq 0x7310
jmp 0xc965
movq -0x260(%rbp), %rax
movl 0x468(%rax), %ecx
movb $0x0, -0x201(%rbp)
xorl %eax, %eax
cmpl $0x8, %ecx
movb %al, -0x321(%rbp)
jne 0xc790
movq -0x260(%rbp), %rdi
addq $0x68, %rdi
xorl %esi, %esi
callq 0xf6f0
movq %rax, %rsi
leaq -0x200(%rbp), %rdi
movq %rdi, -0x330(%rbp)
callq 0x15770
movq -0x330(%rbp), %rdi
movb $0x1, -0x201(%rbp)
leaq 0x4ba00(%rip), %rsi     # 0x58175
callq 0xfc30
movb %al, -0x322(%rbp)
jmp 0xc782
movb -0x322(%rbp), %al
movb %al, -0x321(%rbp)
jmp 0xc790
movb -0x321(%rbp), %al
movb %al, -0x331(%rbp)
testb $0x1, -0x201(%rbp)
jne 0xc7a7
jmp 0xc7b3
leaq -0x200(%rbp), %rdi
callq 0x71d0
movb -0x331(%rbp), %al
testb $0x1, %al
jne 0xc7bf
jmp 0xc82f
movq -0x260(%rbp), %rdi
addq $0x68, %rdi
xorl %esi, %esi
callq 0xf6f0
movq -0x260(%rbp), %rdi
movl $0x6, (%rax)
movq 0x480(%rdi), %rax
movq %rax, -0x340(%rbp)
addq $0x68, %rdi
xorl %esi, %esi
callq 0xf6f0
movq -0x340(%rbp), %rcx
movq %rcx, 0x8(%rax)
jmp 0xc95c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
testb $0x1, -0x201(%rbp)
jne 0xc81e
jmp 0xc82a
leaq -0x200(%rbp), %rdi
callq 0x71d0
jmp 0xc965
jmp 0xc831
leaq -0x229(%rbp), %rdi
movq %rdi, -0x348(%rbp)
callq 0x75f0
movq -0x348(%rbp), %rdx
leaq 0x4b905(%rip), %rsi     # 0x58157
leaq -0x228(%rbp), %rdi
callq 0xf990
jmp 0xc860
movq -0x260(%rbp), %rdi
addq $0x68, %rdi
xorl %esi, %esi
callq 0xf6f0
movq %rax, -0x350(%rbp)
jmp 0xc87b
movq -0x350(%rbp), %rsi
leaq -0x250(%rbp), %rdi
callq 0x15770
jmp 0xc890
movq -0x260(%rbp), %rdi
addq $0x68, %rdi
xorl %esi, %esi
callq 0xf6f0
movq %rax, -0x358(%rbp)
jmp 0xc8ab
movq -0x358(%rbp), %rcx
movq -0x260(%rbp), %rdi
leaq -0x228(%rbp), %rsi
leaq -0x250(%rbp), %rdx
callq 0xbc70
jmp 0xc8ce
leaq -0x250(%rbp), %rdi
callq 0x71d0
leaq -0x228(%rbp), %rdi
callq 0x71d0
leaq -0x229(%rbp), %rdi
callq 0x7310
jmp 0xc95c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0xc934
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0xc928
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x250(%rbp), %rdi
callq 0x71d0
leaq -0x228(%rbp), %rdi
callq 0x71d0
leaq -0x229(%rbp), %rdi
callq 0x7310
jmp 0xc965
movq -0x260(%rbp), %rdi
addq $0x68, %rdi
xorl %esi, %esi
callq 0xf6f0
movq %rax, %rdi
callq 0x15ac0
addq $0x360, %rsp            # imm = 0x360
popq %rbp
retq
movq -0x38(%rbp), %rdi
callq 0x75e0
nop