diff --git a/src/js_native_api_v8.cc b/src/js_native_api_v8.cc index 0b90532635d9a39a0e7f9b896f816795a0927552..47241a83ae6d0dcd7935ea37f043c3ad8aa9bada 100644 --- a/src/js_native_api_v8.cc +++ b/src/js_native_api_v8.cc @@ -5019,62 +5019,67 @@ JSVM_Status JSVM_CDECL OH_JSVM_IsBigInt(JSVM_Env env, return jsvm_clear_last_error(env); } -JSVM_Status JSVM_CDECL OH_JSVM_CreateSet(JSVM_Env env, - JSVM_Value* result) { - CHECK_ENV(env); - CHECK_ARG(env, result); +JSVM_Status JSVM_CDECL OH_JSVM_IsConstructor(JSVM_Env env, + JSVM_Value value, + bool* isConstructor) +{ + CHECK_ENV(env); + CHECK_ARG(env, value); + CHECK_ARG(env, isConstructor); - *result = v8impl::JsValueFromV8LocalValue(v8::Set::New(env->isolate)); + v8::Local val = v8impl::V8LocalValueFromJsValue(value); + if (!val->IsObject()) { + *isConstructor = false; + return jsvm_clear_last_error(env); + } + v8::Local obj = val.As(); + *isConstructor = obj->IsConstructor(); - return jsvm_clear_last_error(env); + return jsvm_clear_last_error(env); } -JSVM_Status JSVM_CDECL OH_JSVM_IsSet(JSVM_Env env, - JSVM_Value value, - bool* isSet) { - CHECK_ENV(env); - CHECK_ARG(env, value); - CHECK_ARG(env, isSet); +JSVM_Status JSVM_CDECL OH_JSVM_CreateRegExp(JSVM_Env env, + JSVM_Value value, + JSVM_RegExpFlags flags, + JSVM_Value* result) +{ + JSVM_PREAMBLE(env); + CHECK_ARG(env, value); + CHECK_ARG(env, result); - v8::Local val = v8impl::V8LocalValueFromJsValue(value); - *isSet = val->IsSet(); + v8::Local pattern = v8impl::V8LocalValueFromJsValue(value); + RETURN_STATUS_IF_FALSE(env, pattern->IsString(), JSVM_STRING_EXPECTED); + v8::Local context = env->context(); + v8::MaybeLocal regExp = v8::RegExp::New(context, pattern.As(), + static_cast(flags)); + CHECK_MAYBE_EMPTY(env, regExp, JSVM_GENERIC_FAILURE); + *result = v8impl::JsValueFromV8LocalValue(regExp.ToLocalChecked()); - return jsvm_clear_last_error(env); + return GET_RETURN_STATUS(env); } -JSVM_Status JSVM_CDECL OH_JSVM_ObjectGetPrototypeOf(JSVM_Env env, - JSVM_Value object, - JSVM_Value* result) { - JSVM_PREAMBLE(env); - CHECK_ARG(env, result); - - v8::Local context = env->context(); +JSVM_Status JSVM_CDECL OH_JSVM_CreateMap(JSVM_Env env, JSVM_Value* result) +{ + CHECK_ENV(env); + CHECK_ARG(env, result); - v8::Local obj; - CHECK_TO_OBJECT(env, context, obj, object); + *result = v8impl::JsValueFromV8LocalValue(v8::Map::New(env->isolate)); - v8::Local val = obj->GetPrototypeV2(); - *result = v8impl::JsValueFromV8LocalValue(val); - return GET_RETURN_STATUS(env); + return jsvm_clear_last_error(env); } -JSVM_Status JSVM_CDECL OH_JSVM_ObjectSetPrototypeOf(JSVM_Env env, - JSVM_Value object, - JSVM_Value prototype) { - JSVM_PREAMBLE(env); - CHECK_ARG(env, prototype); - - v8::Local context = env->context(); - - v8::Local obj; - CHECK_TO_OBJECT(env, context, obj, object); +JSVM_Status JSVM_CDECL OH_JSVM_IsMap(JSVM_Env env, + JSVM_Value value, + bool* isMap) +{ + CHECK_ENV(env); + CHECK_ARG(env, value); + CHECK_ARG(env, isMap); - v8::Local type = v8impl::V8LocalValueFromJsValue(prototype); - RETURN_STATUS_IF_FALSE(env, type->IsObject(), JSVM_INVALID_ARG); - v8::Maybe set_maybe = obj->SetPrototypeV2(context, type); + v8::Local val = v8impl::V8LocalValueFromJsValue(value); - RETURN_STATUS_IF_FALSE(env, set_maybe.FromMaybe(false), JSVM_GENERIC_FAILURE); - return GET_RETURN_STATUS(env); + *isMap = val->IsMap(); + return jsvm_clear_last_error(env); } JSVM_Status JSVM_CDECL OH_JSVM_RetainScript(JSVM_Env env, JSVM_Script script) { @@ -5145,67 +5150,62 @@ JSVM_Status JSVM_CDECL OH_JSVM_OpenInspectorWithName(JSVM_Env env, return GET_RETURN_STATUS(env); } -JSVM_Status JSVM_CDECL OH_JSVM_IsConstructor(JSVM_Env env, - JSVM_Value value, - bool* isConstructor) -{ - CHECK_ENV(env); - CHECK_ARG(env, value); - CHECK_ARG(env, isConstructor); +JSVM_Status JSVM_CDECL OH_JSVM_CreateSet(JSVM_Env env, + JSVM_Value* result) { + CHECK_ENV(env); + CHECK_ARG(env, result); - v8::Local val = v8impl::V8LocalValueFromJsValue(value); - if (!val->IsObject()) { - *isConstructor = false; - return jsvm_clear_last_error(env); - } - v8::Local obj = val.As(); - *isConstructor = obj->IsConstructor(); + *result = v8impl::JsValueFromV8LocalValue(v8::Set::New(env->isolate)); - return jsvm_clear_last_error(env); + return jsvm_clear_last_error(env); } -JSVM_Status JSVM_CDECL OH_JSVM_CreateRegExp(JSVM_Env env, - JSVM_Value value, - JSVM_RegExpFlags flags, - JSVM_Value* result) -{ - JSVM_PREAMBLE(env); - CHECK_ARG(env, value); - CHECK_ARG(env, result); +JSVM_Status JSVM_CDECL OH_JSVM_IsSet(JSVM_Env env, + JSVM_Value value, + bool* isSet) { + CHECK_ENV(env); + CHECK_ARG(env, value); + CHECK_ARG(env, isSet); - v8::Local pattern = v8impl::V8LocalValueFromJsValue(value); - RETURN_STATUS_IF_FALSE(env, pattern->IsString(), JSVM_STRING_EXPECTED); - v8::Local context = env->context(); - v8::MaybeLocal regExp = v8::RegExp::New(context, pattern.As(), - static_cast(flags)); - CHECK_MAYBE_EMPTY(env, regExp, JSVM_GENERIC_FAILURE); - *result = v8impl::JsValueFromV8LocalValue(regExp.ToLocalChecked()); + v8::Local val = v8impl::V8LocalValueFromJsValue(value); + *isSet = val->IsSet(); - return GET_RETURN_STATUS(env); + return jsvm_clear_last_error(env); } -JSVM_Status JSVM_CDECL OH_JSVM_CreateMap(JSVM_Env env, JSVM_Value* result) -{ - CHECK_ENV(env); - CHECK_ARG(env, result); +JSVM_Status JSVM_CDECL OH_JSVM_ObjectGetPrototypeOf(JSVM_Env env, + JSVM_Value object, + JSVM_Value* result) { + JSVM_PREAMBLE(env); + CHECK_ARG(env, result); - *result = v8impl::JsValueFromV8LocalValue(v8::Map::New(env->isolate)); + v8::Local context = env->context(); - return jsvm_clear_last_error(env); + v8::Local obj; + CHECK_TO_OBJECT(env, context, obj, object); + + v8::Local val = obj->GetPrototypeV2(); + *result = v8impl::JsValueFromV8LocalValue(val); + return GET_RETURN_STATUS(env); } -JSVM_Status JSVM_CDECL OH_JSVM_IsMap(JSVM_Env env, - JSVM_Value value, - bool* isMap) -{ - CHECK_ENV(env); - CHECK_ARG(env, value); - CHECK_ARG(env, isMap); +JSVM_Status JSVM_CDECL OH_JSVM_ObjectSetPrototypeOf(JSVM_Env env, + JSVM_Value object, + JSVM_Value prototype) { + JSVM_PREAMBLE(env); + CHECK_ARG(env, prototype); - v8::Local val = v8impl::V8LocalValueFromJsValue(value); + v8::Local context = env->context(); - *isMap = val->IsMap(); - return jsvm_clear_last_error(env); + v8::Local obj; + CHECK_TO_OBJECT(env, context, obj, object); + + v8::Local type = v8impl::V8LocalValueFromJsValue(prototype); + RETURN_STATUS_IF_FALSE(env, type->IsObject(), JSVM_INVALID_ARG); + v8::Maybe set_maybe = obj->SetPrototypeV2(context, type); + + RETURN_STATUS_IF_FALSE(env, set_maybe.FromMaybe(false), JSVM_GENERIC_FAILURE); + return GET_RETURN_STATUS(env); } JSVM_Status JSVM_CDECL OH_JSVM_CompileWasmModule(JSVM_Env env, diff --git a/src/jsvm.h b/src/jsvm.h index 32241b3a99aad35eed196f1a594c16a5ca062b7a..06ef58098cc94618a08cd364488e6cd9d21b3819 100644 --- a/src/jsvm.h +++ b/src/jsvm.h @@ -2601,6 +2601,64 @@ JSVM_EXTERN JSVM_Status OH_JSVM_CreateFunctionWithScript(JSVM_Env env, JSVM_Value script, JSVM_Value* result); +/** + * @brief This API checks if the value passed in is a constructor. + * + * @param env: The environment that the API is invoked under. + * @param value: The JavaScript value to check. + * @param isConstructor: Whether the given value is Constructor. + * @return Returns JSVM_OK if the API succeeded. Returns JSVM_INVALID_ARG if the API failed. + * @since 12 + */ +JSVM_Status JSVM_CDECL OH_JSVM_IsConstructor(JSVM_Env env, + JSVM_Value value, + bool* isConstructor); + +/** + * @brief This API returns the JavaScript value of the regular expression + * corresponding to the input. + * The interface may throw an exception. + * + * @param env: The environment that the API is invoked under. + * @param value: The JavaScript string to convert to a regular expression. + * @param flags: Regular expression flag bits. + * @param result: A JSVM_Value representing a JavaScript RegExp. + * @return Only returns JSVM function's result code. + * {@link JSVM_OK } If the API succeeded.\n + * {@link JSVM_INVALID_ARG } If the input parameter is invalid.\n + * {@link JSVM_STRING_EXPECTED } If the value of 'value' is not a string.\n + * {@link JSVM_GENERIC_FAILURE } If create RegExp failed.\n + * {@link JSVM_PENDING_EXCEPTION } If the API throws an exception during runtime.\n + * @since 12 + */ +JSVM_Status JSVM_CDECL OH_JSVM_CreateRegExp(JSVM_Env env, + JSVM_Value value, + JSVM_RegExpFlags flags, + JSVM_Value* result); + +/** + * @brief This API returns a JSVM-API value corresponding to a JavaScript Map type. + * + * @param env: The environment that the API is invoked under. + * @param result: A JSVM_Value representing a JavaScript Map. + * @return Returns JSVM_OK if the API succeeded. Returns JSVM_INVALID_ARG if the API failed. + * @since 12 + */ +JSVM_Status JSVM_CDECL OH_JSVM_CreateMap(JSVM_Env env, JSVM_Value* result); + +/** + * @brief This API checks if the value passed in is a Map. + * + * @param env: The environment that the API is invoked under. + * @param value: The JavaScript value to check. + * @param isMap: Whether the given value is Map. + * @return Returns JSVM_OK if the API succeeded. Returns JSVM_INVALID_ARG if the API failed. + * @since 12 + */ +JSVM_Status JSVM_CDECL OH_JSVM_IsMap(JSVM_Env env, + JSVM_Value value, + bool* isMap); + /** * @brief This API returns a JSVM-API value corresponding to a JavaScript Set type. * @@ -2651,7 +2709,7 @@ JSVM_EXTERN JSVM_Status OH_JSVM_ObjectSetPrototypeOf(JSVM_Env env, JSVM_Value object, JSVM_Value prototype); -/* +/** * @brief This function keep persistently save a JSVM_Script and extend its lifecycle * beyond the current scope. * @@ -2692,60 +2750,6 @@ JSVM_EXTERN JSVM_Status OH_JSVM_OpenInspectorWithName(JSVM_Env env, int pid, const char* name); -/** - * @brief This API checks if the value passed in is a constructor. - * - * @param env: The environment that the API is invoked under. - * @param value: The JavaScript value to check. - * @param isConstructor: Whether the given value is Constructor. - * @return Returns JSVM_OK if the API succeeded. Returns JSVM_INVALID_ARG if the API failed. - * @since 12 - */ -JSVM_Status JSVM_CDECL OH_JSVM_IsConstructor(JSVM_Env env, - JSVM_Value value, - bool* isConstructor); - -/** - * @brief This API returns the JavaScript value of the regular expression - * corresponding to the input. - * The interface may throw an exception. - * - * @param env: The environment that the API is invoked under. - * @param value: The JavaScript string to convert to a regular expression. - * @param flags: Regular expression flag bits. - * @param result: A JSVM_Value representing a JavaScript RegExp. - * @return Returns JSVM_OK if the API succeeded. - * Returns JSVM_PENDING_EXCPTION or JSVM_INVALID_ARG or JSVM_GENERIC_FAILURE if the API failed. - * @since 12 - */ -JSVM_Status JSVM_CDECL OH_JSVM_CreateRegExp(JSVM_Env env, - JSVM_Value value, - JSVM_RegExpFlags flags, - JSVM_Value* result); - -/** - * @brief This API returns a JSVM-API value corresponding to a JavaScript Map type. - * - * @param env: The environment that the API is invoked under. - * @param result: A JSVM_Value representing a JavaScript Map. - * @return Returns JSVM_OK if the API succeeded. Returns JSVM_INVALID_ARG if the API failed. - * @since 12 - */ -JSVM_Status JSVM_CDECL OH_JSVM_CreateMap(JSVM_Env env, JSVM_Value* result); - -/** - * @brief This API checks if the value passed in is a Map. - * - * @param env: The environment that the API is invoked under. - * @param value: The JavaScript value to check. - * @param isMap: Whether the given value is Map. - * @return Returns JSVM_OK if the API succeeded. Returns JSVM_INVALID_ARG if the API failed. - * @since 12 - */ -JSVM_Status JSVM_CDECL OH_JSVM_IsMap(JSVM_Env env, - JSVM_Value value, - bool* isMap); - /** * @brief Compile WebAssembly bytecode into a WebAssembly module. * If WebAssembly cache provided, deserialization will be performed. diff --git a/src/jsvm_types.h b/src/jsvm_types.h index 139fec1b6568546217b6b611ca6f6ef18d8d163e..7abb16a3f1087b39dd8e7aa2125364e3741eb28b 100644 --- a/src/jsvm_types.h +++ b/src/jsvm_types.h @@ -661,6 +661,34 @@ typedef struct { size_t resourceColumnOffset; } JSVM_ScriptOrigin; +/** + * @brief Regular expression flag bits. They can be or'ed to enable a set of flags. + * + * @since 12 + */ +typedef enum { + /** None mode. */ + JSVM_REGEXP_NONE = 0, + /** Global mode. */ + JSVM_REGEXP_GLOBAL = 1 << 0, + /** Ignore Case mode. */ + JSVM_REGEXP_IGNORE_CASE = 1 << 1, + /** Multiline mode. */ + JSVM_REGEXP_MULTILINE = 1 << 2, + /** Sticky mode. */ + JSVM_REGEXP_STICKY = 1 << 3, + /** Unicode mode. */ + JSVM_REGEXP_UNICODE = 1 << 4, + /** dotAll mode. */ + JSVM_REGEXP_DOT_ALL = 1 << 5, + /** Linear mode. */ + JSVM_REGEXP_LINEAR = 1 << 6, + /** Has Indices mode. */ + JSVM_REGEXP_HAS_INDICES = 1 << 7, + /** Unicode Sets mode. */ + JSVM_REGEXP_UNICODE_SETS = 1 << 8, +} JSVM_RegExpFlags; + /** * @brief Compile Options * @@ -728,34 +756,6 @@ typedef const struct { size_t length; } JSVM_CompileProfile; -/** - * @brief Regular expression flag bits. They can be or'ed to enable a set of flags. - * - * @since 12 - */ -typedef enum { - /** None mode. */ - JSVM_REGEXP_NONE = 0, - /** Global mode. */ - JSVM_REGEXP_GLOBAL = 1 << 0, - /** Ignore Case mode. */ - JSVM_REGEXP_IGNORE_CASE = 1 << 1, - /** Multiline mode. */ - JSVM_REGEXP_MULTILINE = 1 << 2, - /** Sticky mode. */ - JSVM_REGEXP_STICKY = 1 << 3, - /** Unicode mode. */ - JSVM_REGEXP_UNICODE = 1 << 4, - /** dotAll mode. */ - JSVM_REGEXP_DOT_ALL = 1 << 5, - /** Linear mode. */ - JSVM_REGEXP_LINEAR = 1 << 6, - /** Has Indices mode. */ - JSVM_REGEXP_HAS_INDICES = 1 << 7, - /** Unicode Sets mode. */ - JSVM_REGEXP_UNICODE_SETS = 1 << 8, -} JSVM_RegExpFlags; - /** * @brief initialization flag *