mirror of
https://gitee.com/openharmony/arkcompiler_ets_runtime
synced 2025-02-26 07:16:57 +00:00
[pgo] onHeap与notOnHeap转换未维护proto链问题修复
Issue:https://gitee.com/openharmony/arkcompiler_ets_runtime/issues/IABOX4 Description:替换hclass需要维护proto链,对未维护proto链的场景进行修复 Signed-off-by: zhangyinlu <zhangyinlu@huawei.com> Change-Id: Ifcc642099a1f40d29728cf7274d1a063518e185f
This commit is contained in:
parent
c3faf68dff
commit
27a4033cbc
@ -179,6 +179,9 @@ JSHandle<JSObject> TypedArrayHelper::AllocateTypedArrayBuffer<TypedArrayKind::NO
|
||||
thread->GetEcmaVM()->GetFactory()->NewByteArray(arrayLength, elementSize).GetTaggedValue());
|
||||
JSHandle<JSHClass> onHeapHclass = TypedArrayHelper::GetOnHeapHclassFromType(
|
||||
thread, JSHandle<JSTypedArray>(obj), arrayType);
|
||||
#if ECMASCRIPT_ENABLE_IC
|
||||
JSHClass::NotifyHclassChanged(thread, JSHandle<JSHClass>(thread, obj->GetJSHClass()), onHeapHclass);
|
||||
#endif
|
||||
TaggedObject::Cast(*obj)->SynchronizedSetClass(thread, *onHeapHclass); // notOnHeap->onHeap
|
||||
}
|
||||
RETURN_VALUE_IF_ABRUPT_COMPLETION(thread, exception);
|
||||
@ -233,6 +236,9 @@ JSHandle<JSObject> TypedArrayHelper::AllocateTypedArrayBuffer<TypedArrayKind::SH
|
||||
MemSpaceType::SHARED_OLD_SPACE).GetTaggedValue());
|
||||
JSHandle<JSHClass> onHeapHclass = TypedArrayHelper::GetSharedOnHeapHclassFromType(
|
||||
thread, JSHandle<JSTypedArray>(obj), arrayType);
|
||||
#if ECMASCRIPT_ENABLE_IC
|
||||
JSHClass::NotifyHclassChanged(thread, JSHandle<JSHClass>(thread, obj->GetJSHClass()), onHeapHclass);
|
||||
#endif
|
||||
TaggedObject::Cast(*obj)->SynchronizedSetClass(thread, *onHeapHclass); // notOnHeap->onHeap
|
||||
}
|
||||
RETURN_VALUE_IF_ABRUPT_COMPLETION(thread, exception);
|
||||
|
@ -774,6 +774,9 @@ JSTaggedValue JSTypedArray::GetOffHeapBuffer(JSThread *thread, JSHandle<JSTypedA
|
||||
DataViewType arrayType = JSTypedArray::GetTypeFromName(thread, typeName);
|
||||
JSHandle<JSHClass> notOnHeapHclass = TypedArrayHelper::GetNotOnHeapHclassFromType(
|
||||
thread, typedArray, arrayType);
|
||||
#if ECMASCRIPT_ENABLE_IC
|
||||
JSHClass::NotifyHclassChanged(thread, JSHandle<JSHClass>(thread, typedArray->GetJSHClass()), notOnHeapHclass);
|
||||
#endif
|
||||
TaggedObject::Cast(*typedArray)->SynchronizedSetClass(thread, *notOnHeapHclass); // onHeap->notOnHeap
|
||||
|
||||
return arrayBuffer.GetTaggedValue();
|
||||
@ -803,6 +806,9 @@ JSTaggedValue JSSharedTypedArray::GetSharedOffHeapBuffer(JSThread *thread, JSHan
|
||||
DataViewType arrayType = JSTypedArray::GetTypeFromName(thread, typeName);
|
||||
JSHandle<JSHClass> notOnHeapHclass = TypedArrayHelper::GetSharedNotOnHeapHclassFromType(
|
||||
thread, typedArray, arrayType);
|
||||
#if ECMASCRIPT_ENABLE_IC
|
||||
JSHClass::NotifyHclassChanged(thread, JSHandle<JSHClass>(thread, typedArray->GetJSHClass()), notOnHeapHclass);
|
||||
#endif
|
||||
TaggedObject::Cast(*typedArray)->SynchronizedSetClass(thread, *notOnHeapHclass); // onHeap->notOnHeap
|
||||
|
||||
return arrayBuffer.GetTaggedValue();
|
||||
|
@ -60,3 +60,16 @@ function baz(ta: Uint32Array | Float64Array) {
|
||||
baz(ta0);
|
||||
baz(ta1);
|
||||
|
||||
function foo2() {
|
||||
for (let v0 = 0; v0 < 5; v0++) {
|
||||
function f1(a2, a3, a4) {
|
||||
const v6 = new BigUint64Array(a2);
|
||||
const v8 = new Uint8ClampedArray();
|
||||
const t13 = v8.__proto__;
|
||||
t13.__proto__ = v6;
|
||||
return v6;
|
||||
}
|
||||
f1(f1());
|
||||
}
|
||||
}
|
||||
foo2()
|
||||
|
Loading…
x
Reference in New Issue
Block a user