13af6ab5fSopenharmony_ci/** 23af6ab5fSopenharmony_ci * Copyright (c) 2021 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#ifndef ES2PANDA_COMPILER_SCOPES_VARIABLE_FLAGS_H 173af6ab5fSopenharmony_ci#define ES2PANDA_COMPILER_SCOPES_VARIABLE_FLAGS_H 183af6ab5fSopenharmony_ci 193af6ab5fSopenharmony_ci#include <cstdlib> 203af6ab5fSopenharmony_ci#include <cstdint> 213af6ab5fSopenharmony_ci#include <util/enumbitops.h> 223af6ab5fSopenharmony_ci 233af6ab5fSopenharmony_cinamespace panda::es2panda::binder { 243af6ab5fSopenharmony_ci 253af6ab5fSopenharmony_ci#define DECLARATION_KINDS(_) \ 263af6ab5fSopenharmony_ci _(VAR, VarDecl) \ 273af6ab5fSopenharmony_ci _(LET, LetDecl) \ 283af6ab5fSopenharmony_ci _(CONST, ConstDecl) \ 293af6ab5fSopenharmony_ci _(CLASS, ClassDecl) \ 303af6ab5fSopenharmony_ci _(FUNC, FunctionDecl) \ 313af6ab5fSopenharmony_ci _(PARAM, ParameterDecl) \ 323af6ab5fSopenharmony_ci /* TS */ \ 333af6ab5fSopenharmony_ci _(TYPE_ALIAS, TypeAliasDecl) \ 343af6ab5fSopenharmony_ci _(NAMESPACE, NamespaceDecl) \ 353af6ab5fSopenharmony_ci _(INTERFACE, InterfaceDecl) \ 363af6ab5fSopenharmony_ci _(ENUM_LITERAL, EnumLiteralDecl) \ 373af6ab5fSopenharmony_ci _(TYPE_PARAMETER, TypeParameterDecl) \ 383af6ab5fSopenharmony_ci _(PROPERTY, PropertyDecl) \ 393af6ab5fSopenharmony_ci _(METHOD, MethodDecl) \ 403af6ab5fSopenharmony_ci _(ENUM, EnumDecl) \ 413af6ab5fSopenharmony_ci _(IMPORT_EQUALS, ImportEqualsDecl) 423af6ab5fSopenharmony_ci 433af6ab5fSopenharmony_cienum class DeclType { 443af6ab5fSopenharmony_ci NONE, 453af6ab5fSopenharmony_ci#define DECLARE_TYPES(decl_kind, class_name) decl_kind, 463af6ab5fSopenharmony_ci DECLARATION_KINDS(DECLARE_TYPES) 473af6ab5fSopenharmony_ci#undef DECLARE_TYPES 483af6ab5fSopenharmony_ci}; 493af6ab5fSopenharmony_ci 503af6ab5fSopenharmony_ci#define SCOPE_TYPES(_) \ 513af6ab5fSopenharmony_ci _(PARAM, ParamScope) \ 523af6ab5fSopenharmony_ci _(CATCH_PARAM, CatchParamScope) \ 533af6ab5fSopenharmony_ci _(FUNCTION_PARAM, FunctionParamScope) \ 543af6ab5fSopenharmony_ci _(CATCH, CatchScope) \ 553af6ab5fSopenharmony_ci _(LOCAL, LocalScope) \ 563af6ab5fSopenharmony_ci /* Variable Scopes */ \ 573af6ab5fSopenharmony_ci _(CLASS, ClassScope) \ 583af6ab5fSopenharmony_ci _(LOOP, LoopScope) \ 593af6ab5fSopenharmony_ci _(FUNCTION, FunctionScope) \ 603af6ab5fSopenharmony_ci _(STATIC_BLOCK, StaticBlockScope) \ 613af6ab5fSopenharmony_ci _(GLOBAL, GlobalScope) \ 623af6ab5fSopenharmony_ci _(MODULE, ModuleScope) \ 633af6ab5fSopenharmony_ci _(TSMODULE, TSModuleScope) \ 643af6ab5fSopenharmony_ci _(TSENUM, TSEnumScope) 653af6ab5fSopenharmony_ci 663af6ab5fSopenharmony_ci 673af6ab5fSopenharmony_cienum class ScopeType { 683af6ab5fSopenharmony_ci#define GEN_SCOPE_TYPES(type, class_name) type, 693af6ab5fSopenharmony_ci SCOPE_TYPES(GEN_SCOPE_TYPES) 703af6ab5fSopenharmony_ci#undef GEN_SCOPE_TYPES 713af6ab5fSopenharmony_ci}; 723af6ab5fSopenharmony_ci 733af6ab5fSopenharmony_cienum class ResolveBindingOptions : uint8_t { 743af6ab5fSopenharmony_ci BINDINGS = 1U << 0U, 753af6ab5fSopenharmony_ci INTERFACES = 1U << 1U, 763af6ab5fSopenharmony_ci 773af6ab5fSopenharmony_ci ALL = BINDINGS | INTERFACES, 783af6ab5fSopenharmony_ci}; 793af6ab5fSopenharmony_ci 803af6ab5fSopenharmony_ciDEFINE_BITOPS(ResolveBindingOptions) 813af6ab5fSopenharmony_ci 823af6ab5fSopenharmony_cienum class ResolveBindingFlags : uint8_t { 833af6ab5fSopenharmony_ci ALL = 1U << 0U, 843af6ab5fSopenharmony_ci TS_BEFORE_TRANSFORM = 1U << 1U, 853af6ab5fSopenharmony_ci TS_AFTER_TRANSFORM = 1U << 2U, 863af6ab5fSopenharmony_ci}; 873af6ab5fSopenharmony_ci 883af6ab5fSopenharmony_ciDEFINE_BITOPS(ResolveBindingFlags) 893af6ab5fSopenharmony_ci 903af6ab5fSopenharmony_ci#define VARIABLE_TYPES(_) \ 913af6ab5fSopenharmony_ci _(LOCAL, LocalVariable) \ 923af6ab5fSopenharmony_ci _(GLOBAL, GlobalVariable) \ 933af6ab5fSopenharmony_ci _(MODULE, ModuleVariable) \ 943af6ab5fSopenharmony_ci _(ENUM, EnumVariable) \ 953af6ab5fSopenharmony_ci _(NAMESPACE, NamespaceVariable) \ 963af6ab5fSopenharmony_ci _(IMPORT_EQUALS, ImportEqualsVariable) \ 973af6ab5fSopenharmony_ci _(ENUMLITERAL, EnumLiteralVariable) 983af6ab5fSopenharmony_ci 993af6ab5fSopenharmony_cienum class VariableType { 1003af6ab5fSopenharmony_ci#define GEN_VARIABLE_TYPES(type, class_name) type, 1013af6ab5fSopenharmony_ci VARIABLE_TYPES(GEN_VARIABLE_TYPES) 1023af6ab5fSopenharmony_ci#undef GEN_VARIABLE_TYPES 1033af6ab5fSopenharmony_ci}; 1043af6ab5fSopenharmony_ci 1053af6ab5fSopenharmony_cienum class VariableKind { 1063af6ab5fSopenharmony_ci NONE, 1073af6ab5fSopenharmony_ci VAR, 1083af6ab5fSopenharmony_ci LEXICAL, 1093af6ab5fSopenharmony_ci FUNCTION, 1103af6ab5fSopenharmony_ci MODULE, 1113af6ab5fSopenharmony_ci}; 1123af6ab5fSopenharmony_ci 1133af6ab5fSopenharmony_cienum class VariableFlags : uint64_t { 1143af6ab5fSopenharmony_ci NONE = 0, 1153af6ab5fSopenharmony_ci OPTIONAL = 1 << 0, 1163af6ab5fSopenharmony_ci PROPERTY = 1 << 1, 1173af6ab5fSopenharmony_ci METHOD = 1 << 2, 1183af6ab5fSopenharmony_ci TYPE_ALIAS = 1 << 3, 1193af6ab5fSopenharmony_ci INTERFACE = 1 << 4, 1203af6ab5fSopenharmony_ci ENUM_LITERAL = 1 << 5, 1213af6ab5fSopenharmony_ci READONLY = 1 << 6, 1223af6ab5fSopenharmony_ci COMPUTED = 1 << 7, 1233af6ab5fSopenharmony_ci COMPUTED_IDENT = 1 << 8, 1243af6ab5fSopenharmony_ci COMPUTED_INDEX = 1 << 9, 1253af6ab5fSopenharmony_ci INDEX_NAME = 1 << 10, 1263af6ab5fSopenharmony_ci IMPORT = 1 << 11, 1273af6ab5fSopenharmony_ci LOCAL_EXPORT = 1 << 12, 1283af6ab5fSopenharmony_ci INFERED_IN_PATTERN = 1 << 13, 1293af6ab5fSopenharmony_ci REST_ARG = 1 << 14, 1303af6ab5fSopenharmony_ci NUMERIC_NAME = 1 << 15, 1313af6ab5fSopenharmony_ci TYPE = 1 << 16, 1323af6ab5fSopenharmony_ci NAMESPACE = 1 << 17, 1333af6ab5fSopenharmony_ci IMPORT_EQUALS = 1 << 18, 1343af6ab5fSopenharmony_ci 1353af6ab5fSopenharmony_ci INDEX_LIKE = COMPUTED_INDEX | INDEX_NAME, 1363af6ab5fSopenharmony_ci 1373af6ab5fSopenharmony_ci LOOP_DECL = 1 << 25, 1383af6ab5fSopenharmony_ci PER_ITERATION = 1 << 26, 1393af6ab5fSopenharmony_ci HOIST = 1 << 27, 1403af6ab5fSopenharmony_ci VAR = 1 << 28, 1413af6ab5fSopenharmony_ci INITIALIZED = 1 << 29, 1423af6ab5fSopenharmony_ci LEXICAL_BOUND = 1 << 30, 1433af6ab5fSopenharmony_ci IN_SENDABLE_ENV = 1 << 31, 1443af6ab5fSopenharmony_ci 1453af6ab5fSopenharmony_ci HOIST_VAR = HOIST | VAR, 1463af6ab5fSopenharmony_ci}; 1473af6ab5fSopenharmony_ci 1483af6ab5fSopenharmony_ciDEFINE_BITOPS(VariableFlags) 1493af6ab5fSopenharmony_ci 1503af6ab5fSopenharmony_cienum class LetOrConstStatus { 1513af6ab5fSopenharmony_ci INITIALIZED, 1523af6ab5fSopenharmony_ci UNINITIALIZED, 1533af6ab5fSopenharmony_ci}; 1543af6ab5fSopenharmony_ci 1553af6ab5fSopenharmony_cienum class VariableScopeFlags : uint8_t { 1563af6ab5fSopenharmony_ci NONE = 0, 1573af6ab5fSopenharmony_ci SET_LEXICAL_FUNCTION = 1U << 0U, 1583af6ab5fSopenharmony_ci USE_ARGS = 1U << 2U, 1593af6ab5fSopenharmony_ci USE_SUPER = 1U << 3U, 1603af6ab5fSopenharmony_ci INNER_ARROW = 1U << 4U, 1613af6ab5fSopenharmony_ci}; 1623af6ab5fSopenharmony_ci 1633af6ab5fSopenharmony_ciDEFINE_BITOPS(VariableScopeFlags) 1643af6ab5fSopenharmony_ci 1653af6ab5fSopenharmony_cienum class DeclarationFlags : uint8_t { 1663af6ab5fSopenharmony_ci NONE = 0, 1673af6ab5fSopenharmony_ci IMPORT = 1 << 0, 1683af6ab5fSopenharmony_ci EXPORT = 1 << 1, 1693af6ab5fSopenharmony_ci NAMESPACE_IMPORT = 1 << 2, 1703af6ab5fSopenharmony_ci EXPORT_IN_TSMODULE = 1 << 3, 1713af6ab5fSopenharmony_ci}; 1723af6ab5fSopenharmony_ci 1733af6ab5fSopenharmony_ciDEFINE_BITOPS(DeclarationFlags) 1743af6ab5fSopenharmony_ci 1753af6ab5fSopenharmony_cienum class TSBindingType : size_t { 1763af6ab5fSopenharmony_ci NAMESPACE = 0, 1773af6ab5fSopenharmony_ci ENUMLITERAL, 1783af6ab5fSopenharmony_ci INTERFACE, 1793af6ab5fSopenharmony_ci IMPORT_EQUALS, 1803af6ab5fSopenharmony_ci COUNT, 1813af6ab5fSopenharmony_ci}; 1823af6ab5fSopenharmony_ci 1833af6ab5fSopenharmony_ci} // namespace panda::es2panda::binder 1843af6ab5fSopenharmony_ci 1853af6ab5fSopenharmony_ci#endif 186