diff --git a/ecmascript/jspandafile/js_pandafile_executor.cpp b/ecmascript/jspandafile/js_pandafile_executor.cpp index afab4df7287e7b3ed172cdcee4955c571e3f6b35..f6a4e84696a767347a72ffde7733275320c8943e 100644 --- a/ecmascript/jspandafile/js_pandafile_executor.cpp +++ b/ecmascript/jspandafile/js_pandafile_executor.cpp @@ -436,14 +436,19 @@ Expected JSPandaFileExecutor::LazyExecuteModule( LOG_FULL(INFO) << "recordName : " << recordName << ", in abc : " << filename; CString traceInfo = "JSPandaFileExecutor::LazyExecuteModule " + filename; ECMA_BYTRACE_NAME(HITRACE_TAG_ARK, traceInfo.c_str()); + EcmaVM *vm = thread->GetEcmaVM(); + CString newFileName = ModulePathHelper::ParseUrl(vm, recordName); + if (newFileName.empty()) { + newFileName = filename; + } std::shared_ptr jsPandaFile = - JSPandaFileManager::GetInstance()->LoadJSPandaFile(thread, filename, recordName); + JSPandaFileManager::GetInstance()->LoadJSPandaFile(thread, newFileName, recordName); if (jsPandaFile == nullptr) { #ifdef FUZZ_TEST CString msg = "jsPandaFile is nullptr"; THROW_REFERENCE_ERROR_AND_RETURN(thread, msg.c_str(), Unexpected(false)); #else - LOG_FULL(FATAL) << "Load file with filename '" << filename << "' failed, "; + LOG_FULL(FATAL) << "Load file with filename '" << newFileName << "' failed, "; #endif } @@ -456,21 +461,22 @@ Expected JSPandaFileExecutor::LazyExecuteModule( } if (isMergedAbc && !jsPandaFile->HasRecord(recordName)) { - CString msg = "cannot find record '" + recordName + "', in lazy load abc: " + filename; + CString msg = "cannot find record '" + recordName + "', in lazy load abc: " + newFileName; THROW_REFERENCE_ERROR_AND_RETURN(thread, msg.c_str(), Unexpected(false)); } const JSRecordInfo &recordInfo = jsPandaFile->GetRecordInfo(recordName); if (!jsPandaFile->IsModule(recordInfo)) { - return JSPandaFileExecutor::ExecuteSpecialModule(thread, recordName, filename, jsPandaFile.get(), recordInfo); + return JSPandaFileExecutor::ExecuteSpecialModule(thread, recordName, newFileName, jsPandaFile.get(), + recordInfo); } [[maybe_unused]] EcmaHandleScope scope(thread); // The first js file should execute at current vm. JSHandle moduleRecord(thread->GlobalConstants()->GetHandledUndefined()); if (isMergedAbc) { - moduleRecord = moduleManager->HostResolveImportedModuleWithMerge(filename, recordName); + moduleRecord = moduleManager->HostResolveImportedModuleWithMerge(newFileName, recordName); } else { - moduleRecord = moduleManager->HostResolveImportedModule(filename); + moduleRecord = moduleManager->HostResolveImportedModule(newFileName); } SourceTextModule::Instantiate(thread, moduleRecord); RETURN_VALUE_IF_ABRUPT_COMPLETION(thread, Unexpected(false));