Hi all. I'm trying to understand how resolve_global instruction works for several days. Let's look at the code void JIT::emit_op_resolve_global(Instruction* currentInstruction, bool) { // Fast case void* globalObject = m_codeBlock->globalObject(); unsigned currentIndex = m_globalResolveInfoIndex++; GlobalResolveInfo* resolveInfoAddress = &(m_codeBlock->globalResolveInfo(currentIndex)); // Check Structure of global object move(TrustedImmPtr(globalObject), regT0); //*loads address of globalObject to eax(regT0)* move(TrustedImmPtr(resolveInfoAddress), regT2);*// loads address of resolveInfoAddress to ecx(regT2)* loadPtr(Address(regT2, OBJECT_OFFSETOF(GlobalResolveInfo, structure)), regT1); addSlowCase(branchPtr(NotEqual, regT1, Address(regT0, JSCell::structureOffset()))); // Structures don't match *// Do some checking * // Load cached property // Assume that the global object always uses external storage. loadPtr(Address(regT0, OBJECT_OFFSETOF(JSGlobalObject, m_propertyStorage)), regT0); *// loads m_propertyStorage to eax* * * *// Here is interesting thing happens* *// offset member of GlobalResolveInfo class is always 0;* load32(Address(regT2, OBJECT_OFFSETOF(GlobalResolveInfo, offset)), regT1); *//move value of **GlobalResolveInfo offset member(it's always 0 ) to edx(regT1)* *//So here we always mov same value to eax(regT0), regardless of whether our global Array , String or Object* loadPtr(BaseIndex(regT0, regT1, ScalePtr), regT0); emitValueProfilingSite(); emitPutVirtualRegister(currentInstruction[1].u.operand); } So 1. What is mystery of this instruction, how it's really works let's say for this example??? var a=Array(5); var s=String; var o=Object; 2. What is in m_propertyStorage, and when it's sets? Thanks for attention!