mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-10-30 19:17:31 +09:00
Inline combined methods for NativeObject and UnboxedArrayObject accesses.
This commit is contained in:
parent
54b6b407a9
commit
1176a9ace1
9 changed files with 115 additions and 224 deletions
|
|
@ -1143,19 +1143,18 @@ js::CloneObject(JSContext* cx, HandleObject obj, Handle<js::TaggedProto> proto)
|
|||
}
|
||||
|
||||
static bool
|
||||
GetScriptArrayObjectElements(JSContext* cx, HandleObject obj, MutableHandle<GCVector<Value>> values)
|
||||
GetScriptArrayObjectElements(JSContext* cx, HandleArrayObject arr, MutableHandle<GCVector<Value>> values)
|
||||
{
|
||||
MOZ_ASSERT(!obj->isSingleton());
|
||||
MOZ_ASSERT(obj->is<ArrayObject>());
|
||||
MOZ_ASSERT(!obj->isIndexed());
|
||||
MOZ_ASSERT(!arr->isSingleton());
|
||||
MOZ_ASSERT(!arr->isIndexed());
|
||||
|
||||
size_t length = GetAnyBoxedOrUnboxedArrayLength(obj);
|
||||
size_t length = arr->length();
|
||||
if (!values.appendN(MagicValue(JS_ELEMENTS_HOLE), length))
|
||||
return false;
|
||||
|
||||
size_t initlen = GetAnyBoxedOrUnboxedInitializedLength(obj);
|
||||
size_t initlen = arr->getDenseInitializedLength();
|
||||
for (size_t i = 0; i < initlen; i++)
|
||||
values[i].set(GetAnyBoxedOrUnboxedDenseElement(obj, i));
|
||||
values[i].set(arr->getDenseElement(i));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
@ -1212,7 +1211,7 @@ js::DeepCloneObjectLiteral(JSContext* cx, HandleObject obj, NewObjectKind newKin
|
|||
|
||||
if (obj->is<ArrayObject>()) {
|
||||
Rooted<GCVector<Value>> values(cx, GCVector<Value>(cx));
|
||||
if (!GetScriptArrayObjectElements(cx, obj, &values))
|
||||
if (!GetScriptArrayObjectElements(cx, obj.as<ArrayObject>(), &values))
|
||||
return nullptr;
|
||||
|
||||
// Deep clone any elements.
|
||||
|
|
@ -1339,8 +1338,11 @@ js::XDRObjectLiteral(XDRState<mode>* xdr, MutableHandleObject obj)
|
|||
|
||||
if (isArray) {
|
||||
Rooted<GCVector<Value>> values(cx, GCVector<Value>(cx));
|
||||
if (mode == XDR_ENCODE && !GetScriptArrayObjectElements(cx, obj, &values))
|
||||
return false;
|
||||
if (mode == XDR_ENCODE) {
|
||||
RootedArrayObject arr(cx, &obj->as<ArrayObject>());
|
||||
if (!GetScriptArrayObjectElements(cx, arr, &values))
|
||||
return false;
|
||||
}
|
||||
|
||||
uint32_t initialized;
|
||||
if (mode == XDR_ENCODE)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue