1/*
2 * Copyright (c) 2021 - 2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16#ifndef ES2PANDA_COMPILER_CORE_PROGRAM_ELEMENT_H
17#define ES2PANDA_COMPILER_CORE_PROGRAM_ELEMENT_H
18
19#include "macros.h"
20#include "compiler/base/literals.h"
21
22namespace ark::pandasm {
23struct Ins;
24struct Function;
25}  // namespace ark::pandasm
26
27namespace ark::es2panda::compiler {
28class ProgramElement {
29public:
30    explicit ProgramElement() = default;
31    ~ProgramElement();
32    NO_COPY_SEMANTIC(ProgramElement);
33    NO_MOVE_SEMANTIC(ProgramElement);
34
35    std::set<std::string> &Strings();
36    std::vector<pandasm::Ins *> &LiteralBufferIns();
37    std::vector<LiteralBuffer> &BuffStorage();
38    pandasm::Function *Function();
39    void SetFunction(pandasm::Function *func);
40
41private:
42    std::set<std::string> strings_;
43    std::vector<pandasm::Ins *> literalBufferIns_;
44    std::vector<LiteralBuffer> buffStorage_;
45    pandasm::Function *func_ {};
46};
47}  // namespace ark::es2panda::compiler
48#endif
49