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