void DynamicObject::ChangeType() { Assert(!GetDynamicType()->GetIsShared() || GetTypeHandler()->GetIsShared()); this->type = this->DuplicateType(); }
BOOL DynamicObject::GetEnumerator(BOOL enumNonEnumerable, Var* enumerator, ScriptContext * requestContext, bool preferSnapshotSemantics, bool enumSymbols) { if (!this->GetTypeHandler()->EnsureObjectReady(this)) { *enumerator = nullptr; return FALSE; } // Create the appropriate enumerator object. if (preferSnapshotSemantics) { if (this->GetTypeHandler()->GetPropertyCount() == 0 && !this->HasObjectArray()) { *enumerator = requestContext->GetLibrary()->GetNullEnumerator(); } else { GetDynamicType()->PrepareForTypeSnapshotEnumeration(); if (this->GetDynamicType()->GetIsLocked()) { if (enumSymbols) { if (enumNonEnumerable) { *enumerator = DynamicObjectSnapshotEnumeratorWPCache<BigPropertyIndex, /*enumNonEnumerable*/true, /*enumSymbols*/true>::New(requestContext, this); } else { *enumerator = DynamicObjectSnapshotEnumeratorWPCache<BigPropertyIndex, /*enumNonEnumerable*/false, /*enumSymbols*/true>::New(requestContext, this); } } else if (enumNonEnumerable) { *enumerator = DynamicObjectSnapshotEnumeratorWPCache<BigPropertyIndex, /*enumNonEnumerable*/true, /*enumSymbols*/false>::New(requestContext, this); } else { *enumerator = DynamicObjectSnapshotEnumeratorWPCache<BigPropertyIndex, /*enumNonEnumerable*/false, /*enumSymbols*/false>::New(requestContext, this); } } else { if (enumSymbols) { if (enumNonEnumerable) { *enumerator = DynamicObjectSnapshotEnumerator<BigPropertyIndex, /*enumNonEnumerable*/true, /*enumSymbols*/true>::New(requestContext, this); } else { *enumerator = DynamicObjectSnapshotEnumerator<BigPropertyIndex, /*enumNonEnumerable*/false, /*enumSymbols*/true>::New(requestContext, this); } } else if (enumNonEnumerable) { *enumerator = DynamicObjectSnapshotEnumerator<BigPropertyIndex, /*enumNonEnumerable*/true, /*enumSymbols*/false>::New(requestContext, this); } else { *enumerator = DynamicObjectSnapshotEnumerator<BigPropertyIndex, /*enumNonEnumerable*/false, /*enumSymbols*/false>::New(requestContext, this); } } } } else if (enumSymbols) { if (enumNonEnumerable) { *enumerator = DynamicObjectEnumerator<BigPropertyIndex, /*enumNonEnumerable*/true, /*enumSymbols*/true, /*snapShotSementics*/false>::New(requestContext, this); } else { *enumerator = DynamicObjectEnumerator<BigPropertyIndex, /*enumNonEnumerable*/false, /*enumSymbols*/true, /*snapShotSementics*/false>::New(requestContext, this); } } else if (enumNonEnumerable) { *enumerator = DynamicObjectEnumerator<BigPropertyIndex, /*enumNonEnumerable*/true, /*enumSymbols*/false, /*snapShotSementics*/false>::New(requestContext, this); } else { *enumerator = DynamicObjectEnumerator<BigPropertyIndex, /*enumNonEnumerable*/false, /*enumSymbols*/false, /*snapShotSementics*/false>::New(requestContext, this); } return true; }