mirror of
https://gitee.com/openharmony/arkcompiler_ets_runtime
synced 2024-10-07 08:03:29 +00:00
!4940 Fix module variable problem while debugger
Merge pull request !4940 from 杨阳/cherry-pick-1695866421
This commit is contained in:
commit
8e18920124
@ -700,15 +700,9 @@ void DebuggerApi::GetImportVariables(const EcmaVM *ecmaVm, Local<ObjectRef> &mod
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
JSTaggedValue moduleEnvironment = SourceTextModule::Cast(currentModule->GetTaggedObject())->GetEnvironment();
|
|
||||||
if (moduleEnvironment.IsUndefined()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
JSThread *thread = ecmaVm->GetJSThread();
|
JSThread *thread = ecmaVm->GetJSThread();
|
||||||
JSHandle<TaggedArray> importArray(thread, TaggedArray::Cast(importEntries.GetTaggedObject()));
|
JSHandle<TaggedArray> importArray(thread, TaggedArray::Cast(importEntries.GetTaggedObject()));
|
||||||
uint32_t importEntriesLen = importArray->GetLength();
|
uint32_t importEntriesLen = importArray->GetLength();
|
||||||
JSHandle<TaggedArray> environment(thread, TaggedArray::Cast(moduleEnvironment.GetTaggedObject()));
|
|
||||||
JSHandle<JSTaggedValue> starString = thread->GlobalConstants()->GetHandledStarString();
|
JSHandle<JSTaggedValue> starString = thread->GlobalConstants()->GetHandledStarString();
|
||||||
JSMutableHandle<ImportEntry> ee(thread, thread->GlobalConstants()->GetUndefined());
|
JSMutableHandle<ImportEntry> ee(thread, thread->GlobalConstants()->GetUndefined());
|
||||||
JSMutableHandle<JSTaggedValue> name(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 key = ee->GetImportName();
|
||||||
JSTaggedValue localName = ee->GetLocalName();
|
JSTaggedValue localName = ee->GetLocalName();
|
||||||
name.Update(localName);
|
name.Update(localName);
|
||||||
if (!key.IsString()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (JSTaggedValue::SameValue(key, starString.GetTaggedValue())) {
|
if (JSTaggedValue::SameValue(key, starString.GetTaggedValue())) {
|
||||||
JSHandle<JSTaggedValue> moduleRequest(thread, ee->GetModuleRequest());
|
JSHandle<JSTaggedValue> moduleRequest(thread, ee->GetModuleRequest());
|
||||||
JSHandle<JSTaggedValue> importModule;
|
JSHandle<JSTaggedValue> importModule;
|
||||||
@ -737,26 +728,9 @@ void DebuggerApi::GetImportVariables(const EcmaVM *ecmaVm, Local<ObjectRef> &mod
|
|||||||
moduleObj->DefineProperty(ecmaVm, variableName, descriptor);
|
moduleObj->DefineProperty(ecmaVm, variableName, descriptor);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
JSTaggedValue resolvedBinding = environment->Get(idx);
|
JSTaggedValue moduleValue =
|
||||||
if (resolvedBinding.IsHole()) {
|
thread->GetCurrentEcmaContext()->GetModuleManager()->GetModuleValueOutter(idx, currentModule);
|
||||||
continue;
|
Local<JSValueRef> value = JSNApiHelper::ToLocal<JSValueRef>(JSHandle<JSTaggedValue>(thread, moduleValue));
|
||||||
}
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
Local<JSValueRef> variableName = JSNApiHelper::ToLocal<JSValueRef>(name);
|
Local<JSValueRef> variableName = JSNApiHelper::ToLocal<JSValueRef>(name);
|
||||||
PropertyAttribute descriptor(value, true, true, true);
|
PropertyAttribute descriptor(value, true, true, true);
|
||||||
moduleObj->DefineProperty(ecmaVm, variableName, descriptor);
|
moduleObj->DefineProperty(ecmaVm, variableName, descriptor);
|
||||||
|
@ -68,6 +68,14 @@ JSTaggedValue ModuleManager::GetModuleValueInner(int32_t index, JSTaggedValue js
|
|||||||
return SourceTextModule::Cast(currentModule.GetTaggedObject())->GetModuleValue(vm_->GetJSThread(), index, false);
|
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 ModuleManager::GetModuleValueOutter(int32_t index)
|
||||||
{
|
{
|
||||||
JSTaggedValue currentModule = GetCurrentModule();
|
JSTaggedValue currentModule = GetCurrentModule();
|
||||||
@ -80,6 +88,11 @@ JSTaggedValue ModuleManager::GetModuleValueOutter(int32_t index, JSTaggedValue j
|
|||||||
return GetModuleValueOutterInternal(index, currentModule);
|
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)
|
JSTaggedValue ModuleManager::GetModuleValueOutterInternal(int32_t index, JSTaggedValue currentModule)
|
||||||
{
|
{
|
||||||
JSThread *thread = vm_->GetJSThread();
|
JSThread *thread = vm_->GetJSThread();
|
||||||
|
@ -29,8 +29,10 @@ public:
|
|||||||
|
|
||||||
JSTaggedValue GetModuleValueInner(int32_t index);
|
JSTaggedValue GetModuleValueInner(int32_t index);
|
||||||
JSTaggedValue GetModuleValueInner(int32_t index, JSTaggedValue jsFunc);
|
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 GetModuleValueOutter(int32_t index, JSTaggedValue jsFunc);
|
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);
|
||||||
void StoreModuleValue(int32_t index, JSTaggedValue value, JSTaggedValue jsFunc);
|
void StoreModuleValue(int32_t index, JSTaggedValue value, JSTaggedValue jsFunc);
|
||||||
JSTaggedValue GetModuleNamespace(int32_t index);
|
JSTaggedValue GetModuleNamespace(int32_t index);
|
||||||
|
Loading…
Reference in New Issue
Block a user