• 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     _(LOOP, LoopScope)                    \
57     _(FUNCTION, FunctionScope)            \
58     _(GLOBAL, GlobalScope)                \
59     _(MODULE, ModuleScope)                \
60     _(TSMODULE, TSModuleScope)
61 
62 
63 enum class ScopeType {
64 #define GEN_SCOPE_TYPES(type, class_name) type,
65     SCOPE_TYPES(GEN_SCOPE_TYPES)
66 #undef GEN_SCOPE_TYPES
67 };
68 
69 enum class ResolveBindingOptions {
70     BINDINGS = 1U << 0U,
71     INTERFACES = 1U << 1U,
72 
73     ALL = BINDINGS | INTERFACES,
74 };
75 
76 DEFINE_BITOPS(ResolveBindingOptions)
77 
78 enum class ResolveBindingFlags {
79     ALL = 1U << 0U,
80     TS_BEFORE_TRANSFORM = 1U << 1U,
81 };
82 
83 DEFINE_BITOPS(ResolveBindingFlags)
84 
85 #define VARIABLE_TYPES(_)                  \
86     _(LOCAL, LocalVariable)                \
87     _(GLOBAL, GlobalVariable)              \
88     _(MODULE, ModuleVariable)              \
89     _(ENUM, EnumVariable)                  \
90     _(NAMESPACE, NamespaceVariable)        \
91     _(IMPORT_EQUALS, ImportEqualsVariable)
92 
93 enum class VariableType {
94 #define GEN_VARIABLE_TYPES(type, class_name) type,
95     VARIABLE_TYPES(GEN_VARIABLE_TYPES)
96 #undef GEN_VARIABLE_TYPES
97 };
98 
99 enum class VariableKind {
100     NONE,
101     VAR,
102     LEXICAL,
103     FUNCTION,
104     MODULE,
105 };
106 
107 enum class VariableFlags {
108     NONE = 0,
109     OPTIONAL = 1 << 0,
110     PROPERTY = 1 << 1,
111     METHOD = 1 << 2,
112     TYPE_ALIAS = 1 << 3,
113     INTERFACE = 1 << 4,
114     ENUM_LITERAL = 1 << 5,
115     READONLY = 1 << 6,
116     COMPUTED = 1 << 7,
117     COMPUTED_IDENT = 1 << 8,
118     COMPUTED_INDEX = 1 << 9,
119     INDEX_NAME = 1 << 10,
120     IMPORT = 1 << 11,
121     LOCAL_EXPORT = 1 << 12,
122     INFERED_IN_PATTERN = 1 << 13,
123     REST_ARG = 1 << 14,
124     NUMERIC_NAME = 1 << 15,
125     TYPE = 1 << 16,
126     NAMESPACE = 1 << 17,
127     IMPORT_EQUALS = 1 << 18,
128 
129     INDEX_LIKE = COMPUTED_INDEX | INDEX_NAME,
130 
131     LOOP_DECL = 1 << 25,
132     PER_ITERATION = 1 << 26,
133     HOIST = 1 << 27,
134     VAR = 1 << 28,
135     INITIALIZED = 1 << 29,
136     LEXICAL_BOUND = 1 << 30,
137 
138     HOIST_VAR = HOIST | VAR,
139 };
140 
141 DEFINE_BITOPS(VariableFlags)
142 
143 enum class LetOrConstStatus {
144     INITIALIZED,
145     UNINITIALIZED,
146 };
147 
148 enum class VariableScopeFlags {
149     NONE = 0,
150     SET_LEXICAL_FUNCTION = 1U << 0U,
151     USE_ARGS = 1U << 2U,
152     USE_SUPER = 1U << 3U,
153     INNER_ARROW = 1U << 4U,
154 };
155 
156 DEFINE_BITOPS(VariableScopeFlags)
157 
158 enum class DeclarationFlags {
159     NONE = 0,
160     IMPORT = 1 << 0,
161     EXPORT = 1 << 1,
162     NAMESPACE_IMPORT = 1 << 2,
163 };
164 
165 DEFINE_BITOPS(DeclarationFlags)
166 
167 enum class TSBindingType : size_t {
168     NAMESPACE = 0,
169     ENUM,
170     INTERFACE,
171     IMPORT_EQUALS,
172     COUNT,
173 };
174 
175 }  // namespace panda::es2panda::binder
176 
177 #endif
178