From c182600d32972e355e154dcaa0fdaa386f8631a1 Mon Sep 17 00:00:00 2001 From: Ilya Trubachev Date: Tue, 13 Feb 2024 12:22:58 +0300 Subject: [PATCH] support location inside archive file Signed-off-by: Ilya Trubachev --- runtime/ecma_class_linker_extension.cpp | 5 +++-- runtime/ecma_class_linker_extension.h | 3 ++- runtime/ecma_vm.cpp | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/runtime/ecma_class_linker_extension.cpp b/runtime/ecma_class_linker_extension.cpp index 90f489612..186598791 100644 --- a/runtime/ecma_class_linker_extension.cpp +++ b/runtime/ecma_class_linker_extension.cpp @@ -61,12 +61,13 @@ void EcmaClassLinkerExtension::InitClasses(EcmaVM *vm) Runtime::GetCurrent()->GetClassLinker()->AddClassRoot(ClassRoot::OBJECT, objClass); } -ClassLinkerContext *EcmaClassLinkerExtension::CreateApplicationClassLinkerContext(const PandaVector &path) +ClassLinkerContext *EcmaClassLinkerExtension::CreateApplicationClassLinkerContext(const PandaVector &path, + std::string_view archiveFilename) { PandaVector appFiles; appFiles.reserve(path.size()); for (auto &p : path) { - auto pf = panda_file::OpenPandaFileOrZip(p, panda_file::File::READ_WRITE); + auto pf = panda_file::OpenPandaFileOrZip(p, archiveFilename, panda_file::File::READ_WRITE); if (pf == nullptr) { return nullptr; } diff --git a/runtime/ecma_class_linker_extension.h b/runtime/ecma_class_linker_extension.h index c9f6eab9b..b7e590b93 100644 --- a/runtime/ecma_class_linker_extension.h +++ b/runtime/ecma_class_linker_extension.h @@ -42,7 +42,8 @@ public: void InitClasses(EcmaVM *vm); - ClassLinkerContext *CreateApplicationClassLinkerContext(const PandaVector &path) override; + ClassLinkerContext *CreateApplicationClassLinkerContext(const PandaVector &path, + std::string_view archiveFilename) override; bool CanThrowException([[maybe_unused]] const Method *method) const override { diff --git a/runtime/ecma_vm.cpp b/runtime/ecma_vm.cpp index f2a5098ff..8646795f7 100644 --- a/runtime/ecma_vm.cpp +++ b/runtime/ecma_vm.cpp @@ -451,7 +451,7 @@ bool EcmaVM::ExecuteFromPf(std::string_view filename, std::string_view entryPoin { std::unique_ptr pf; if (frameworkPandaFile_ == nullptr || !IsFrameworkPandaFile(filename)) { - pf = panda_file::OpenPandaFileOrZip(filename, panda_file::File::READ_WRITE); + pf = panda_file::OpenPandaFileOrZip(filename, options_.GetArchiveFilename(), panda_file::File::READ_WRITE); if (pf == nullptr) { return false; } -- Gitee