diff --git a/ecmascript/jsnapi_sendable.cpp b/ecmascript/jsnapi_sendable.cpp index 0163c3163c6e2b6cafbaee9532ac2de4f09c25a0..2d9f5ad3297cbf14fb4614f7b885cf1b7ba74b60 100644 --- a/ecmascript/jsnapi_sendable.cpp +++ b/ecmascript/jsnapi_sendable.cpp @@ -102,6 +102,7 @@ void JSNapiSendable::InitWithPropertiesInfo(JSThread *thread, desc.SetValue(JSNApiHelper::ToJSHandle(info.attributes[i].GetValue(vm))); descs.push_back(desc); } + InitInstanceDescription(thread, descs); } SharedFieldType JSNapiSendable::GetSharedFieldType(JSThread *thread, diff --git a/ecmascript/napi/include/jsnapi_expo.h b/ecmascript/napi/include/jsnapi_expo.h index 812a53995386d6673b05e16e9eec5080d95f5e2e..e90012c83f3e88524ecede126dcd6d85b1d3ceec 100644 --- a/ecmascript/napi/include/jsnapi_expo.h +++ b/ecmascript/napi/include/jsnapi_expo.h @@ -1032,7 +1032,7 @@ public: class ECMA_PUBLIC_API SharedInt8ArrayRef : public TypedArrayRef { public: - static Local New(const EcmaVM *vm, Local buffer, + static Local New(const EcmaVM *vm, Local buffer, int32_t byteOffset, int32_t length); }; @@ -1043,7 +1043,7 @@ public: class ECMA_PUBLIC_API SharedUint8ArrayRef : public TypedArrayRef { public: - static Local New(const EcmaVM *vm, Local buffer, + static Local New(const EcmaVM *vm, Local buffer, int32_t byteOffset, int32_t length); }; @@ -1060,7 +1060,7 @@ public: class ECMA_PUBLIC_API SharedInt16ArrayRef : public TypedArrayRef { public: - static Local New(const EcmaVM *vm, Local buffer, + static Local New(const EcmaVM *vm, Local buffer, int32_t byteOffset, int32_t length); }; @@ -1072,7 +1072,7 @@ public: class ECMA_PUBLIC_API SharedUint16ArrayRef : public TypedArrayRef { public: - static Local New(const EcmaVM *vm, Local buffer, + static Local New(const EcmaVM *vm, Local buffer, int32_t byteOffset, int32_t length); }; @@ -1083,7 +1083,7 @@ public: class ECMA_PUBLIC_API SharedInt32ArrayRef : public TypedArrayRef { public: - static Local New(const EcmaVM *vm, Local buffer, + static Local New(const EcmaVM *vm, Local buffer, int32_t byteOffset, int32_t length); }; @@ -1095,7 +1095,7 @@ public: class ECMA_PUBLIC_API SharedUint32ArrayRef : public TypedArrayRef { public: - static Local New(const EcmaVM *vm, Local buffer, + static Local New(const EcmaVM *vm, Local buffer, int32_t byteOffset, int32_t length); }; diff --git a/ecmascript/napi/jsnapi.cpp b/ecmascript/napi/jsnapi.cpp index a36a5e0c00e32db490b4d1bd454d3cc1a3a3f358..0a71158a8f6e0b8ae443a8a77bb5dba99f791343 100644 --- a/ecmascript/napi/jsnapi.cpp +++ b/ecmascript/napi/jsnapi.cpp @@ -230,7 +230,7 @@ TYPED_ARRAY_ALL(TYPED_ARRAY_NEW) #define SENDABLE_TYPED_ARRAY_NEW(Type) \ Local Type##Ref::New( \ - const EcmaVM *vm, Local buffer, int32_t byteOffset, int32_t length) \ + const EcmaVM *vm, Local buffer, int32_t byteOffset, int32_t length) \ { \ CROSS_THREAD_AND_EXCEPTION_CHECK_WITH_RETURN(vm, JSValueRef::Undefined(vm)); \ ecmascript::ThreadManagedScope managedScope(vm->GetJSThread()); \ diff --git a/ecmascript/napi/jsnapi_expo.cpp b/ecmascript/napi/jsnapi_expo.cpp index 07a8480f1f9333e800ec2f2cd12b0c5a2796e585..85576392994ec07eaf298046bce72f1bd857a045 100644 --- a/ecmascript/napi/jsnapi_expo.cpp +++ b/ecmascript/napi/jsnapi_expo.cpp @@ -944,7 +944,7 @@ bool JSValueRef::IsVector() bool JSValueRef::IsSharedObject() { - return JSNApiHelper::ToJSTaggedValue(this).IsJSSharedObject(); + return IsJSShared() && IsObject(); } bool JSValueRef::IsSharedFunction() @@ -1019,16 +1019,23 @@ bool JSValueRef::IsDetachedArraybuffer(bool &isArrayBuffer) void JSValueRef::DetachedArraybuffer(const EcmaVM *vm, bool &isArrayBuffer) { - if (!IsArrayBuffer()) { + if (IsArrayBuffer()) { + JSHandle arrayBuffer(JSNApiHelper::ToJSHandle(this)); + if (arrayBuffer->IsDetach()) { + return; + } + arrayBuffer->Detach(vm->GetJSThread()); + isArrayBuffer = true; + } else if (IsSendableArrayBuffer()) { + JSHandle arrayBuffer(JSNApiHelper::ToJSHandle(this)); + if (arrayBuffer->IsDetach()) { + return; + } + arrayBuffer->Detach(vm->GetJSThread()); + isArrayBuffer = true; + } else { isArrayBuffer = false; - return; - } - isArrayBuffer = true; - JSHandle arrayBuffer(JSNApiHelper::ToJSHandle(this)); - if (arrayBuffer->IsDetach()) { - return; } - arrayBuffer->Detach(vm->GetJSThread()); } void JSValueRef::GetDataViewInfo(const EcmaVM *vm,