• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/**
2 * Copyright (c) 2021-2025 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// Autogenerated file -- DO NOT EDIT!
17
18#ifndef ES2PANDA_COMPILER_GEN_SIGNATURES_H
19#define ES2PANDA_COMPILER_GEN_SIGNATURES_H
20
21#include "util/diagnosticEngine.h"
22#include "util/ustring.h"
23#include "util/language.h"
24
25#include <optional>
26
27namespace ark::es2panda::compiler {
28class Signatures {
29public:
30    explicit Signatures() = delete;
31
32    // Defines
33% Signatures::DEFINES.each do |ref, define|
34%   if define.comment
35    static constexpr std::string_view <%= ref %> = "<%= define.name %>";  // <%= define.comment %>
36%   else
37    static constexpr std::string_view <%= ref %> = "<%= define.name %>";
38%   end
39% end
40
41    // Primitive types
42% Signatures::PRIMITIVES.each do |ref, name|
43    static constexpr std::string_view <%= ref %> = "<%= name %>";
44% end
45
46    // TypeDescriptor primitives
47% Signatures::TYPEDESCRIPTORS.each do |ref, name|
48    static constexpr std::string_view <%= ref %> = "<%= name %>";
49% end
50
51    // Builtin classes
52% Signatures::BUILTINS.each do |ref, desc|
53    static constexpr std::string_view <%= ref %>_CLASS = "<%= desc[1] %>";
54% end
55
56    // Builtins
57% Signatures::BUILTINS.each do |ref, desc|
58    static constexpr std::string_view <%= ref %> = "<%= desc[0] %>";
59% end
60
61    // Builtin signatures
62% Signatures::SIGNATURES.each do |ref, name|
63    static constexpr std::string_view <%= ref %> = "<%= name %>";
64% end
65
66    class Dynamic {
67    public:
68        static bool IsSupported([[maybe_unused]] Language lang)
69        {
70% Signatures::DYNAMIC.each do |lang, data|
71            if (lang.GetId() == Language::Id::<%= lang.upcase %>) {
72                return true; // NOLINT(readability-simplify-boolean-expr)
73            }
74% end
75            return false;
76        }
77
78        static std::string_view Type(Language lang)
79        {
80            ES2PANDA_ASSERT(IsSupported(lang));
81% Signatures::DYNAMIC.each do |lang, data|
82            if (lang.GetId() == Language::Id::<%= lang.upcase %>) {
83                return <%= data.dynamic_class %>;
84            }
85% end
86            ES2PANDA_UNREACHABLE();
87        }
88
89        static std::string_view CallClass(Language lang)
90        {
91            ES2PANDA_ASSERT(IsSupported(lang));
92% Signatures::DYNAMIC.each do |lang, data|
93            if (lang.GetId() == Language::Id::<%= lang.upcase %>) {
94                return <%= data.call_class.name %>;
95            }
96% end
97            ES2PANDA_UNREACHABLE();
98        }
99
100        static std::string_view InitCallClassBuiltin(Language lang)
101        {
102            ES2PANDA_ASSERT(IsSupported(lang));
103% Signatures::DYNAMIC.each do |lang, data|
104            if (lang.GetId() == Language::Id::<%= lang.upcase %>) {
105                return <%= data.call_class.init_builtin %>;
106            }
107% end
108            ES2PANDA_UNREACHABLE();
109        }
110
111        static std::string_view NewClass(Language lang)
112        {
113            ES2PANDA_ASSERT(IsSupported(lang));
114% Signatures::DYNAMIC.each do |lang, data|
115            if (lang.GetId() == Language::Id::<%= lang.upcase %>) {
116                return <%= data.new_class.name %>;
117            }
118% end
119            ES2PANDA_UNREACHABLE();
120        }
121
122        static std::string_view InitNewClassBuiltin(Language lang)
123        {
124            ES2PANDA_ASSERT(IsSupported(lang));
125% Signatures::DYNAMIC.each do |lang, data|
126            if (lang.GetId() == Language::Id::<%= lang.upcase %>) {
127                return <%= data.new_class.init_builtin %>;
128            }
129% end
130            ES2PANDA_UNREACHABLE();
131        }
132
133        static std::string_view LoadModuleBuiltin(Language lang)
134        {
135            ES2PANDA_ASSERT(IsSupported(lang));
136% Signatures::DYNAMIC.each do |lang, data|
137            if (lang.GetId() == Language::Id::<%= lang.upcase %>) {
138                return <%= data.module_class.load_builtin %>;
139            }
140% end
141            ES2PANDA_UNREACHABLE();
142        }
143
144        static std::optional<Language> LanguageFromType(std::string_view assemblerName)
145        {
146% Signatures::DYNAMIC.each do |lang, data|
147            if (assemblerName == <%= data.dynamic_class %>) {
148                return Language(Language::Id::<%= lang.upcase %>);
149            }
150% end
151            return {};
152        }
153
154        static std::string_view GetUndefinedBuiltin(Language lang)
155        {
156            ES2PANDA_ASSERT(IsSupported(lang));
157% Signatures::DYNAMIC.each do |lang, data|
158            if (lang.GetId() == Language::Id::<%= lang.upcase %>) {
159                return <%= data.builtins.get_undefined %>;
160            }
161% end
162            ES2PANDA_UNREACHABLE();
163        }
164
165% def generate(attr, pref)
166%   builtins = Hash.new()
167%   Signatures::DYNAMIC.each do |lang, data|
168%     data.builtins[attr].each do |builtin_data|
169%       builtins[builtin_data.type] = [] unless builtins.key?(builtin_data.type)
170%       builtins[builtin_data.type].append([lang, builtin_data.builtin])
171%     end
172%   end
173%   res = ''
174%   builtins.each do |type, data|
175%     res += "\n"
176%     res += "        static std::string_view #{pref}#{type.capitalize}Builtin(Language lang)\n"
177%     res += "        {\n"
178%     data.each do |builtin_data|
179%       (lang, builtin) = builtin_data
180%       res += "            if (lang.GetId() == Language::Id::#{lang.upcase}) {\n"
181%       res += "                return #{builtin};\n"
182%       res += "            }\n"
183%     end
184%     res += "              ES2PANDA_UNREACHABLE();\n"
185%     res += "        }"
186%   end
187% res
188% end
189<%= generate(:new, 'New') %>
190<%= generate(:get_value, 'Get') %>
191<%= generate(:get_property, 'GetProperty') %>
192<%= generate(:set_property, 'SetProperty') %>
193<%= generate(:get_element, 'GetElement') %>
194<%= generate(:set_element, 'SetElement') %>
195
196    };
197};
198}  // namespace ark::es2panda::compiler
199
200#endif
201