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;
|
||||
}
|
||||
|
||||
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);
|
||||
|
@ -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();
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user