mirror of
https://gitee.com/openharmony/arkcompiler_ets_runtime
synced 2024-10-07 16:13:49 +00:00
add function::new with deleter
Signed-off-by: zhangyukun <zhangyukun8@huawei.com> Change-Id: Ic0a743e95750ac10198f096d65470c9bf71b965c
This commit is contained in:
parent
e89dc0131f
commit
477c423be2
@ -46,6 +46,7 @@ namespace ecmascript {
|
||||
class EcmaVM;
|
||||
} // namespace ecmascript
|
||||
|
||||
using Deleter = void (*)(void *buffer, void *data);
|
||||
using EcmaVM = ecmascript::EcmaVM;
|
||||
using JSTaggedType = uint64_t;
|
||||
static constexpr uint32_t DEFAULT_GC_POOL_SIZE = 256 * 1024 * 1024;
|
||||
@ -514,7 +515,9 @@ using FunctionCallbackWithNewTarget =
|
||||
class PUBLIC_API FunctionRef : public ObjectRef {
|
||||
public:
|
||||
static Local<FunctionRef> New(EcmaVM *vm, FunctionCallback nativeFunc, void *data);
|
||||
static Local<FunctionRef> NewClassFunction(EcmaVM *vm, FunctionCallbackWithNewTarget nativeFunc, void *data);
|
||||
static Local<FunctionRef> New(EcmaVM *vm, FunctionCallback nativeFunc, Deleter deleter, void *data);
|
||||
static Local<FunctionRef> NewClassFunction(EcmaVM *vm, FunctionCallbackWithNewTarget nativeFunc, Deleter deleter,
|
||||
void *data);
|
||||
Local<JSValueRef> Call(const EcmaVM *vm, Local<JSValueRef> thisObj, const Local<JSValueRef> argv[],
|
||||
int32_t length);
|
||||
Local<JSValueRef> Constructor(const EcmaVM *vm, const Local<JSValueRef> argv[], int32_t length);
|
||||
@ -547,7 +550,6 @@ public:
|
||||
Local<PromiseRef> GetPromise(const EcmaVM *vm);
|
||||
};
|
||||
|
||||
using Deleter = void (*)(void *buffer, void *data);
|
||||
class PUBLIC_API ArrayBufferRef : public ObjectRef {
|
||||
public:
|
||||
static Local<ArrayBufferRef> New(const EcmaVM *vm, int32_t length);
|
||||
|
@ -744,7 +744,22 @@ Local<FunctionRef> FunctionRef::New(EcmaVM *vm, FunctionCallback nativeFunc, voi
|
||||
return JSNApiHelper::ToLocal<FunctionRef>(JSHandle<JSTaggedValue>(current));
|
||||
}
|
||||
|
||||
Local<FunctionRef> FunctionRef::NewClassFunction(EcmaVM *vm, FunctionCallbackWithNewTarget nativeFunc, void *data)
|
||||
Local<FunctionRef> FunctionRef::New(EcmaVM *vm, FunctionCallback nativeFunc, Deleter deleter, void *data)
|
||||
{
|
||||
JSThread *thread = vm->GetJSThread();
|
||||
ObjectFactory *factory = vm->GetFactory();
|
||||
JSHandle<GlobalEnv> env = vm->GetGlobalEnv();
|
||||
JSHandle<JSFunction> current(factory->NewJSFunction(env, reinterpret_cast<void *>(Callback::RegisterCallback)));
|
||||
JSHandle<JSNativePointer> funcCallback = factory->NewJSNativePointer(reinterpret_cast<void *>(nativeFunc));
|
||||
JSHandle<JSNativePointer> dataCaddress = factory->NewJSNativePointer(data, deleter, nullptr);
|
||||
vm->PushToArrayDataList(*dataCaddress);
|
||||
JSHandle<JSFunctionExtraInfo> extraInfo(factory->NewFunctionExtraInfo(funcCallback, dataCaddress));
|
||||
current->SetFunctionExtraInfo(thread, extraInfo.GetTaggedValue());
|
||||
return JSNApiHelper::ToLocal<FunctionRef>(JSHandle<JSTaggedValue>(current));
|
||||
}
|
||||
|
||||
Local<FunctionRef> FunctionRef::NewClassFunction(EcmaVM *vm, FunctionCallbackWithNewTarget nativeFunc, Deleter deleter,
|
||||
void *data)
|
||||
{
|
||||
JSThread *thread = vm->GetJSThread();
|
||||
ObjectFactory *factory = vm->GetFactory();
|
||||
@ -755,7 +770,13 @@ Local<FunctionRef> FunctionRef::NewClassFunction(EcmaVM *vm, FunctionCallbackWit
|
||||
JSHandle<JSFunction> current =
|
||||
factory->NewJSFunctionByDynClass(method, dynclass, ecmascript::FunctionKind::CLASS_CONSTRUCTOR);
|
||||
JSHandle<JSNativePointer> funcCallback = factory->NewJSNativePointer(reinterpret_cast<void *>(nativeFunc));
|
||||
JSHandle<JSNativePointer> dataCaddress = factory->NewJSNativePointer(data);
|
||||
JSHandle<JSNativePointer> dataCaddress(thread, JSTaggedValue::Undefined());
|
||||
if (deleter == nullptr) {
|
||||
dataCaddress = factory->NewJSNativePointer(data);
|
||||
} else {
|
||||
dataCaddress = factory->NewJSNativePointer(data, deleter, nullptr);
|
||||
vm->PushToArrayDataList(*dataCaddress);
|
||||
}
|
||||
JSHandle<JSFunctionExtraInfo> extraInfo(factory->NewFunctionExtraInfo(funcCallback, dataCaddress));
|
||||
current->SetFunctionExtraInfo(thread, extraInfo.GetTaggedValue());
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user