• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * Copyright (c) 2021 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 #ifndef ES2PANDA_COMPILER_SCOPES_VARIABLE_FLAGS_H
17 #define ES2PANDA_COMPILER_SCOPES_VARIABLE_FLAGS_H
18 
19 #include <cstdint>
20 #include "util/enumbitops.h"
21 
22 namespace panda::es2panda::varbinder {
23 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
24 #define DECLARATION_KINDS(_)             \
25     _(VAR, VarDecl)                      \
26     _(LET, LetDecl)                      \
27     _(CONST, ConstDecl)                  \
28     _(FUNC, FunctionDecl)                \
29     _(PARAM, ParameterDecl)              \
30     _(IMPORT, ImportDecl)                \
31     _(DYNAMIC_IMPORT, DynamicImportDecl) \
32     _(EXPORT, ExportDecl)                \
33     /* TS */                             \
34     _(TYPE_ALIAS, TypeAliasDecl)         \
35     _(NAMESPACE, NameSpaceDecl)          \
36     _(INTERFACE, InterfaceDecl)          \
37     _(ENUM_LITERAL, EnumLiteralDecl)     \
38     _(TYPE_PARAMETER, TypeParameterDecl) \
39     _(PROPERTY, PropertyDecl)            \
40     _(CLASS, ClassDecl)                  \
41     _(METHOD, MethodDecl)                \
42     _(ENUM, EnumDecl)
43 
44 enum class DeclType {
45     NONE,
46 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
47 #define DECLARE_TYPES(decl_kind, class_name) decl_kind,
48     DECLARATION_KINDS(DECLARE_TYPES)
49 #undef DECLARE_TYPES
50 };
51 
52 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
53 #define SCOPE_TYPES(_)                    \
54     _(PARAM, ParamScope)                  \
55     _(CATCH_PARAM, CatchParamScope)       \
56     _(FUNCTION_PARAM, FunctionParamScope) \
57     _(CATCH, CatchScope)                  \
58     _(CLASS, ClassScope)                  \
59     _(LOCAL, LocalScope)                  \
60     /* Variable Scopes */                 \
61     _(LOOP, LoopScope)                    \
62     _(LOOP_DECL, LoopDeclarationScope)    \
63     _(FUNCTION, FunctionScope)            \
64     _(GLOBAL, GlobalScope)                \
65     _(MODULE, ModuleScope)
66 
67 enum class ScopeType {
68 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
69 #define GEN_SCOPE_TYPES(type, class_name) type,
70     SCOPE_TYPES(GEN_SCOPE_TYPES)
71 #undef GEN_SCOPE_TYPES
72 };
73 
74 enum class ResolveBindingOptions : uint32_t {
75     BINDINGS = 1U << 0U,
76     INTERFACES = 1U << 1U,
77     VARIABLES = 1U << 2U,
78     METHODS = 1U << 3U,
79     DECLARATION = 1U << 4U,
80     STATIC_VARIABLES = 1U << 5U,
81     STATIC_METHODS = 1U << 6U,
82     STATIC_DECLARATION = 1U << 7U,
83     TYPE_ALIASES = 1U << 8U,
84     ALL_VARIABLES = VARIABLES | STATIC_VARIABLES,
85     ALL_METHOD = METHODS | STATIC_METHODS,
86     ALL_DECLARATION = DECLARATION | STATIC_DECLARATION,
87 
88     LAST = TYPE_ALIASES,
89     ALL = (LAST << 1U) - 1U,
90 };
91 
92 DEFINE_BITOPS(ResolveBindingOptions)
93 
94 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
95 #define VARIABLE_TYPES(_)     \
96     _(LOCAL, LocalVariable)   \
97     _(GLOBAL, GlobalVariable) \
98     _(MODULE, ModuleVariable) \
99     _(ENUM, EnumVariable)
100 
101 enum class VariableType {
102 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
103 #define GEN_VARIABLE_TYPES(type, class_name) type,
104     VARIABLE_TYPES(GEN_VARIABLE_TYPES)
105 #undef GEN_VARIABLE_TYPES
106 };
107 
108 enum class VariableKind {
109     NONE,
110     VAR,
111     LEXICAL,
112     FUNCTION,
113     MODULE,
114 };
115 
116 enum class VariableFlags : uint64_t {
117     NONE = 0U,
118     OPTIONAL = 1U << 0U,
119     PROPERTY = 1U << 1U,
120     METHOD = 1U << 2U,
121     TYPE_ALIAS = 1U << 3U,
122     INTERFACE = 1U << 4U,
123     ENUM_LITERAL = 1U << 5U,
124     READONLY = 1U << 6U,
125     COMPUTED = 1U << 7U,
126     COMPUTED_IDENT = 1U << 8U,  // Remove
127     INFERRED_IN_PATTERN = 1U << 9U,
128     REST_ARG = 1U << 10U,
129     NUMERIC_NAME = 1U << 11U,
130     TYPE = 1U << 12U,
131     LOCAL_EXPORT = 1U << 13U,
132     TYPE_PARAMETER = 1U << 14U,
133     STATIC = 1U << 15U,
134     CLASS = 1U << 16U,
135     EXPLICIT_INIT_REQUIRED = 1U << 17U,
136     PUBLIC = 1U << 18U,
137     PROTECTED = 1U << 19U,
138     PRIVATE = 1U << 20U,
139     SYNTHETIC = 1U << 21U,
140     METHOD_REFERENCE = 1U << 22U,
141     LOCAL = 1U << 23U,
142 
143     LEXICAL = 1U << 24U,
144     LOOP_DECL = 1U << 25U,
145     PER_ITERATION = 1U << 26U,
146     LEXICAL_VAR = 1U << 27U,
147     HOIST = 1U << 28U,
148     VAR = 1U << 29U,
149     INITIALIZED = 1U << 30U,
150     LEXICAL_BOUND = 1U << 31U,
151 
152     BUILTIN_TYPE = 1ULL << 32ULL,
153 
154     BOXED = 1ULL << 33ULL,
155 
156     HOIST_VAR = HOIST | VAR,
157     CLASS_OR_INTERFACE = CLASS | INTERFACE,
158     CLASS_OR_INTERFACE_OR_ENUM = CLASS_OR_INTERFACE | ENUM_LITERAL,
159 };
160 
161 DEFINE_BITOPS(VariableFlags)
162 
163 enum class LetOrConstStatus {
164     INITIALIZED,
165     UNINITIALIZED,
166 };
167 
168 enum class ScopeFlags : uint32_t {
169     NONE = 0U,
170     SET_LEXICAL_FUNCTION = 1U << 0U,
171     USE_ARGS = 1U << 2U,
172     USE_SUPER = 1U << 3U,
173     INNER_ARROW = 1U << 4U,
174     NO_REG_STORE = 1U << 5U,
175     DECL_SCOPE = 1U << 6U,
176     FIELD_SCOPE = 1U << 7U,
177     METHOD_SCOPE = 1U << 8U,
178     STATIC = 1U << 9U,
179     TYPE_ALIAS = 1U << 10U,
180 
181     STATIC_DECL_SCOPE = DECL_SCOPE | STATIC,
182     STATIC_FIELD_SCOPE = FIELD_SCOPE | STATIC,
183     STATIC_METHOD_SCOPE = METHOD_SCOPE | STATIC,
184 };
185 
186 DEFINE_BITOPS(ScopeFlags)
187 }  // namespace panda::es2panda::varbinder
188 
189 #endif
190