14514f5e3Sopenharmony_ci/*
24514f5e3Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd.
34514f5e3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
44514f5e3Sopenharmony_ci * you may not use this file except in compliance with the License.
54514f5e3Sopenharmony_ci * You may obtain a copy of the License at
64514f5e3Sopenharmony_ci *
74514f5e3Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
84514f5e3Sopenharmony_ci *
94514f5e3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
104514f5e3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
114514f5e3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
124514f5e3Sopenharmony_ci * See the License for the specific language governing permissions and
134514f5e3Sopenharmony_ci * limitations under the License.
144514f5e3Sopenharmony_ci */
154514f5e3Sopenharmony_ci
164514f5e3Sopenharmony_ci#ifndef ECMASCRIPT_OHOS_FRAMEWORK_HELPER_H
174514f5e3Sopenharmony_ci#define ECMASCRIPT_OHOS_FRAMEWORK_HELPER_H
184514f5e3Sopenharmony_ci
194514f5e3Sopenharmony_ci#include <string>
204514f5e3Sopenharmony_ci#include <set>
214514f5e3Sopenharmony_ci#include <vector>
224514f5e3Sopenharmony_ci
234514f5e3Sopenharmony_ci#include "ecmascript/platform/file.h"
244514f5e3Sopenharmony_ci#include "macros.h"
254514f5e3Sopenharmony_ci
264514f5e3Sopenharmony_cinamespace panda::ecmascript {
274514f5e3Sopenharmony_ciclass FrameworkHelper {
284514f5e3Sopenharmony_cipublic:
294514f5e3Sopenharmony_ci
304514f5e3Sopenharmony_ci    FrameworkHelper(JSThread *thread)
314514f5e3Sopenharmony_ci        : thread_(thread),
324514f5e3Sopenharmony_ci          vm_(thread->GetEcmaVM())
334514f5e3Sopenharmony_ci    {
344514f5e3Sopenharmony_ci        FilePathInit();
354514f5e3Sopenharmony_ci    }
364514f5e3Sopenharmony_ci
374514f5e3Sopenharmony_ci    ~FrameworkHelper() = default;
384514f5e3Sopenharmony_ci
394514f5e3Sopenharmony_ci    EcmaVM *GetEcmaVM() const
404514f5e3Sopenharmony_ci    {
414514f5e3Sopenharmony_ci        return vm_;
424514f5e3Sopenharmony_ci    }
434514f5e3Sopenharmony_ci
444514f5e3Sopenharmony_ci    void SetCompilerFrameworkAotPath(std::string frameworkAotPath)
454514f5e3Sopenharmony_ci    {
464514f5e3Sopenharmony_ci        CompilerFrameworkAotPath_ = std::move(frameworkAotPath);
474514f5e3Sopenharmony_ci    }
484514f5e3Sopenharmony_ci
494514f5e3Sopenharmony_ci    static void GetRealRecordName(CString &recordName)
504514f5e3Sopenharmony_ci    {
514514f5e3Sopenharmony_ci        if (recordName == "_GLOBAL::func_main_0") {
524514f5e3Sopenharmony_ci            recordName = "_GLOBAL";
534514f5e3Sopenharmony_ci        }
544514f5e3Sopenharmony_ci    }
554514f5e3Sopenharmony_ci
564514f5e3Sopenharmony_ci    const std::set<std::string> &GetFrameworkAbcFiles() const
574514f5e3Sopenharmony_ci    {
584514f5e3Sopenharmony_ci        return frameworkAbcFiles_;
594514f5e3Sopenharmony_ci    }
604514f5e3Sopenharmony_ci
614514f5e3Sopenharmony_ci    bool IsFrameworkAbcFile(const std::string& fileName) const
624514f5e3Sopenharmony_ci    {
634514f5e3Sopenharmony_ci        return frameworkAbcFiles_.find(fileName) != frameworkAbcFiles_.end();
644514f5e3Sopenharmony_ci    }
654514f5e3Sopenharmony_ci
664514f5e3Sopenharmony_ciprivate:
674514f5e3Sopenharmony_ci    void FilePathInit()
684514f5e3Sopenharmony_ci    {
694514f5e3Sopenharmony_ci        const std::vector<std::string> arkuiFileNames = {"/stateMgmt.abc"};
704514f5e3Sopenharmony_ci        if (vm_->GetJSOptions().WasSetCompilerFrameworkAbcPath()) {
714514f5e3Sopenharmony_ci            CompilerFrameworkAotPath_ = vm_->GetJSOptions().GetCompilerFrameworkAbcPath();
724514f5e3Sopenharmony_ci        }
734514f5e3Sopenharmony_ci        if (vm_->GetJSOptions().IsEnableFrameworkAOT()) {
744514f5e3Sopenharmony_ci            for (const auto &name : arkuiFileNames) {
754514f5e3Sopenharmony_ci                std::string fileName = CompilerFrameworkAotPath_ + name;
764514f5e3Sopenharmony_ci                if (FileExist(fileName.c_str())) {
774514f5e3Sopenharmony_ci                    frameworkAbcFiles_.insert(fileName);
784514f5e3Sopenharmony_ci                }
794514f5e3Sopenharmony_ci            }
804514f5e3Sopenharmony_ci        }
814514f5e3Sopenharmony_ci    }
824514f5e3Sopenharmony_ci
834514f5e3Sopenharmony_ci    [[maybe_unused]] JSThread *thread_ {nullptr};
844514f5e3Sopenharmony_ci    EcmaVM *vm_ {nullptr};
854514f5e3Sopenharmony_ci
864514f5e3Sopenharmony_ci    std::set<std::string> frameworkAbcFiles_ {};
874514f5e3Sopenharmony_ci    std::string CompilerFrameworkAotPath_ {"/etc/abc/framework"};
884514f5e3Sopenharmony_ci};
894514f5e3Sopenharmony_ci}  // namespace panda::ecmascript::kungfu
904514f5e3Sopenharmony_ci#endif