Description:

Reduce redundant code by using predefined global constants instead of creating new constant strings
Move all global constant strings into nonmovable space to improve code efficiency.

Issues: https://gitee.com/openharmony/ark_js_runtime/issues/I588TY

Signed-off-by: yaoyuan <yuanyao14@huawei.com>
Change-Id: I1f92188175c3129c5d8cec72a0396f11ce17c1c7
This commit is contained in:
yaoyuan
2022-05-31 16:29:55 +08:00
parent f17c1d64c2
commit cfdfd3e1b9
26 changed files with 472 additions and 317 deletions
+14 -9
View File
@@ -362,6 +362,7 @@ bool JSFunctionBase::SetFunctionName(JSThread *thread, const JSHandle<JSFunction
ASSERT_PRINT(name->IsStringOrSymbol(), "name must be string or symbol");
bool needPrefix = false;
ObjectFactory *factory = thread->GetEcmaVM()->GetFactory();
const GlobalEnvConstants *globalConst = thread->GlobalConstants();
if (!prefix->IsUndefined()) {
ASSERT_PRINT(prefix->IsString(), "prefix must be string");
needPrefix = true;
@@ -377,8 +378,10 @@ bool JSFunctionBase::SetFunctionName(JSThread *thread, const JSHandle<JSFunction
if (description.IsUndefined()) {
functionName = factory->GetEmptyString();
} else {
JSHandle<EcmaString> leftBrackets = factory->NewFromASCII("[");
JSHandle<EcmaString> rightBrackets = factory->NewFromASCII("]");
JSHandle<EcmaString> leftBrackets = JSHandle<EcmaString>::Cast(globalConst->
GetHandledLeftSquareBracketString());
JSHandle<EcmaString> rightBrackets = JSHandle<EcmaString>::Cast(globalConst->
GetHandledRightSquareBracketString());
functionName = factory->ConcatFromString(leftBrackets, descriptionHandle);
functionName = factory->ConcatFromString(functionName, rightBrackets);
}
@@ -388,14 +391,14 @@ bool JSFunctionBase::SetFunctionName(JSThread *thread, const JSHandle<JSFunction
EcmaString *newString;
if (needPrefix) {
JSHandle<EcmaString> handlePrefixString = JSTaggedValue::ToString(thread, prefix);
JSHandle<EcmaString> spaceString(factory->NewFromASCII(" "));
JSHandle<EcmaString> spaceString = JSHandle<EcmaString>::Cast(globalConst->GetHandledSpaceString());
JSHandle<EcmaString> concatString = factory->ConcatFromString(handlePrefixString, spaceString);
newString = *factory->ConcatFromString(concatString, functionName);
} else {
newString = *functionName;
}
JSHandle<JSTaggedValue> nameHandle(thread, newString);
JSHandle<JSTaggedValue> nameKey = thread->GlobalConstants()->GetHandledNameString();
JSHandle<JSTaggedValue> nameKey = globalConst->GetHandledNameString();
PropertyDescriptor nameDesc(thread, nameHandle, false, false, true);
JSHandle<JSTaggedValue> funcHandle(func);
return JSTaggedValue::DefinePropertyOrThrow(thread, funcHandle, nameKey, nameDesc);
@@ -480,6 +483,7 @@ void JSFunction::SetFunctionNameNoPrefix(JSThread *thread, JSFunction *func, JST
{
ASSERT_PRINT(func->IsExtensible(), "Function must be extensible");
ObjectFactory *factory = thread->GetEcmaVM()->GetFactory();
const GlobalEnvConstants *globalConst = thread->GlobalConstants();
JSHandle<JSTaggedValue> funcHandle(thread, func);
{
@@ -490,11 +494,13 @@ void JSFunction::SetFunctionNameNoPrefix(JSThread *thread, JSFunction *func, JST
JSHandle<JSTaggedValue> nameBegin(thread, name);
JSTaggedValue description = JSSymbol::Cast(name.GetTaggedObject())->GetDescription();
if (description.IsUndefined()) {
nameHandle.Update(thread->GlobalConstants()->GetEmptyString());
nameHandle.Update(globalConst->GetEmptyString());
} else {
JSHandle<EcmaString> concatName;
JSHandle<EcmaString> leftBrackets = factory->NewFromASCII("[");
JSHandle<EcmaString> rightBrackets = factory->NewFromASCII("]");
JSHandle<EcmaString> leftBrackets = JSHandle<EcmaString>::Cast(globalConst->
GetHandledLeftSquareBracketString());
JSHandle<EcmaString> rightBrackets = JSHandle<EcmaString>::Cast(globalConst->
GetHandledRightSquareBracketString());
concatName = factory->ConcatFromString(
leftBrackets,
JSHandle<EcmaString>(thread, JSSymbol::Cast(nameBegin->GetHeapObject())->GetDescription()));
@@ -503,8 +509,7 @@ void JSFunction::SetFunctionNameNoPrefix(JSThread *thread, JSFunction *func, JST
}
}
PropertyDescriptor nameDesc(thread, nameHandle, false, false, true);
JSTaggedValue::DefinePropertyOrThrow(thread, funcHandle, thread->GlobalConstants()->GetHandledNameString(),
nameDesc);
JSTaggedValue::DefinePropertyOrThrow(thread, funcHandle, globalConst->GetHandledNameString(), nameDesc);
}
}