// File: /workspace/github_cpp_makefile_star2_O1/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 0x8ba5
leaq 0x1794f(%rip), %rcx     # 0x2012c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x1795b(%rip), %rsi     # 0x20151
leaq 0x17958(%rip), %rdx     # 0x20155
movq %rsp, %rdi
callq 0xb1a2
movq 0x70(%rbx), %rsi
addq $-0x20, %rsi
leaq 0x20(%rsp), %rdi
callq 0xc720
movq 0x70(%rbx), %rcx
addq $-0x20, %rcx
movq %rsp, %rsi
leaq 0x20(%rsp), %rdx
movq %rbx, %rdi
callq 0x86ae
jmp 0x8b02
movq 0x70(%rbx), %rax
cmpl $0x4, -0x20(%rax)
jne 0x88ca
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x17915(%rip), %rsi     # 0x20167
leaq 0x17913(%rip), %rdx     # 0x2016c
movq %rsp, %rdi
callq 0xb1a2
movq 0x70(%rbx), %rsi
addq $-0x20, %rsi
leaq 0x20(%rsp), %rdi
callq 0xc720
movq 0x70(%rbx), %rcx
addq $-0x20, %rcx
movq %rsp, %rsi
leaq 0x20(%rsp), %rdx
movq %rbx, %rdi
callq 0x86ae
leaq 0x30(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x88a6
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x6230
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x88bc
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6230
movq 0x70(%rbx), %rax
cmpl $0x0, -0x20(%rax)
jne 0x8d3d
movq 0x70(%rbx), %rsi
addq $-0x20, %rsi
movq %rsp, %r14
movq %r14, %rdi
callq 0xc720
movq 0x8(%r14), %rax
testq %rax, %rax
sete %bpl
je 0x8bff
movq (%rsp), %rcx
movb (%rcx), %dl
addb $-0x3a, %dl
cmpb $-0xa, %dl
jae 0x8bd9
xorl %ebp, %ebp
jmp 0x8bff
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x17843(%rip), %rsi     # 0x2015a
leaq 0x17841(%rip), %rdx     # 0x2015f
movq %rsp, %rdi
callq 0xb1a2
movq 0x70(%rbx), %rsi
addq $-0x20, %rsi
leaq 0x20(%rsp), %rdi
callq 0xc720
movq 0x70(%rbx), %rcx
addq $-0x20, %rcx
movq %rsp, %rsi
leaq 0x20(%rsp), %rdx
movq %rbx, %rdi
callq 0x86ae
jmp 0x8b02
movq 0x70(%rbx), %rax
cmpl $0x4, -0x20(%rax)
jne 0x89eb
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x177ed(%rip), %rsi     # 0x20160
leaq 0x177ec(%rip), %rdx     # 0x20166
movq %rsp, %rdi
callq 0xb1a2
movq 0x70(%rbx), %rsi
addq $-0x20, %rsi
leaq 0x20(%rsp), %rdi
callq 0xc720
movq 0x70(%rbx), %rcx
addq $-0x20, %rcx
movq %rsp, %rsi
leaq 0x20(%rsp), %rdx
movq %rbx, %rdi
callq 0x86ae
leaq 0x30(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x89c7
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x6230
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x89dd
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6230
movq 0x70(%rbx), %rax
cmpl $0x0, -0x20(%rax)
jne 0x8d3d
movq 0x70(%rbx), %rsi
addq $-0x20, %rsi
movq %rsp, %r14
movq %r14, %rdi
callq 0xc720
movq 0x8(%r14), %rax
testq %rax, %rax
sete %bpl
je 0x8ca2
movq (%rsp), %rcx
movb (%rcx), %dl
addb $-0x3a, %dl
cmpb $-0xa, %dl
jae 0x8c7c
xorl %ebp, %ebp
jmp 0x8ca2
movq 0x70(%rbx), %rsi
addq $-0x20, %rsi
movq %rsp, %r14
movq %r14, %rdi
callq 0xc720
leaq 0x17757(%rip), %rsi     # 0x20199
movq %r14, %rdi
callq 0x60d0
movl %eax, %ebp
movq (%r14), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x8a66
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6230
testl %ebp, %ebp
je 0x8bbe
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x176fd(%rip), %rsi     # 0x2017b
leaq 0x176fe(%rip), %rdx     # 0x20183
movq %rsp, %rdi
callq 0xb1a2
movq 0x70(%rbx), %rsi
addq $-0x20, %rsi
leaq 0x20(%rsp), %rdi
callq 0xc720
movq 0x70(%rbx), %rcx
addq $-0x20, %rcx
movq %rsp, %rsi
leaq 0x20(%rsp), %rdx
movq %rbx, %rdi
callq 0x86ae
jmp 0x8b02
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x1768d(%rip), %rsi     # 0x20156
leaq 0x17689(%rip), %rdx     # 0x20159
movq %rsp, %rdi
callq 0xb1a2
movq 0x70(%rbx), %rsi
addq $-0x20, %rsi
leaq 0x20(%rsp), %rdi
callq 0xc720
movq 0x70(%rbx), %rcx
addq $-0x20, %rcx
movq %rsp, %rsi
leaq 0x20(%rsp), %rdx
movq %rbx, %rdi
callq 0x86ae
leaq 0x30(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x8b1d
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x6230
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x8d3d
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6230
jmp 0x8d3d
leaq 0x468(%rbx), %r14
movl $0xffffffff, 0x4d8(%rbx) # imm = 0xFFFFFFFF
movq 0x70(%rbx), %rsi
addq $-0x20, %rsi
movq %rsp, %r12
movq %r12, %rdi
callq 0xc720
leaq 0x4e0(%rbx), %r15
movq %r15, %rdi
movq %r12, %rsi
callq 0x62e0
movq (%r12), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x8b8d
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6230
movq 0x70(%rbx), %rdx
addq $-0x20, %rdx
movq %r14, %rdi
movq %r15, %rsi
callq 0x867a
jmp 0x8d3d
movq 0x70(%rbx), %rdi
addq $-0x20, %rdi
addq $0x40, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0xc862
movq 0x70(%rbx), %rax
movl $0x6, -0x20(%rax)
movq 0x480(%rbx), %rcx
movq %rcx, -0x18(%rax)
jmp 0x8d3d
movl $0x1, %esi
movq %rsi, %rdx
cmpq %rsi, %rax
je 0x8bf8
movb (%rcx,%rdx), %dil
addb $-0x3a, %dil
leaq 0x1(%rdx), %rsi
cmpb $-0xb, %dil
ja 0x8bde
cmpq %rdx, %rax
setbe %bpl
leaq 0x10(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x8c1a
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6230
testb %bpl, %bpl
je 0x8d30
movq 0x70(%rbx), %rdi
addq $-0x20, %rdi
callq 0xc6ae
movl %eax, 0x4d8(%rbx)
testl %eax, %eax
js 0x8d30
movl %eax, %eax
movq 0x470(%rbx), %rdx
movq (%rdx), %rcx
movq 0x8(%rdx), %rdx
subq %rcx, %rdx
sarq $0x5, %rdx
cmpq %rax, %rdx
jbe 0x8d30
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 0x8d3d
movl $0x1, %esi
movq %rsi, %rdx
cmpq %rsi, %rax
je 0x8c9b
movb (%rcx,%rdx), %dil
addb $-0x3a, %dil
leaq 0x1(%rdx), %rsi
cmpb $-0xb, %dil
ja 0x8c81
cmpq %rdx, %rax
setbe %bpl
leaq 0x10(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x8cbd
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6230
testb %bpl, %bpl
je 0x8d30
movq 0x70(%rbx), %rdi
addq $-0x20, %rdi
callq 0xc6ae
movl %eax, 0x4d8(%rbx)
testl %eax, %eax
js 0x8d30
movl %eax, %eax
movq 0x470(%rbx), %rcx
cmpq %rax, 0x8(%rcx)
jbe 0x8d30
movq 0x70(%rbx), %rax
movl $0x4, -0x20(%rax)
callq 0x10d40
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 0x8d3d
movq 0x70(%rbx), %rdi
addq $-0x20, %rdi
callq 0xc862
addq $0x40, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
jmp 0x8d68
jmp 0x8d68
jmp 0x8d88
jmp 0x8d88
jmp 0x8da3
jmp 0x8da3
jmp 0x8d68
jmp 0x8d68
jmp 0x8d68
jmp 0x8d88
jmp 0x8d88
jmp 0x8d88
jmp 0x8da3
jmp 0x8da3
jmp 0x8da3
movq %rax, %rbx
leaq 0x30(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x8d8b
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x6230
jmp 0x8d8b
movq %rax, %rbx
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x8da6
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6230
jmp 0x8da6
movq %rax, %rbx
movq %rbx, %rdi
callq 0x6450