diff --git a/ecmascript/global_env_constants.cpp b/ecmascript/global_env_constants.cpp index a578151ea4c31e5c6f6270f505cdf052cf53a1c2..de00a48e39473acc7cfc573a55649baa067d3844 100644 --- a/ecmascript/global_env_constants.cpp +++ b/ecmascript/global_env_constants.cpp @@ -155,7 +155,7 @@ void GlobalEnvConstants::InitSharedRootsClasses(ObjectFactory *factory) factory->NewSEcmaReadOnlyHClass(hClass, 0, JSType::COW_TAGGED_ARRAY)); SetConstant(ConstantIndex::BIGINT_CLASS_INDEX, factory->NewSEcmaReadOnlyHClass(hClass, BigInt::SIZE, JSType::BIGINT)); - SetConstant(ConstantIndex::JS_NATIVE_POINTER_CLASS_INDEX, + SetConstant(ConstantIndex::SENDABLE_JS_NATIVE_POINTER_CLASS_INDEX, factory->NewSEcmaReadOnlyHClass(hClass, JSNativePointer::SIZE, JSType::JS_NATIVE_POINTER)); SetConstant(ConstantIndex::ENV_CLASS_INDEX, factory->NewSEcmaReadOnlyHClass(hClass, 0, JSType::LEXICAL_ENV)); @@ -308,6 +308,9 @@ void GlobalEnvConstants::InitRootsClassesPartOne(JSHClass *hClass, ObjectFactory factory->CreateDefaultClassConstructorHClass(hClass)); SetConstant(ConstantIndex::JS_PROXY_ORDINARY_CLASS_INDEX, factory->NewEcmaHClass(hClass, JSProxy::SIZE, JSType::JS_PROXY)); + // napi_wrap need set NativePointer to object, so only mark the shared bit in shared JSNativePointer hclass. + SetConstant(ConstantIndex::JS_NATIVE_POINTER_CLASS_INDEX, + factory->NewEcmaReadOnlyHClass(hClass, JSNativePointer::SIZE, JSType::JS_NATIVE_POINTER)); } void GlobalEnvConstants::InitRootsClassesPartTwo(JSHClass *hClass, ObjectFactory *factory) diff --git a/ecmascript/global_env_constants.h b/ecmascript/global_env_constants.h index 3fd4441d3a94c32e04dd24277894fbc69f4f07fe..ab6f99df1a2ab134d988c22303d7029839acb520 100644 --- a/ecmascript/global_env_constants.h +++ b/ecmascript/global_env_constants.h @@ -51,6 +51,7 @@ class ObjectFactory; V(JSTaggedValue, COWMutantTaggedArrayClass, COW_MUTANT_TAGGED_ARRAY_CLASS_INDEX, ecma_roots_class) \ V(JSTaggedValue, BigIntClass, BIGINT_CLASS_INDEX, ecma_roots_class) \ V(JSTaggedValue, JSNativePointerClass, JS_NATIVE_POINTER_CLASS_INDEX, ecma_roots_class) \ + V(JSTaggedValue, SJSNativePointerClass, SENDABLE_JS_NATIVE_POINTER_CLASS_INDEX, ecma_roots_class) \ V(JSTaggedValue, EnvClass, ENV_CLASS_INDEX, ecma_roots_class) \ V(JSTaggedValue, SymbolClass, SYMBOL_CLASS_INDEX, ecma_roots_class) \ V(JSTaggedValue, AccessorDataClass, ACCESSOR_DATA_CLASS_INDEX, ecma_roots_class) \ diff --git a/ecmascript/napi/include/jsnapi_expo.h b/ecmascript/napi/include/jsnapi_expo.h index e90012c83f3e88524ecede126dcd6d85b1d3ceec..103b5b461c748d311c2fde8e0105fbec1e2885dd 100644 --- a/ecmascript/napi/include/jsnapi_expo.h +++ b/ecmascript/napi/include/jsnapi_expo.h @@ -504,8 +504,7 @@ public: bool IsTreeMap(); bool IsTreeSet(); bool IsVector(); - bool IsSharedObject(); - bool IsSharedFunction(); + bool IsSendableObject(); bool IsJSShared(); bool IsSharedArray(); bool IsSharedTypedArray(); @@ -659,8 +658,8 @@ public: void *data, size_t nativeBindingsize = 0); static Local NewSendable(const EcmaVM *vm, void *nativePointer, - NativePointerCallback callBack, - void *data, + NativePointerCallback callBack = nullptr, + void *data = nullptr, size_t nativeBindingsize = 0); void *Value(); }; @@ -1030,10 +1029,10 @@ public: static Local New(const EcmaVM *vm, Local buffer, int32_t byteOffset, int32_t length); }; -class ECMA_PUBLIC_API SharedInt8ArrayRef : public TypedArrayRef { +class ECMA_PUBLIC_API SharedInt8ArrayRef : public SendableTypedArrayRef { public: static Local New(const EcmaVM *vm, Local buffer, - int32_t byteOffset, int32_t length); + int32_t byteOffset, int32_t length); }; class ECMA_PUBLIC_API Uint8ArrayRef : public TypedArrayRef { @@ -1041,10 +1040,10 @@ public: static Local New(const EcmaVM *vm, Local buffer, int32_t byteOffset, int32_t length); }; -class ECMA_PUBLIC_API SharedUint8ArrayRef : public TypedArrayRef { +class ECMA_PUBLIC_API SharedUint8ArrayRef : public SendableTypedArrayRef { public: static Local New(const EcmaVM *vm, Local buffer, - int32_t byteOffset, int32_t length); + int32_t byteOffset, int32_t length); }; class ECMA_PUBLIC_API Uint8ClampedArrayRef : public TypedArrayRef { @@ -1058,10 +1057,10 @@ public: static Local New(const EcmaVM *vm, Local buffer, int32_t byteOffset, int32_t length); }; -class ECMA_PUBLIC_API SharedInt16ArrayRef : public TypedArrayRef { +class ECMA_PUBLIC_API SharedInt16ArrayRef : public SendableTypedArrayRef { public: static Local New(const EcmaVM *vm, Local buffer, - int32_t byteOffset, int32_t length); + int32_t byteOffset, int32_t length); }; class ECMA_PUBLIC_API Uint16ArrayRef : public TypedArrayRef { @@ -1070,10 +1069,10 @@ public: int32_t length); }; -class ECMA_PUBLIC_API SharedUint16ArrayRef : public TypedArrayRef { +class ECMA_PUBLIC_API SharedUint16ArrayRef : public SendableTypedArrayRef { public: static Local New(const EcmaVM *vm, Local buffer, - int32_t byteOffset, int32_t length); + int32_t byteOffset, int32_t length); }; class ECMA_PUBLIC_API Int32ArrayRef : public TypedArrayRef { @@ -1081,10 +1080,10 @@ public: static Local New(const EcmaVM *vm, Local buffer, int32_t byteOffset, int32_t length); }; -class ECMA_PUBLIC_API SharedInt32ArrayRef : public TypedArrayRef { +class ECMA_PUBLIC_API SharedInt32ArrayRef : public SendableTypedArrayRef { public: static Local New(const EcmaVM *vm, Local buffer, - int32_t byteOffset, int32_t length); + int32_t byteOffset, int32_t length); }; class ECMA_PUBLIC_API Uint32ArrayRef : public TypedArrayRef { @@ -1093,10 +1092,10 @@ public: int32_t length); }; -class ECMA_PUBLIC_API SharedUint32ArrayRef : public TypedArrayRef { +class ECMA_PUBLIC_API SharedUint32ArrayRef : public SendableTypedArrayRef { public: static Local New(const EcmaVM *vm, Local buffer, - int32_t byteOffset, int32_t length); + int32_t byteOffset, int32_t length); }; class ECMA_PUBLIC_API Float32ArrayRef : public TypedArrayRef { diff --git a/ecmascript/napi/jsnapi_expo.cpp b/ecmascript/napi/jsnapi_expo.cpp index 85576392994ec07eaf298046bce72f1bd857a045..9400942462fcc85ceaa42043543d322f81e9aaf9 100644 --- a/ecmascript/napi/jsnapi_expo.cpp +++ b/ecmascript/napi/jsnapi_expo.cpp @@ -942,16 +942,11 @@ bool JSValueRef::IsVector() return JSNApiHelper::ToJSTaggedValue(this).IsJSAPIVector(); } -bool JSValueRef::IsSharedObject() +bool JSValueRef::IsSendableObject() { return IsJSShared() && IsObject(); } -bool JSValueRef::IsSharedFunction() -{ - return JSNApiHelper::ToJSTaggedValue(this).IsJSSharedFunction(); -} - bool JSValueRef::IsJSShared() { return JSNApiHelper::ToJSTaggedValue(this).IsJSShared(); diff --git a/ecmascript/shared_object_factory.cpp b/ecmascript/shared_object_factory.cpp index fd9527d9d952e24803506a6b554aaf060bc86204..4fd5d7ca48851677caa5764df77a150b76b8b146 100644 --- a/ecmascript/shared_object_factory.cpp +++ b/ecmascript/shared_object_factory.cpp @@ -458,7 +458,9 @@ JSHandle ObjectFactory::NewSJSNativePointer(void *externalPoint { NewSObjectHook(); TaggedObject *header; - auto jsNativePointerClass = JSHClass::Cast(thread_->GlobalConstants()->GetJSNativePointerClass().GetTaggedObject()); + auto jsNativePointerClass = + JSHClass::Cast(thread_->GlobalConstants()->GetSJSNativePointerClass().GetTaggedObject()); + jsNativePointerClass->SetIsJSShared(true); if (nonMovable) { header = sHeap_->AllocateNonMovableOrHugeObject(thread_, jsNativePointerClass); } else {