!4940 Fix module variable problem while debugger

Merge pull request !4940 from 杨阳/cherry-pick-1695866421
This commit is contained in:
openharmony_ci 2023-09-28 08:47:25 +00:00 committed by Gitee
commit 8e18920124
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
3 changed files with 18 additions and 29 deletions

View File

@ -700,15 +700,9 @@ void DebuggerApi::GetImportVariables(const EcmaVM *ecmaVm, Local<ObjectRef> &mod
return;
}
JSTaggedValue moduleEnvironment = SourceTextModule::Cast(currentModule->GetTaggedObject())->GetEnvironment();
if (moduleEnvironment.IsUndefined()) {
return;
}
JSThread *thread = ecmaVm->GetJSThread();
JSHandle<TaggedArray> importArray(thread, TaggedArray::Cast(importEntries.GetTaggedObject()));
uint32_t importEntriesLen = importArray->GetLength();
JSHandle<TaggedArray> environment(thread, TaggedArray::Cast(moduleEnvironment.GetTaggedObject()));
JSHandle<JSTaggedValue> starString = thread->GlobalConstants()->GetHandledStarString();
JSMutableHandle<ImportEntry> ee(thread, thread->GlobalConstants()->GetUndefined());
JSMutableHandle<JSTaggedValue> name(thread, thread->GlobalConstants()->GetUndefined());
@ -717,9 +711,6 @@ void DebuggerApi::GetImportVariables(const EcmaVM *ecmaVm, Local<ObjectRef> &mod
JSTaggedValue key = ee->GetImportName();
JSTaggedValue localName = ee->GetLocalName();
name.Update(localName);
if (!key.IsString()) {
continue;
}
if (JSTaggedValue::SameValue(key, starString.GetTaggedValue())) {
JSHandle<JSTaggedValue> moduleRequest(thread, ee->GetModuleRequest());
JSHandle<JSTaggedValue> importModule;
@ -737,26 +728,9 @@ void DebuggerApi::GetImportVariables(const EcmaVM *ecmaVm, Local<ObjectRef> &mod
moduleObj->DefineProperty(ecmaVm, variableName, descriptor);
continue;
}
JSTaggedValue resolvedBinding = environment->Get(idx);
if (resolvedBinding.IsHole()) {
continue;
}
Local<JSValueRef> value;
ResolvedIndexBinding *binding = ResolvedIndexBinding::Cast(resolvedBinding.GetTaggedObject());
JSHandle<JSTaggedValue> importModule(thread, binding->GetModule());
ModuleTypes moduleType = SourceTextModule::Cast(importModule->GetTaggedObject())->GetTypes();
if (moduleType == ModuleTypes::CJS_MODULE) {
JSTaggedValue moduleValue = thread->GetCurrentEcmaContext()->GetModuleManager()->GetCJSModuleValue(
thread, currentModule.GetTaggedValue(), importModule.GetTaggedValue(), binding);
value = JSNApiHelper::ToLocal<JSValueRef>(JSHandle<JSTaggedValue>(thread, moduleValue));
} else if (SourceTextModule::IsNativeModule(moduleType)) {
JSTaggedValue moduleValue = thread->GetCurrentEcmaContext()->GetModuleManager()->GetNativeModuleValue(
thread, currentModule.GetTaggedValue(), importModule.GetTaggedValue(), binding);
value = JSNApiHelper::ToLocal<JSValueRef>(JSHandle<JSTaggedValue>(thread, moduleValue));
} else {
std::string importName = EcmaStringAccessor(key).ToStdString();
value = GetModuleValue(ecmaVm, importModule, importName);
}
JSTaggedValue moduleValue =
thread->GetCurrentEcmaContext()->GetModuleManager()->GetModuleValueOutter(idx, currentModule);
Local<JSValueRef> value = JSNApiHelper::ToLocal<JSValueRef>(JSHandle<JSTaggedValue>(thread, moduleValue));
Local<JSValueRef> variableName = JSNApiHelper::ToLocal<JSValueRef>(name);
PropertyAttribute descriptor(value, true, true, true);
moduleObj->DefineProperty(ecmaVm, variableName, descriptor);

View File

@ -68,6 +68,14 @@ JSTaggedValue ModuleManager::GetModuleValueInner(int32_t index, JSTaggedValue js
return SourceTextModule::Cast(currentModule.GetTaggedObject())->GetModuleValue(vm_->GetJSThread(), index, false);
}
JSTaggedValue ModuleManager::GetModuleValueInner(int32_t index, JSHandle<JSTaggedValue> currentModule)
{
if (currentModule->IsUndefined()) {
LOG_FULL(FATAL) << "GetModuleValueInner currentModule failed";
}
return SourceTextModule::Cast(currentModule->GetTaggedObject())->GetModuleValue(vm_->GetJSThread(), index, false);
}
JSTaggedValue ModuleManager::GetModuleValueOutter(int32_t index)
{
JSTaggedValue currentModule = GetCurrentModule();
@ -80,6 +88,11 @@ JSTaggedValue ModuleManager::GetModuleValueOutter(int32_t index, JSTaggedValue j
return GetModuleValueOutterInternal(index, currentModule);
}
JSTaggedValue ModuleManager::GetModuleValueOutter(int32_t index, JSHandle<JSTaggedValue> currentModule)
{
return GetModuleValueOutterInternal(index, currentModule.GetTaggedValue());
}
JSTaggedValue ModuleManager::GetModuleValueOutterInternal(int32_t index, JSTaggedValue currentModule)
{
JSThread *thread = vm_->GetJSThread();

View File

@ -29,8 +29,10 @@ public:
JSTaggedValue GetModuleValueInner(int32_t index);
JSTaggedValue GetModuleValueInner(int32_t index, JSTaggedValue jsFunc);
JSTaggedValue GetModuleValueInner(int32_t index, JSHandle<JSTaggedValue> currentModule);
JSTaggedValue GetModuleValueOutter(int32_t index);
JSTaggedValue GetModuleValueOutter(int32_t index, JSTaggedValue jsFunc);
JSTaggedValue GetModuleValueOutter(int32_t index, JSHandle<JSTaggedValue> currentModule);
void StoreModuleValue(int32_t index, JSTaggedValue value);
void StoreModuleValue(int32_t index, JSTaggedValue value, JSTaggedValue jsFunc);
JSTaggedValue GetModuleNamespace(int32_t index);