From 123094249921569069ef5a68b957aaea826b4c36 Mon Sep 17 00:00:00 2001 From: zhangsizheng Date: Fri, 13 Jun 2025 10:51:10 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dscopeinfo=E5=BC=95=E8=B5=B7?= =?UTF-8?q?=E7=9A=84is=E7=B1=BB=E5=9E=8BAPI=E5=8A=A3=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhangsizheng --- src/js_native_api_v8.cpp | 44 +++++++++++++++++++++++++++++++--------- src/js_native_api_v8.h | 8 ++++++++ 2 files changed, 42 insertions(+), 10 deletions(-) diff --git a/src/js_native_api_v8.cpp b/src/js_native_api_v8.cpp index 70c5422..f87cf58 100644 --- a/src/js_native_api_v8.cpp +++ b/src/js_native_api_v8.cpp @@ -4545,6 +4545,14 @@ JSVM_Status OH_JSVM_IsCallable(JSVM_Env env, JSVM_Value value, bool* isCallable) return ClearLastError(env); } +FORCE_INLINE JSVM_Status IsUndefinedImpl(JSVM_Env env, JSVM_Value value, bool* isUndefined) +{ + v8::Local val = v8impl::V8LocalValueFromJsValue(value); + *isUndefined = val->IsUndefined(); + + return ClearLastError(env); +} + JSVM_Status OH_JSVM_IsUndefined(JSVM_Env env, JSVM_Value value, bool* isUndefined) { // Omit JSVM_PREAMBLE and GET_RETURN_STATUS because V8 @@ -4552,9 +4560,15 @@ JSVM_Status OH_JSVM_IsUndefined(JSVM_Env env, JSVM_Value value, bool* isUndefine CHECK_ENV(env); CHECK_ARG(env, value); CHECK_ARG(env, isUndefined); + CHECK_SCOPE_ISTYPE(env, value, IsUndefinedImpl(env, value, isUndefined)); + + return IsUndefinedImpl(env, value, isUndefined); +} +FORCE_INLINE JSVM_Status IsNullImpl(JSVM_Env env, JSVM_Value value, bool* isNull) +{ v8::Local val = v8impl::V8LocalValueFromJsValue(value); - *isUndefined = val->IsUndefined(); + *isNull = val->IsNull(); return ClearLastError(env); } @@ -4566,9 +4580,15 @@ JSVM_Status OH_JSVM_IsNull(JSVM_Env env, JSVM_Value value, bool* isNull) CHECK_ENV(env); CHECK_ARG(env, value); CHECK_ARG(env, isNull); + CHECK_SCOPE_ISTYPE(env, value, IsNullImpl(env, value, isNull)); + return IsNullImpl(env, value, isNull); +} + +FORCE_INLINE JSVM_Status IsNullOrUndefinedImpl(JSVM_Env env, JSVM_Value value, bool* isNullOrUndefined) +{ v8::Local val = v8impl::V8LocalValueFromJsValue(value); - *isNull = val->IsNull(); + *isNullOrUndefined = val->IsNullOrUndefined(); return ClearLastError(env); } @@ -4580,11 +4600,9 @@ JSVM_Status OH_JSVM_IsNullOrUndefined(JSVM_Env env, JSVM_Value value, bool* isNu CHECK_ENV(env); CHECK_ARG(env, value); CHECK_ARG(env, isNullOrUndefined); + CHECK_SCOPE_ISTYPE(env, value, IsNullOrUndefinedImpl(env, value, isNullOrUndefined)); - v8::Local val = v8impl::V8LocalValueFromJsValue(value); - *isNullOrUndefined = val->IsNullOrUndefined(); - - return ClearLastError(env); + return IsNullOrUndefinedImpl(env, value, isNullOrUndefined); } JSVM_Status OH_JSVM_IsBoolean(JSVM_Env env, JSVM_Value value, bool* isBoolean) @@ -4617,6 +4635,14 @@ JSVM_Status OH_JSVM_IsNumber(JSVM_Env env, JSVM_Value value, bool* isNumber) return ClearLastError(env); } +FORCE_INLINE JSVM_Status IsStringImpl(JSVM_Env env, JSVM_Value value, bool* isString) +{ + v8::Local val = v8impl::V8LocalValueFromJsValue(value); + *isString = val->IsString(); + + return ClearLastError(env); +} + JSVM_Status OH_JSVM_IsString(JSVM_Env env, JSVM_Value value, bool* isString) { // Omit JSVM_PREAMBLE and GET_RETURN_STATUS because V8 @@ -4624,11 +4650,9 @@ JSVM_Status OH_JSVM_IsString(JSVM_Env env, JSVM_Value value, bool* isString) CHECK_ENV(env); CHECK_ARG(env, value); CHECK_ARG(env, isString); + CHECK_SCOPE_ISTYPE(env, value, IsStringImpl(env, value, isString)); - v8::Local val = v8impl::V8LocalValueFromJsValue(value); - *isString = val->IsString(); - - return ClearLastError(env); + return IsStringImpl(env, value, isString); } JSVM_Status OH_JSVM_IsSymbol(JSVM_Env env, JSVM_Value value, bool* isSymbol) diff --git a/src/js_native_api_v8.h b/src/js_native_api_v8.h index 2931084..8e55d8c 100644 --- a/src/js_native_api_v8.h +++ b/src/js_native_api_v8.h @@ -215,6 +215,14 @@ FORCE_NOINLINE void CheckScope(JSVM_Env env, JSVM_Value val, const char *callerF } \ } while (0) +#define CHECK_SCOPE_ISTYPE(env, val, func) \ + do { \ + if (UNLIKELY((env)->debugFlags)) { \ + CheckScope(env, val, __func__); \ + return func; \ + } \ + } while (0) + #define STATUS_CALL(call) \ do { \ JSVM_Status status = (call); \ -- Gitee