• 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_IR_EXPRESSION_H
17 #define ES2PANDA_IR_EXPRESSION_H
18 
19 #include <ir/astNode.h>
20 
21 namespace panda::es2panda::ir {
22 
23 class Literal;
24 class TypeNode;
25 
26 class Expression : public AstNode {
27 public:
IsGrouped()28     bool IsGrouped() const
29     {
30         return grouped_;
31     }
32 
SetGrouped()33     void SetGrouped()
34     {
35         grouped_ = true;
36     }
37 
AsLiteral()38     const Literal *AsLiteral() const
39     {
40         ASSERT(IsLiteral());
41         return reinterpret_cast<const Literal *>(this);
42     }
43 
AsLiteral()44     Literal *AsLiteral()
45     {
46         ASSERT(IsLiteral());
47         return reinterpret_cast<Literal *>(this);
48     }
49 
SetTsTypeAnnotation(Expression * typeAnnotation)50     virtual void SetTsTypeAnnotation([[maybe_unused]] Expression *typeAnnotation)
51     {
52         UNREACHABLE();
53     }
54 
IsLiteral()55     virtual bool IsLiteral() const
56     {
57         return false;
58     }
59 
IsExpression()60     bool IsExpression() const override
61     {
62         return true;
63     }
64 
AsTypeNode()65     TypeNode *AsTypeNode()
66     {
67         return reinterpret_cast<TypeNode *>(this);
68     }
69 
AsTypeNode()70     const TypeNode *AsTypeNode() const
71     {
72         return reinterpret_cast<const TypeNode *>(this);
73     }
74 
75 protected:
Expression(AstNodeType type)76     explicit Expression(AstNodeType type) : AstNode(type) {}
77 
78 private:
79     bool grouped_ {false};
80 };
81 
82 }  // namespace panda::es2panda::ir
83 
84 #endif /* ES2PANDA_IR_EXPRESSION_H */
85