// File: /workspace/github_cpp_makefile_star2_O3/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 $0x40, %rsp
movq %rdi, %rbx
movl 0x468(%rdi), %eax
decl %eax
cmpl $0x7, %eax
ja 0x8b99
leaq 0x17949(%rip), %rcx     # 0x2012c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x17955(%rip), %rsi     # 0x20151
leaq 0x17952(%rip), %rdx     # 0x20155
movq %rsp, %rdi
callq 0xb1b4
movq 0x70(%rbx), %rsi
addq $-0x20, %rsi
leaq 0x20(%rsp), %rdi
callq 0xc740
movq 0x70(%rbx), %rcx
addq $-0x20, %rcx
movq %rsp, %rsi
leaq 0x20(%rsp), %rdx
movq %rbx, %rdi
callq 0x86b4
jmp 0x8af6
movq 0x70(%rbx), %rsi
cmpl $0x4, -0x20(%rsi)
jne 0x88d0
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x1790f(%rip), %rsi     # 0x20167
leaq 0x1790d(%rip), %rdx     # 0x2016c
movq %rsp, %rdi
callq 0xb1b4
movq 0x70(%rbx), %rsi
addq $-0x20, %rsi
leaq 0x20(%rsp), %rdi
callq 0xc740
movq 0x70(%rbx), %rcx
addq $-0x20, %rcx
movq %rsp, %rsi
leaq 0x20(%rsp), %rdx
movq %rbx, %rdi
callq 0x86b4
leaq 0x30(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x88ac
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x6230
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x88c2
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6230
movq 0x70(%rbx), %rsi
cmpl $0x0, -0x20(%rsi)
jne 0x8d36
addq $-0x20, %rsi
movq %rsp, %r14
movq %r14, %rdi
callq 0xc740
movq (%r14), %rdi
movq 0x8(%r14), %rax
testq %rax, %rax
je 0x8bcd
movb (%rdi), %cl
addb $-0x3a, %cl
cmpb $-0xa, %cl
jae 0x8bda
xorl %ebp, %ebp
jmp 0x8c00
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x17846(%rip), %rsi     # 0x2015a
leaq 0x17844(%rip), %rdx     # 0x2015f
movq %rsp, %rdi
callq 0xb1b4
movq 0x70(%rbx), %rsi
addq $-0x20, %rsi
leaq 0x20(%rsp), %rdi
callq 0xc740
movq 0x70(%rbx), %rcx
addq $-0x20, %rcx
movq %rsp, %rsi
leaq 0x20(%rsp), %rdx
movq %rbx, %rdi
callq 0x86b4
jmp 0x8af6
movq 0x70(%rbx), %rsi
cmpl $0x4, -0x20(%rsi)
jne 0x89e8
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x177f0(%rip), %rsi     # 0x20160
leaq 0x177ef(%rip), %rdx     # 0x20166
movq %rsp, %rdi
callq 0xb1b4
movq 0x70(%rbx), %rsi
addq $-0x20, %rsi
leaq 0x20(%rsp), %rdi
callq 0xc740
movq 0x70(%rbx), %rcx
addq $-0x20, %rcx
movq %rsp, %rsi
leaq 0x20(%rsp), %rdx
movq %rbx, %rdi
callq 0x86b4
leaq 0x30(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x89c4
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x6230
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x89da
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6230
movq 0x70(%rbx), %rsi
cmpl $0x0, -0x20(%rsi)
jne 0x8d36
addq $-0x20, %rsi
movq %rsp, %r14
movq %r14, %rdi
callq 0xc740
movq (%r14), %rdi
movq 0x8(%r14), %rax
testq %rax, %rax
je 0x8bd2
movb (%rdi), %cl
addb $-0x3a, %cl
cmpb $-0xa, %cl
jae 0x8c79
xorl %ebp, %ebp
jmp 0x8c9f
movq 0x70(%rbx), %rsi
addq $-0x20, %rsi
movq %rsp, %r14
movq %r14, %rdi
callq 0xc740
leaq 0x17763(%rip), %rsi     # 0x20199
movq %r14, %rdi
callq 0x60d0
movl %eax, %ebp
movq (%r14), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x8a5a
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6230
testl %ebp, %ebp
je 0x8bb2
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x17709(%rip), %rsi     # 0x2017b
leaq 0x1770a(%rip), %rdx     # 0x20183
movq %rsp, %rdi
callq 0xb1b4
movq 0x70(%rbx), %rsi
addq $-0x20, %rsi
leaq 0x20(%rsp), %rdi
callq 0xc740
movq 0x70(%rbx), %rcx
addq $-0x20, %rcx
movq %rsp, %rsi
leaq 0x20(%rsp), %rdx
movq %rbx, %rdi
callq 0x86b4
jmp 0x8af6
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x17699(%rip), %rsi     # 0x20156
leaq 0x17695(%rip), %rdx     # 0x20159
movq %rsp, %rdi
callq 0xb1b4
movq 0x70(%rbx), %rsi
addq $-0x20, %rsi
leaq 0x20(%rsp), %rdi
callq 0xc740
movq 0x70(%rbx), %rcx
addq $-0x20, %rcx
movq %rsp, %rsi
leaq 0x20(%rsp), %rdx
movq %rbx, %rdi
callq 0x86b4
leaq 0x30(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x8b11
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x6230
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x8d36
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6230
jmp 0x8d36
leaq 0x468(%rbx), %r14
movl $0xffffffff, 0x4d8(%rbx) # imm = 0xFFFFFFFF
movq 0x70(%rbx), %rsi
addq $-0x20, %rsi
movq %rsp, %r12
movq %r12, %rdi
callq 0xc740
leaq 0x4e0(%rbx), %r15
movq %r15, %rdi
movq %r12, %rsi
callq 0x62e0
movq (%r12), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x8b81
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6230
movq 0x70(%rbx), %rdx
addq $-0x20, %rdx
movq %r14, %rdi
movq %r15, %rsi
callq 0x8681
jmp 0x8d36
movq 0x70(%rbx), %rdi
addq $-0x20, %rdi
addq $0x40, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0xc882
movq 0x70(%rbx), %rax
movl $0x6, -0x20(%rax)
movq 0x480(%rbx), %rcx
movq %rcx, -0x18(%rax)
jmp 0x8d36
movb $0x1, %bpl
jmp 0x8c00
movb $0x1, %bpl
jmp 0x8c9f
movl $0x1, %edx
movq %rdx, %rcx
cmpq %rdx, %rax
je 0x8bf9
movb (%rdi,%rcx), %sil
addb $-0x3a, %sil
leaq 0x1(%rcx), %rdx
cmpb $-0xb, %sil
ja 0x8bdf
cmpq %rcx, %rax
setbe %bpl
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x8c17
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6230
testb %bpl, %bpl
je 0x8d29
movq 0x70(%rbx), %rdi
addq $-0x20, %rdi
callq 0xc6ce
movl %eax, 0x4d8(%rbx)
testl %eax, %eax
js 0x8d29
movl %eax, %eax
movq 0x470(%rbx), %rdx
movq (%rdx), %rcx
movq 0x8(%rdx), %rdx
subq %rcx, %rdx
sarq $0x5, %rdx
cmpq %rax, %rdx
jbe 0x8d29
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 0x8d36
movl $0x1, %edx
movq %rdx, %rcx
cmpq %rdx, %rax
je 0x8c98
movb (%rdi,%rcx), %sil
addb $-0x3a, %sil
leaq 0x1(%rcx), %rdx
cmpb $-0xb, %sil
ja 0x8c7e
cmpq %rcx, %rax
setbe %bpl
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x8cb6
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6230
testb %bpl, %bpl
je 0x8d29
movq 0x70(%rbx), %rdi
addq $-0x20, %rdi
callq 0xc6ce
movl %eax, 0x4d8(%rbx)
testl %eax, %eax
js 0x8d29
movl %eax, %eax
movq 0x470(%rbx), %rcx
cmpq %rax, 0x8(%rcx)
jbe 0x8d29
movq 0x70(%rbx), %rax
movl $0x4, -0x20(%rax)
callq 0x10d24
movq 0x70(%rbx), %rcx
movq %rax, -0x18(%rcx)
movq 0x470(%rbx), %rax
movslq 0x4d8(%rbx), %rcx
movq (%rax), %rax
movsbl (%rax,%rcx), %r8d
movq 0x70(%rbx), %rax
movq -0x18(%rax), %rdi
movq 0x8(%rdi), %rdx
movl $0x1, %ecx
xorl %esi, %esi
callq 0x64a0
jmp 0x8d36
movq 0x70(%rbx), %rdi
addq $-0x20, %rdi
callq 0xc882
addq $0x40, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
jmp 0x8d61
jmp 0x8d61
jmp 0x8d81
jmp 0x8d81
jmp 0x8d9c
jmp 0x8d9c
jmp 0x8d61
jmp 0x8d61
jmp 0x8d61
jmp 0x8d81
jmp 0x8d81
jmp 0x8d81
jmp 0x8d9c
jmp 0x8d9c
jmp 0x8d9c
movq %rax, %rbx
leaq 0x30(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x8d84
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x6230
jmp 0x8d84
movq %rax, %rbx
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x8d9f
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6230
jmp 0x8d9f
movq %rax, %rbx
movq %rbx, %rdi
callq 0x6450
nop