diff --git a/src/js_native_api_v8.cpp b/src/js_native_api_v8.cpp index 3b9ca086baab50ea14beb38fa7c2d606fd430b6c..70c5422addf408999ff9cbcd436748374ddbbcf6 100644 --- a/src/js_native_api_v8.cpp +++ b/src/js_native_api_v8.cpp @@ -53,6 +53,16 @@ FORCE_NOINLINE void AddValueToScopeCheck( } } +FORCE_NOINLINE void CheckScope(JSVM_Env env, JSVM_Value val, const char *callerFunctionName) +{ + if (UNLIKELY((env)->debugFlags & (1 << JSVM_SCOPE_CHECK)) && (val)) { + LOG(Info) << "CHECK_SCOPE in function: " << callerFunctionName; + if (!(env)->GetScopeTracker()->CheckJSVMVal(val)) { + JSVM_FATAL("Run in wrong HandleScope"); + } + } +} + namespace v8impl { namespace { @@ -4542,7 +4552,6 @@ 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(env, value); v8::Local val = v8impl::V8LocalValueFromJsValue(value); *isUndefined = val->IsUndefined(); @@ -4557,7 +4566,6 @@ 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(env, value); v8::Local val = v8impl::V8LocalValueFromJsValue(value); *isNull = val->IsNull(); @@ -4572,7 +4580,6 @@ 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(env, value); v8::Local val = v8impl::V8LocalValueFromJsValue(value); *isNullOrUndefined = val->IsNullOrUndefined(); @@ -4617,7 +4624,6 @@ 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(env, value); v8::Local val = v8impl::V8LocalValueFromJsValue(value); *isString = val->IsString(); diff --git a/src/js_native_api_v8.h b/src/js_native_api_v8.h index b2e805210139087b4b7ab111d2cd70f12c8f6a20..293108409217370e754b1879f4bf8884a477f6ca 100644 --- a/src/js_native_api_v8.h +++ b/src/js_native_api_v8.h @@ -192,6 +192,7 @@ inline JSVM_Status SetLastError(JSVM_Env env, FORCE_NOINLINE void AddValueToScopeCheck(JSVM_Env env, JSVM_Value val); FORCE_NOINLINE void AddValueToEscapeScopeCheck(JSVM_Env env, JSVM_Value val); +FORCE_NOINLINE void CheckScope(JSVM_Env env, JSVM_Value val, const char *callerFunctionName); #define ADD_VAL_TO_SCOPE_CHECK(env, val) \ do { \ @@ -207,16 +208,11 @@ FORCE_NOINLINE void AddValueToEscapeScopeCheck(JSVM_Env env, JSVM_Value val); } \ } while (0) -#define CHECK_SCOPE(env, val) \ - do { \ - if (UNLIKELY((env)->debugFlags)) { \ - if (UNLIKELY((env)->debugFlags & (1 << JSVM_SCOPE_CHECK)) && (val)) { \ - LOG(Info) << "CHECK_SCOPE in function: " << __func__; \ - if (!(env)->GetScopeTracker()->CheckJSVMVal(val)) { \ - JSVM_FATAL("Run in wrong HandleScope"); \ - } \ - } \ - } \ +#define CHECK_SCOPE(env, val) \ + do { \ + if (UNLIKELY((env)->debugFlags)) { \ + CheckScope(env, val, __func__); \ + } \ } while (0) #define STATUS_CALL(call) \