/** * Copyright (c) 2021-2024 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // Autogenerated file -- DO NOT EDIT! #ifndef ES2PANDA_COMPILER_GEN_SIGNATURES_H #define ES2PANDA_COMPILER_GEN_SIGNATURES_H #include "util/ustring.h" #include "util/language.h" #include namespace ark::es2panda::compiler { class Signatures { public: explicit Signatures() = delete; // Defines % Signatures::DEFINES.each do |ref, define| % if define.comment static constexpr std::string_view <%= ref %> = "<%= define.name %>"; // <%= define.comment %> % else static constexpr std::string_view <%= ref %> = "<%= define.name %>"; % end % end // Primitive types % Signatures::PRIMITIVES.each do |ref, name| static constexpr std::string_view <%= ref %> = "<%= name %>"; % end // TypeDescriptor primitives % Signatures::TYPEDESCRIPTORS.each do |ref, name| static constexpr std::string_view <%= ref %> = "<%= name %>"; % end // Builtin classes % Signatures::BUILTINS.each do |ref, desc| static constexpr std::string_view <%= ref %>_CLASS = "<%= desc[1] %>"; % end // Builtins % Signatures::BUILTINS.each do |ref, desc| static constexpr std::string_view <%= ref %> = "<%= desc[0] %>"; % end // Builtin signatures % Signatures::SIGNATURES.each do |ref, name| static constexpr std::string_view <%= ref %> = "<%= name %>"; % end class Dynamic { public: static bool IsSupported([[maybe_unused]] Language lang) { % Signatures::DYNAMIC.each do |lang, data| if (lang.GetId() == Language::Id::<%= lang.upcase %>) { return true; // NOLINT(readability-simplify-boolean-expr) } % end return false; } static std::string_view Type(Language lang) { ASSERT(IsSupported(lang)); % Signatures::DYNAMIC.each do |lang, data| if (lang.GetId() == Language::Id::<%= lang.upcase %>) { return <%= data.dynamic_class %>; } % end UNREACHABLE(); } static std::string_view CallClass(Language lang) { ASSERT(IsSupported(lang)); % Signatures::DYNAMIC.each do |lang, data| if (lang.GetId() == Language::Id::<%= lang.upcase %>) { return <%= data.call_class.name %>; } % end UNREACHABLE(); } static std::string_view InitCallClassBuiltin(Language lang) { ASSERT(IsSupported(lang)); % Signatures::DYNAMIC.each do |lang, data| if (lang.GetId() == Language::Id::<%= lang.upcase %>) { return <%= data.call_class.init_builtin %>; } % end UNREACHABLE(); } static std::string_view NewClass(Language lang) { ASSERT(IsSupported(lang)); % Signatures::DYNAMIC.each do |lang, data| if (lang.GetId() == Language::Id::<%= lang.upcase %>) { return <%= data.new_class.name %>; } % end UNREACHABLE(); } static std::string_view InitNewClassBuiltin(Language lang) { ASSERT(IsSupported(lang)); % Signatures::DYNAMIC.each do |lang, data| if (lang.GetId() == Language::Id::<%= lang.upcase %>) { return <%= data.new_class.init_builtin %>; } % end UNREACHABLE(); } static std::string_view LoadModuleBuiltin(Language lang) { ASSERT(IsSupported(lang)); % Signatures::DYNAMIC.each do |lang, data| if (lang.GetId() == Language::Id::<%= lang.upcase %>) { return <%= data.module_class.load_builtin %>; } % end UNREACHABLE(); } static std::optional LanguageFromType(std::string_view assemblerName) { % Signatures::DYNAMIC.each do |lang, data| if (assemblerName == <%= data.dynamic_class %>) { return Language(Language::Id::<%= lang.upcase %>); } % end return {}; } static std::string_view GetUndefinedBuiltin(Language lang) { ASSERT(IsSupported(lang)); % Signatures::DYNAMIC.each do |lang, data| if (lang.GetId() == Language::Id::<%= lang.upcase %>) { return <%= data.builtins.get_undefined %>; } % end UNREACHABLE(); } % def generate(attr, pref) % builtins = Hash.new() % Signatures::DYNAMIC.each do |lang, data| % data.builtins[attr].each do |builtin_data| % builtins[builtin_data.type] = [] unless builtins.key?(builtin_data.type) % builtins[builtin_data.type].append([lang, builtin_data.builtin]) % end % end % res = '' % builtins.each do |type, data| % res += "\n" % res += " static std::string_view #{pref}#{type.capitalize}Builtin(Language lang)\n" % res += " {\n" % data.each do |builtin_data| % (lang, builtin) = builtin_data % res += " if (lang.GetId() == Language::Id::#{lang.upcase}) {\n" % res += " return #{builtin};\n" % res += " }\n" % end % res += " UNREACHABLE();\n" % res += " }" % end % res % end <%= generate(:new, 'New') %> <%= generate(:get_value, 'Get') %> <%= generate(:get_property, 'GetProperty') %> <%= generate(:set_property, 'SetProperty') %> <%= generate(:get_element, 'GetElement') %> <%= generate(:set_element, 'SetElement') %> }; }; } // namespace ark::es2panda::compiler #endif