13af6ab5fSopenharmony_ci/* 23af6ab5fSopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd. 33af6ab5fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 43af6ab5fSopenharmony_ci * you may not use this file except in compliance with the License. 53af6ab5fSopenharmony_ci * You may obtain a copy of the License at 63af6ab5fSopenharmony_ci * 73af6ab5fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 83af6ab5fSopenharmony_ci * 93af6ab5fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 103af6ab5fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 113af6ab5fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 123af6ab5fSopenharmony_ci * See the License for the specific language governing permissions and 133af6ab5fSopenharmony_ci * limitations under the License. 143af6ab5fSopenharmony_ci */ 153af6ab5fSopenharmony_ci 163af6ab5fSopenharmony_ci// Autogenerated file -- DO NOT EDIT! 173af6ab5fSopenharmony_ci// NOLINTBEGIN(cppcoreguidelines-pro-bounds-pointer-arithmetic) 183af6ab5fSopenharmony_ci// NOLINTBEGIN(readability-function-size, readability-magic-numbers) 193af6ab5fSopenharmony_ci 203af6ab5fSopenharmony_ci% Enums::enums&.each do |name, enum| 213af6ab5fSopenharmony_ci% if enum.flags&.length > 0 223af6ab5fSopenharmony_ciextern "C" __attribute__((unused)) <%= enum.namespace %><%= if enum.parent_class_name then "::" + enum.parent_class_name 233af6ab5fSopenharmony_ciend %>::<%= name %> E2pToIr<%= name %>(Es2panda<%= name %> e2pFlags) 243af6ab5fSopenharmony_ci{ 253af6ab5fSopenharmony_ci% if enum.type == 'unsigned' 263af6ab5fSopenharmony_ci% if enum.flags.length <= 32 || enum.type == "int" 273af6ab5fSopenharmony_ci auto irFlags = (<%= enum.namespace %><%= if enum.parent_class_name then "::" + enum.parent_class_name 283af6ab5fSopenharmony_ciend %>::<%= name %>)0U; 293af6ab5fSopenharmony_ci% enum.flags&.each do |flag| 303af6ab5fSopenharmony_ci irFlags |= (e2pFlags & Es2panda<%= name %>::<%= enum.name_to_upper_snake %>_<%= flag %>) != 0 ? <%= enum.namespace %><%= 313af6ab5fSopenharmony_ci if enum.parent_class_name then "::" + enum.parent_class_name 323af6ab5fSopenharmony_ciend %>::<%= name %>::<%= flag %> : (<%= enum.namespace %><%= if enum.parent_class_name then "::" + enum.parent_class_name 333af6ab5fSopenharmony_ciend %>::<%= name %>)0U; 343af6ab5fSopenharmony_ci% end 353af6ab5fSopenharmony_ci% else 363af6ab5fSopenharmony_ci auto irFlags = (<%= enum.namespace %><%= if enum.parent_class_name then "::" + enum.parent_class_name 373af6ab5fSopenharmony_ciend %>::<%= name %>)0U; 383af6ab5fSopenharmony_ci% enum.flags&.each_with_index do |flag, index| 393af6ab5fSopenharmony_ci irFlags |= (e2pFlags & <%= if index > 0 then "(uint64_t)1U << " + 403af6ab5fSopenharmony_ci (index - 1).to_s + "U" else "(uint64_t)0U" end %>) != 0 ? <%= 413af6ab5fSopenharmony_ci enum.namespace %><%= if enum.parent_class_name then "::" + enum.parent_class_name 423af6ab5fSopenharmony_ciend %>::<%= name %>::<%= flag %> : (<%= enum.namespace %><%= if enum.parent_class_name then "::" + enum.parent_class_name 433af6ab5fSopenharmony_ciend %>::<%= name %>)0U; 443af6ab5fSopenharmony_ci% end 453af6ab5fSopenharmony_ci% end 463af6ab5fSopenharmony_ci return irFlags; 473af6ab5fSopenharmony_ci% else 483af6ab5fSopenharmony_ci switch(e2pFlags) 493af6ab5fSopenharmony_ci { 503af6ab5fSopenharmony_ci% enum.flags&.each do |flag| 513af6ab5fSopenharmony_ci case Es2panda<%= name %>::<%= enum.name_to_upper_snake %>_<%= flag %>: 523af6ab5fSopenharmony_ci return <%= enum.namespace %><%= if enum.parent_class_name then "::" + enum.parent_class_name 533af6ab5fSopenharmony_ciend %>::<%= name %>::<%= flag %>; 543af6ab5fSopenharmony_ci% end 553af6ab5fSopenharmony_ci default: 563af6ab5fSopenharmony_ci UNREACHABLE(); 573af6ab5fSopenharmony_ci } 583af6ab5fSopenharmony_ci%end 593af6ab5fSopenharmony_ci} 603af6ab5fSopenharmony_ci% end 613af6ab5fSopenharmony_ci 623af6ab5fSopenharmony_ci%end 633af6ab5fSopenharmony_ci 643af6ab5fSopenharmony_ci% Enums::enums&.each do |name, enum| 653af6ab5fSopenharmony_ci% if enum.flags&.length > 0 663af6ab5fSopenharmony_ciextern "C" __attribute__((unused)) Es2panda<%= name %> IrToE2p<%= name %>(<%= 673af6ab5fSopenharmony_cienum.namespace %><%= if enum.parent_class_name then 683af6ab5fSopenharmony_ci"::" + enum.parent_class_name end %>::<%= name %> irFlags) 693af6ab5fSopenharmony_ci{ 703af6ab5fSopenharmony_ci% if enum.type == 'unsigned' 713af6ab5fSopenharmony_ci Es2panda<%= name %> e2pFlags {(Es2panda<%= name %>)0U}; 723af6ab5fSopenharmony_ci% if enum.flags.length <= 32 || enum.type == "int" 733af6ab5fSopenharmony_ci% enum.flags&.each do |flag| 743af6ab5fSopenharmony_ci e2pFlags = static_cast<Es2panda<%= name %>>((irFlags & <%= enum.namespace %><%= if enum.parent_class_name then 753af6ab5fSopenharmony_ci "::" + enum.parent_class_name end %>::<%= name %>::<%= flag 763af6ab5fSopenharmony_ci %>) != 0 ? e2pFlags | Es2panda<%= name %>::<%= enum.name_to_upper_snake %>_<%= flag %> : e2pFlags); 773af6ab5fSopenharmony_ci% end 783af6ab5fSopenharmony_ci% else 793af6ab5fSopenharmony_ci% enum.flags&.each_with_index do |flag, index| 803af6ab5fSopenharmony_ci e2pFlags = static_cast<Es2panda<%= name %>>((irFlags & <%= enum.namespace %><%= if enum.parent_class_name then 813af6ab5fSopenharmony_ci "::" + enum.parent_class_name end %>::<%= name %>::<%= flag 823af6ab5fSopenharmony_ci %>) != 0 ? e2pFlags | <%= if index > 0 then "(uint64_t)1U << " + (index - 1).to_s + "U" 833af6ab5fSopenharmony_ci else "(uint64_t)0U" end %> : e2pFlags); 843af6ab5fSopenharmony_ci% end 853af6ab5fSopenharmony_ci% end 863af6ab5fSopenharmony_ci return e2pFlags; 873af6ab5fSopenharmony_ci% else 883af6ab5fSopenharmony_ci switch(irFlags) 893af6ab5fSopenharmony_ci { 903af6ab5fSopenharmony_ci% enum.flags&.each do |flag| 913af6ab5fSopenharmony_ci case <%= enum.namespace %><%= if enum.parent_class_name then "::" + enum.parent_class_name 923af6ab5fSopenharmony_ciend %>::<%= name %>::<%= flag %>: 933af6ab5fSopenharmony_ci return Es2panda<%= name %>::<%= enum.name_to_upper_snake %>_<%= flag %>; 943af6ab5fSopenharmony_ci% end 953af6ab5fSopenharmony_ci default: 963af6ab5fSopenharmony_ci UNREACHABLE(); 973af6ab5fSopenharmony_ci } 983af6ab5fSopenharmony_ci% end 993af6ab5fSopenharmony_ci} 1003af6ab5fSopenharmony_ci%end 1013af6ab5fSopenharmony_ci 1023af6ab5fSopenharmony_ci% end 1033af6ab5fSopenharmony_ci 1043af6ab5fSopenharmony_ci// NOLINTEND(readability-function-size, readability-magic-numbers) 1053af6ab5fSopenharmony_ci 1063af6ab5fSopenharmony_ci// NOLINTNEXTLINE(cppcoreguidelines-macro-usage) 1073af6ab5fSopenharmony_ci#define IS(public_name, e2p_name) \ 1083af6ab5fSopenharmony_ci extern "C" bool Is##public_name(es2panda_AstNode *ast) \ 1093af6ab5fSopenharmony_ci { \ 1103af6ab5fSopenharmony_ci auto *node = reinterpret_cast<ir::AstNode *>(ast); \ 1113af6ab5fSopenharmony_ci return node->Is##e2p_name(); \ 1123af6ab5fSopenharmony_ci } 1133af6ab5fSopenharmony_ci 1143af6ab5fSopenharmony_ci% Es2pandaLibApi::ast_nodes&.each do |ast_node| 1153af6ab5fSopenharmony_ci% if ast_node != "AstNode" && ast_node != "TypeNode" 1163af6ab5fSopenharmony_ciIS(<%= ast_node %>, <%= ast_node %>) 1173af6ab5fSopenharmony_ci% end 1183af6ab5fSopenharmony_ci% end 1193af6ab5fSopenharmony_ci 1203af6ab5fSopenharmony_ci#undef IS 1213af6ab5fSopenharmony_ci 1223af6ab5fSopenharmony_ci// NOLINTNEXTLINE(cppcoreguidelines-macro-usage) 1233af6ab5fSopenharmony_ci#define IS(public_name, e2p_name) \ 1243af6ab5fSopenharmony_ci extern "C" bool ScopeIs##public_name(es2panda_Scope *scope) \ 1253af6ab5fSopenharmony_ci { \ 1263af6ab5fSopenharmony_ci auto *e2p_scope = reinterpret_cast<varbinder::Scope *>(scope); \ 1273af6ab5fSopenharmony_ci return e2p_scope->Is##e2p_name(); \ 1283af6ab5fSopenharmony_ci } 1293af6ab5fSopenharmony_ci 1303af6ab5fSopenharmony_ci% Es2pandaLibApi::scopes&.each do |scope| 1313af6ab5fSopenharmony_ci% if scope != "Scope" 1323af6ab5fSopenharmony_ciIS(<%= scope %>, <%= scope %>) 1333af6ab5fSopenharmony_ci% end 1343af6ab5fSopenharmony_ci% end 1353af6ab5fSopenharmony_ci 1363af6ab5fSopenharmony_ci#undef IS 1373af6ab5fSopenharmony_ci 1383af6ab5fSopenharmony_ci// NOLINTNEXTLINE(cppcoreguidelines-macro-usage) 1393af6ab5fSopenharmony_ci#define IS(public_name, e2p_name) \ 1403af6ab5fSopenharmony_ci extern "C" bool TypeIs##public_name(es2panda_Type *type) \ 1413af6ab5fSopenharmony_ci { \ 1423af6ab5fSopenharmony_ci auto *e2p_type = reinterpret_cast<checker::Type *>(type); \ 1433af6ab5fSopenharmony_ci return e2p_type->Is##e2p_name(); \ 1443af6ab5fSopenharmony_ci } 1453af6ab5fSopenharmony_ci 1463af6ab5fSopenharmony_ci% Es2pandaLibApi::ast_types&.each do |type| 1473af6ab5fSopenharmony_ci% if type != "Type" 1483af6ab5fSopenharmony_ciIS(<%= type %>, <%= type %>) 1493af6ab5fSopenharmony_ci% end 1503af6ab5fSopenharmony_ci% end 1513af6ab5fSopenharmony_ci 1523af6ab5fSopenharmony_ci#undef IS 1533af6ab5fSopenharmony_ci 1543af6ab5fSopenharmony_ci// NOLINTNEXTLINE(cppcoreguidelines-macro-usage) 1553af6ab5fSopenharmony_ci#define IS(public_name, e2p_name) \ 1563af6ab5fSopenharmony_ci extern "C" bool VariableIs##public_name(es2panda_Variable *variable) \ 1573af6ab5fSopenharmony_ci { \ 1583af6ab5fSopenharmony_ci auto *e2p_variable = reinterpret_cast<varbinder::Variable *>(variable); \ 1593af6ab5fSopenharmony_ci return e2p_variable->Is##e2p_name(); \ 1603af6ab5fSopenharmony_ci } 1613af6ab5fSopenharmony_ci 1623af6ab5fSopenharmony_ci% Es2pandaLibApi::ast_variables&.each do |variable| 1633af6ab5fSopenharmony_ci% if variable[1] != "Variable" 1643af6ab5fSopenharmony_ciIS(<%= variable[1] %>, <%= variable[1] %>) 1653af6ab5fSopenharmony_ci% end 1663af6ab5fSopenharmony_ci% end 1673af6ab5fSopenharmony_ci 1683af6ab5fSopenharmony_ci#undef IS 1693af6ab5fSopenharmony_ci 1703af6ab5fSopenharmony_ci// NOLINTNEXTLINE(readability-function-size) 1713af6ab5fSopenharmony_cichar const *AstNodeName(es2panda_AstNode *ast) 1723af6ab5fSopenharmony_ci{ 1733af6ab5fSopenharmony_ci% Es2pandaLibApi::ast_nodes&.each do |ast_node| 1743af6ab5fSopenharmony_ci% unless ["AstNode", "Expression", "Statement", "TypeNode"].include?(ast_node) 1753af6ab5fSopenharmony_ci if(Is<%= ast_node %>(ast)) { 1763af6ab5fSopenharmony_ci return "<%= ast_node %>"; 1773af6ab5fSopenharmony_ci } 1783af6ab5fSopenharmony_ci% end 1793af6ab5fSopenharmony_ci% end 1803af6ab5fSopenharmony_ci if(IsExpression(ast)) { 1813af6ab5fSopenharmony_ci return "Expression"; 1823af6ab5fSopenharmony_ci } 1833af6ab5fSopenharmony_ci if(IsStatement(ast)) { 1843af6ab5fSopenharmony_ci return "Statement"; 1853af6ab5fSopenharmony_ci } 1863af6ab5fSopenharmony_ci return "Unknown AstNode"; 1873af6ab5fSopenharmony_ci} 1883af6ab5fSopenharmony_ci 1893af6ab5fSopenharmony_ci% Es2pandaLibApi::classes&.each do |className, classData| 1903af6ab5fSopenharmony_ci 1913af6ab5fSopenharmony_ci% classData.class_constructors&.each_with_index do |constructor, index| 1923af6ab5fSopenharmony_ci/* <%= constructor["raw_decl"] %> */ 1933af6ab5fSopenharmony_ciextern "C" <%= classData.constructor_type().lib_type_to_str() 1943af6ab5fSopenharmony_ci%>Create<%= className + "#{index}" 1953af6ab5fSopenharmony_ci%>([[maybe_unused]] es2panda_Context *context 1963af6ab5fSopenharmony_ci<%= constructor["args"]&.map { |arg| if arg.lib_args_to_str.strip() != "" then 1973af6ab5fSopenharmony_ci", " + "[[maybe_unused]] " + arg.lib_args_to_str end }&.join("") %>) 1983af6ab5fSopenharmony_ci{ 1993af6ab5fSopenharmony_ci% constructor["args"]&.each do |arg| 2003af6ab5fSopenharmony_ci <%= arg.lib_cast["expression"] %> 2013af6ab5fSopenharmony_ci% end 2023af6ab5fSopenharmony_ci auto *ctx = reinterpret_cast<Context *>(context); 2033af6ab5fSopenharmony_ci auto *ctxAllocator = ctx->allocator; 2043af6ab5fSopenharmony_ci return reinterpret_cast<<%= classData.constructor_type().lib_type_to_str() 2053af6ab5fSopenharmony_ci %>>(<%= classData.constructor_cast["start"] 2063af6ab5fSopenharmony_ci %><%= constructor["args"]&.map { |arg| arg.lib_cast["var_name"] }&.join(", ") %>)<%= 2073af6ab5fSopenharmony_ci classData.constructor_cast["end"] %>; 2083af6ab5fSopenharmony_ci} 2093af6ab5fSopenharmony_ci 2103af6ab5fSopenharmony_ci% if classData.updater_allowed() 2113af6ab5fSopenharmony_ci 2123af6ab5fSopenharmony_ci/* Updater */ 2133af6ab5fSopenharmony_ciextern "C" <%= classData.constructor_type().lib_type_to_str() 2143af6ab5fSopenharmony_ci%>Update<%= className + "#{index}" 2153af6ab5fSopenharmony_ci%>([[maybe_unused]] es2panda_Context *context, es2panda_AstNode *original 2163af6ab5fSopenharmony_ci<%= constructor["args"]&.map { |arg| if arg.lib_args_to_str.strip() != "" then 2173af6ab5fSopenharmony_ci", " + "[[maybe_unused]] " + arg.lib_args_to_str end }&.join("") %>) 2183af6ab5fSopenharmony_ci{ 2193af6ab5fSopenharmony_ci% constructor["args"]&.each do |arg| 2203af6ab5fSopenharmony_ci <%= arg.lib_cast["expression"] %> 2213af6ab5fSopenharmony_ci% end 2223af6ab5fSopenharmony_ci auto *ctx = reinterpret_cast<Context *>(context); 2233af6ab5fSopenharmony_ci auto *ctxAllocator = ctx->allocator; 2243af6ab5fSopenharmony_ci auto newE2pNode = <%= classData.constructor_cast["start"] 2253af6ab5fSopenharmony_ci %><%= constructor["args"]&.map { |arg| arg.lib_cast["var_name"] }&.join(", ") %><%= 2263af6ab5fSopenharmony_ci classData.constructor_cast["end"] %>; 2273af6ab5fSopenharmony_ci newE2pNode->SetOriginalNode(reinterpret_cast<ir::AstNode *>(original)); 2283af6ab5fSopenharmony_ci return reinterpret_cast<<%= classData.constructor_type().lib_type_to_str() 2293af6ab5fSopenharmony_ci %>>(newE2pNode); 2303af6ab5fSopenharmony_ci} 2313af6ab5fSopenharmony_ci 2323af6ab5fSopenharmony_ci%end # updater end 2333af6ab5fSopenharmony_ci 2343af6ab5fSopenharmony_ci% end # constructors end 2353af6ab5fSopenharmony_ci//// 2363af6ab5fSopenharmony_ci 2373af6ab5fSopenharmony_ci% classData.class_methods&.each_with_index do |method_info, index| 2383af6ab5fSopenharmony_ci/* <%= method_info["raw_decl"] %> */ 2393af6ab5fSopenharmony_ciextern "C" <%= method_info["const"] %> <%= 2403af6ab5fSopenharmony_cimethod_info["return_type"].lib_type_to_str %><%= className + method_info["overload_name"] %>( 2413af6ab5fSopenharmony_ci[[maybe_unused]] es2panda_Context *context<%= if classData.call_cast["call_var"] 2423af6ab5fSopenharmony_cithen ", " + classData.call_cast["call_var"] end %><%= 2433af6ab5fSopenharmony_cimethod_info["args"]&.map { |arg| if arg.lib_args_to_str.strip() != "" then 2443af6ab5fSopenharmony_ci", " + "[[maybe_unused]] " + arg.lib_args_to_str end}&.join("") %>/*return_args:*/<%= method_info["return_arg_to_str"] %>) 2453af6ab5fSopenharmony_ci{ 2463af6ab5fSopenharmony_ci% method_info["args"]&.each do |arg| 2473af6ab5fSopenharmony_ci <%= arg.lib_cast["expression"] %> 2483af6ab5fSopenharmony_ci% end 2493af6ab5fSopenharmony_ci <%= method_info["return_expr"] %> 2503af6ab5fSopenharmony_ci} 2513af6ab5fSopenharmony_ci 2523af6ab5fSopenharmony_ci% end # methods end 2533af6ab5fSopenharmony_ci 2543af6ab5fSopenharmony_ci 2553af6ab5fSopenharmony_ci% end # classes end 2563af6ab5fSopenharmony_ci 2573af6ab5fSopenharmony_ci% Es2pandaLibApi::print_stats 2583af6ab5fSopenharmony_ci 2593af6ab5fSopenharmony_ci// NOLINTEND(cppcoreguidelines-pro-bounds-pointer-arithmetic) 260