• 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 <cstdlib>
20 #include <util/enumbitops.h>
21 
22 namespace panda::es2panda::binder {
23 
24 #define DECLARATION_KINDS(_)             \
25     _(VAR, VarDecl)                      \
26     _(LET, LetDecl)                      \
27     _(CONST, ConstDecl)                  \
28     _(CLASS, ClassDecl)                  \
29     _(FUNC, FunctionDecl)                \
30     _(PARAM, ParameterDecl)              \
31     /* TS */                             \
32     _(TYPE_ALIAS, TypeAliasDecl)         \
33     _(NAMESPACE, NamespaceDecl)          \
34     _(INTERFACE, InterfaceDecl)          \
35     _(ENUM_LITERAL, EnumLiteralDecl)     \
36     _(TYPE_PARAMETER, TypeParameterDecl) \
37     _(PROPERTY, PropertyDecl)            \
38     _(METHOD, MethodDecl)                \
39     _(ENUM, EnumDecl)                    \
40     _(IMPORT_EQUALS, ImportEqualsDecl)
41 
42 enum class DeclType {
43     NONE,
44 #define DECLARE_TYPES(decl_kind, class_name) decl_kind,
45     DECLARATION_KINDS(DECLARE_TYPES)
46 #undef DECLARE_TYPES
47 };
48 
49 #define SCOPE_TYPES(_)                    \
50     _(PARAM, ParamScope)                  \
51     _(CATCH_PARAM, CatchParamScope)       \
52     _(FUNCTION_PARAM, FunctionParamScope) \
53     _(CATCH, CatchScope)                  \
54     _(LOCAL, LocalScope)                  \
55     /* Variable Scopes */                 \
56     _(CLASS, ClassScope)                  \
57     _(LOOP, LoopScope)                    \
58     _(FUNCTION, FunctionScope)            \
59     _(STATIC_BLOCK, StaticBlockScope)     \
60     _(GLOBAL, GlobalScope)                \
61     _(MODULE, ModuleScope)                \
62     _(TSMODULE, TSModuleScope)            \
63     _(TSENUM, TSEnumScope)
64 
65 
66 enum class ScopeType {
67 #define GEN_SCOPE_TYPES(type, class_name) type,
68     SCOPE_TYPES(GEN_SCOPE_TYPES)
69 #undef GEN_SCOPE_TYPES
70 };
71 
72 enum class ResolveBindingOptions {
73     BINDINGS = 1U << 0U,
74     INTERFACES = 1U << 1U,
75 
76     ALL = BINDINGS | INTERFACES,
77 };
78 
79 DEFINE_BITOPS(ResolveBindingOptions)
80 
81 enum class ResolveBindingFlags {
82     ALL = 1U << 0U,
83     TS_BEFORE_TRANSFORM = 1U << 1U,
84     TS_AFTER_TRANSFORM = 1U << 2U,
85 };
86 
87 DEFINE_BITOPS(ResolveBindingFlags)
88 
89 #define VARIABLE_TYPES(_)                  \
90     _(LOCAL, LocalVariable)                \
91     _(GLOBAL, GlobalVariable)              \
92     _(MODULE, ModuleVariable)              \
93     _(ENUM, EnumVariable)                  \
94     _(NAMESPACE, NamespaceVariable)        \
95     _(IMPORT_EQUALS, ImportEqualsVariable) \
96     _(ENUMLITERAL, EnumLiteralVariable)
97 
98 enum class VariableType {
99 #define GEN_VARIABLE_TYPES(type, class_name) type,
100     VARIABLE_TYPES(GEN_VARIABLE_TYPES)
101 #undef GEN_VARIABLE_TYPES
102 };
103 
104 enum class VariableKind {
105     NONE,
106     VAR,
107     LEXICAL,
108     FUNCTION,
109     MODULE,
110 };
111 
112 enum class VariableFlags {
113     NONE = 0,
114     OPTIONAL = 1 << 0,
115     PROPERTY = 1 << 1,
116     METHOD = 1 << 2,
117     TYPE_ALIAS = 1 << 3,
118     INTERFACE = 1 << 4,
119     ENUM_LITERAL = 1 << 5,
120     READONLY = 1 << 6,
121     COMPUTED = 1 << 7,
122     COMPUTED_IDENT = 1 << 8,
123     COMPUTED_INDEX = 1 << 9,
124     INDEX_NAME = 1 << 10,
125     IMPORT = 1 << 11,
126     LOCAL_EXPORT = 1 << 12,
127     INFERED_IN_PATTERN = 1 << 13,
128     REST_ARG = 1 << 14,
129     NUMERIC_NAME = 1 << 15,
130     TYPE = 1 << 16,
131     NAMESPACE = 1 << 17,
132     IMPORT_EQUALS = 1 << 18,
133 
134     INDEX_LIKE = COMPUTED_INDEX | INDEX_NAME,
135 
136     LOOP_DECL = 1 << 25,
137     PER_ITERATION = 1 << 26,
138     HOIST = 1 << 27,
139     VAR = 1 << 28,
140     INITIALIZED = 1 << 29,
141     LEXICAL_BOUND = 1 << 30,
142 
143     HOIST_VAR = HOIST | VAR,
144 };
145 
146 DEFINE_BITOPS(VariableFlags)
147 
148 enum class LetOrConstStatus {
149     INITIALIZED,
150     UNINITIALIZED,
151 };
152 
153 enum class VariableScopeFlags {
154     NONE = 0,
155     SET_LEXICAL_FUNCTION = 1U << 0U,
156     USE_ARGS = 1U << 2U,
157     USE_SUPER = 1U << 3U,
158     INNER_ARROW = 1U << 4U,
159 };
160 
161 DEFINE_BITOPS(VariableScopeFlags)
162 
163 enum class DeclarationFlags {
164     NONE = 0,
165     IMPORT = 1 << 0,
166     EXPORT = 1 << 1,
167     NAMESPACE_IMPORT = 1 << 2,
168     EXPORT_IN_TSMODULE = 1 << 3,
169 };
170 
171 DEFINE_BITOPS(DeclarationFlags)
172 
173 enum class TSBindingType : size_t {
174     NAMESPACE = 0,
175     ENUMLITERAL,
176     INTERFACE,
177     IMPORT_EQUALS,
178     COUNT,
179 };
180 
181 }  // namespace panda::es2panda::binder
182 
183 #endif
184