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_PARSER_PARSER_FLAGS_H
17#define ES2PANDA_PARSER_PARSER_FLAGS_H
18
19#include <util/enumbitops.h>
20
21namespace panda::es2panda::parser {
22
23enum class LexicalScopeType : uint8_t {
24    BLOCK,
25    STRICT_BLOCK,
26    CATCH,
27    FUNCTION_PARAM,
28    TS_TYPE_LITERAL,
29};
30
31DEFINE_BITOPS(LexicalScopeType)
32
33enum class VariableParsingFlags : uint32_t {
34    NO_OPTS = 0,
35    NO_SKIP_VAR_KIND = (1 << 0),
36    ACCEPT_CONST_NO_INIT = (1 << 1),
37    DISALLOW_INIT = (1 << 2),
38    VAR = (1 << 3),
39    LET = (1 << 4),
40    CONST = (1 << 5),
41    STOP_AT_IN = (1 << 6),
42    EXPORTED = (1 << 7),
43    IN_FOR = (1 << 8),
44    EXPORTED_IN_TSMODULE = (1 << 9),
45};
46
47DEFINE_BITOPS(VariableParsingFlags)
48
49enum class ExpressionParseFlags : uint32_t {
50    NO_OPTS = 0,
51    ACCEPT_COMMA = 1 << 0,
52    ACCEPT_REST = 1 << 1,
53    EXP_DISALLOW_AS = 1 << 2,
54    DISALLOW_ASSIGNMENT = 1 << 3,
55    DISALLOW_YIELD = 1 << 4,
56    STOP_AT_IN = 1 << 5,
57    ALLOW_TS_PARAM_TOKEN = 1 << 6,
58    MUST_BE_PATTERN = 1 << 7,
59    POTENTIALLY_IN_PATTERN = 1 << 8,
60    OBJECT_PATTERN = 1 << 9,
61    IN_REST = 1 << 10,
62};
63
64DEFINE_BITOPS(ExpressionParseFlags)
65
66enum class StatementParsingFlags : uint8_t {
67    NONE = 0,
68    ALLOW_LEXICAL = 1 << 0,
69    GLOBAL = 1 << 1,
70    IF_ELSE = 1 << 2,
71    LABELLED = 1 << 3,
72
73    STMT_LEXICAL_SCOPE_NEEDED = IF_ELSE | LABELLED,
74    STMT_GLOBAL_LEXICAL = GLOBAL | ALLOW_LEXICAL,
75};
76
77DEFINE_BITOPS(StatementParsingFlags)
78
79enum class ForStatementKind : uint8_t {
80    UPDATE,
81    IN,
82    OF,
83};
84
85}  // namespace panda::es2panda::parser
86
87#endif
88