// File: /workspace/github_cpp_makefile_star2_O2/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
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x50, %rsp
movq %rdi, %rbx
movl 0x468(%rdi), %eax
decl %eax
cmpl $0x7, %eax
ja 0x85e9
leaq 0x14ef9(%rip), %rcx     # 0x1d104
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq 0x14f0e(%rip), %rsi     # 0x1d129
leaq 0x10(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x9c4a
movq 0x70(%rbx), %rsi
addq $-0x20, %rsi
leaq 0x30(%rsp), %rdi
callq 0xb612
movq 0x70(%rbx), %rcx
addq $-0x20, %rcx
leaq 0x10(%rsp), %rsi
leaq 0x30(%rsp), %rdx
movq %rbx, %rdi
callq 0x811c
jmp 0x8576
movq 0x70(%rbx), %rsi
cmpl $0x4, -0x20(%rsi)
jne 0x82c9
leaq 0x14ed3(%rip), %rsi     # 0x1d13f
leaq 0x10(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x9c4a
movq 0x70(%rbx), %rsi
addq $-0x20, %rsi
leaq 0x30(%rsp), %rdi
callq 0xb612
movq 0x70(%rbx), %rcx
addq $-0x20, %rcx
leaq 0x10(%rsp), %rsi
leaq 0x30(%rsp), %rdx
movq %rbx, %rdi
callq 0x811c
leaq 0x30(%rsp), %rdi
callq 0x6130
leaq 0x10(%rsp), %rdi
callq 0x6130
movq 0x70(%rbx), %rsi
cmpl $0x0, -0x20(%rsi)
jne 0x858a
addq $-0x20, %rsi
leaq 0x10(%rsp), %r14
movq %r14, %rdi
callq 0xb612
movq %r14, %rdi
callq 0x81ba
movl %eax, %ebp
movq %r14, %rdi
callq 0x6130
testb %bpl, %bpl
je 0x8490
movq 0x70(%rbx), %rdi
addq $-0x20, %rdi
callq 0xb5a0
movl %eax, 0x4d8(%rbx)
testl %eax, %eax
js 0x8490
movl %eax, %eax
movq 0x470(%rbx), %rdx
movq (%rdx), %rcx
movq 0x8(%rdx), %rdx
subq %rcx, %rdx
sarq $0x5, %rdx
cmpq %rax, %rdx
jbe 0x8490
shlq $0x5, %rax
movq 0x70(%rbx), %rdx
movups (%rcx,%rax), %xmm0
movups 0x10(%rcx,%rax), %xmm1
movups %xmm1, -0x10(%rdx)
movups %xmm0, -0x20(%rdx)
jmp 0x858a
leaq 0x14ddd(%rip), %rsi     # 0x1d132
leaq 0x10(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x9c4a
movq 0x70(%rbx), %rsi
addq $-0x20, %rsi
leaq 0x30(%rsp), %rdi
callq 0xb612
movq 0x70(%rbx), %rcx
addq $-0x20, %rcx
leaq 0x10(%rsp), %rsi
leaq 0x30(%rsp), %rdx
movq %rbx, %rdi
callq 0x811c
jmp 0x8576
movq 0x70(%rbx), %rsi
cmpl $0x4, -0x20(%rsi)
jne 0x8403
leaq 0x14d92(%rip), %rsi     # 0x1d138
leaq 0x10(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x9c4a
movq 0x70(%rbx), %rsi
addq $-0x20, %rsi
leaq 0x30(%rsp), %rdi
callq 0xb612
movq 0x70(%rbx), %rcx
addq $-0x20, %rcx
leaq 0x10(%rsp), %rsi
leaq 0x30(%rsp), %rdx
movq %rbx, %rdi
callq 0x811c
leaq 0x30(%rsp), %rdi
callq 0x6130
leaq 0x10(%rsp), %rdi
callq 0x6130
movq 0x70(%rbx), %rsi
cmpl $0x0, -0x20(%rsi)
jne 0x858a
addq $-0x20, %rsi
leaq 0x10(%rsp), %r14
movq %r14, %rdi
callq 0xb612
movq %r14, %rdi
callq 0x81ba
movl %eax, %ebp
movq %r14, %rdi
callq 0x6130
testb %bpl, %bpl
je 0x8490
movq 0x70(%rbx), %rdi
addq $-0x20, %rdi
callq 0xb5a0
movl %eax, 0x4d8(%rbx)
testl %eax, %eax
js 0x8490
movl %eax, %eax
movq 0x470(%rbx), %rcx
cmpq %rax, 0x8(%rcx)
jbe 0x8490
movq 0x70(%rbx), %rax
movl $0x4, -0x20(%rax)
callq 0xeff0
movq 0x70(%rbx), %rcx
movq %rax, -0x18(%rcx)
movq 0x470(%rbx), %rax
movslq 0x4d8(%rbx), %rcx
movq (%rax), %rax
movsbl (%rax,%rcx), %esi
movq 0x70(%rbx), %rax
movq -0x18(%rax), %rdi
callq 0x6430
jmp 0x858a
movq 0x70(%rbx), %rdi
addq $-0x20, %rdi
callq 0xb6e0
jmp 0x858a
movq 0x70(%rbx), %rsi
addq $-0x20, %rsi
leaq 0x10(%rsp), %r14
movq %r14, %rdi
callq 0xb612
leaq 0x14cb3(%rip), %rsi     # 0x1d171
movq %r14, %rdi
callq 0x9d30
movl %eax, %ebp
movq %r14, %rdi
callq 0x6130
testb %bpl, %bpl
je 0x84f0
movq 0x70(%rbx), %rax
movl $0x6, -0x20(%rax)
movq 0x480(%rbx), %rcx
movq %rcx, -0x18(%rax)
jmp 0x858a
leaq 0x14c5c(%rip), %rsi     # 0x1d153
leaq 0x10(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x9c4a
movq 0x70(%rbx), %rsi
addq $-0x20, %rsi
leaq 0x30(%rsp), %rdi
callq 0xb612
movq 0x70(%rbx), %rcx
addq $-0x20, %rcx
leaq 0x10(%rsp), %rsi
leaq 0x30(%rsp), %rdx
movq %rbx, %rdi
callq 0x811c
jmp 0x8576
leaq 0x14bf3(%rip), %rsi     # 0x1d12e
leaq 0x10(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x9c4a
movq 0x70(%rbx), %rsi
addq $-0x20, %rsi
leaq 0x30(%rsp), %rdi
callq 0xb612
movq 0x70(%rbx), %rcx
addq $-0x20, %rcx
leaq 0x10(%rsp), %rsi
leaq 0x30(%rsp), %rdx
movq %rbx, %rdi
callq 0x811c
leaq 0x30(%rsp), %rdi
callq 0x6130
leaq 0x10(%rsp), %rdi
callq 0x6130
addq $0x50, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
orl $-0x1, 0x4d8(%rbx)
leaq 0x468(%rbx), %r14
movq 0x70(%rbx), %rsi
addq $-0x20, %rsi
leaq 0x10(%rsp), %r15
movq %r15, %rdi
callq 0xb612
leaq 0x4e0(%rbx), %r12
movq %r12, %rdi
movq %r15, %rsi
callq 0x62d0
movq %r15, %rdi
callq 0x6130
movq 0x70(%rbx), %rdx
addq $-0x20, %rdx
movq %r14, %rdi
movq %r12, %rsi
callq 0x80e9
jmp 0x858a
movq 0x70(%rbx), %rdi
addq $-0x20, %rdi
addq $0x50, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0xb6e0
jmp 0x8620
jmp 0x8620
jmp 0x862f
jmp 0x862f
jmp 0x863e
jmp 0x863e
jmp 0x8620
jmp 0x8620
jmp 0x8620
jmp 0x862f
jmp 0x862f
jmp 0x862f
jmp 0x863e
jmp 0x863e
jmp 0x863e
movq %rax, %rbx
leaq 0x30(%rsp), %rdi
callq 0x6130
jmp 0x8632
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x6130
jmp 0x8641
movq %rax, %rbx
movq %rbx, %rdi
callq 0x6460
nop