1 /*
2  * Copyright (c) 2024 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 #include "ast/ast_expr.h"
17 #include "util/string_builder.h"
18 
19 namespace OHOS {
20 namespace Idl {
Dump(const std::string & prefix)21 std::string ASTUnaryExpr::Dump(const std::string &prefix)
22 {
23     StringBuilder sb;
24     sb.Append(prefix);
25     if (isParenExpr) {
26         sb.Append("(");
27     }
28 
29     sb.AppendFormat("%s%s", UnaryOpToString(op_).c_str(), expr_->Dump("").c_str());
30 
31     if (isParenExpr) {
32         sb.Append(")");
33     }
34 
35     return sb.ToString();
36 }
37 
UnaryOpToString(UnaryOpKind op) const38 std::string ASTUnaryExpr::UnaryOpToString(UnaryOpKind op) const
39 {
40     switch (op) {
41         case UnaryOpKind::PLUS:
42             return "+";
43         case UnaryOpKind::MINUS:
44             return "-";
45         case UnaryOpKind::TILDE:
46             return "~";
47         default:
48             return "unknown";
49     }
50 }
51 
Dump(const std::string & prefix)52 std::string ASTBinaryExpr::Dump(const std::string &prefix)
53 {
54     StringBuilder sb;
55     sb.Append(prefix);
56     if (isParenExpr) {
57         sb.Append("(");
58     }
59 
60     sb.AppendFormat("%s %s %s", lExpr_->Dump("").c_str(), BinaryOpToString(op_).c_str(), rExpr_->Dump("").c_str());
61 
62     if (isParenExpr) {
63         sb.Append(")");
64     }
65 
66     return sb.ToString();
67 }
68 
BinaryOpToString(BinaryOpKind op) const69 std::string ASTBinaryExpr::BinaryOpToString(BinaryOpKind op) const
70 {
71     switch (op) {
72         case BinaryOpKind::MUL:
73             return "*";
74         case BinaryOpKind::DIV:
75             return "/";
76         case BinaryOpKind::MOD:
77             return "%";
78         case BinaryOpKind::ADD:
79             return "+";
80         case BinaryOpKind::SUB:
81             return "-";
82         case BinaryOpKind::LSHIFT:
83             return "<<";
84         case BinaryOpKind::RSHIFT:
85             return ">>";
86         case BinaryOpKind::AND:
87             return "&";
88         case BinaryOpKind::XOR:
89             return "^";
90         case BinaryOpKind::OR:
91             return "|";
92         default:
93             return "unknown";
94     }
95 }
96 
Dump(const std::string & prefix)97 std::string ASTNumExpr::Dump(const std::string &prefix)
98 {
99     StringBuilder sb;
100     sb.Append(prefix);
101     if (isParenExpr) {
102         sb.Append("(");
103     }
104 
105     sb.AppendFormat("%s", value_.c_str());
106 
107     if (isParenExpr) {
108         sb.Append(")");
109     }
110 
111     return sb.ToString();
112 }
113 
Dump(const std::string & prefix)114 std::string ASTEnumExpr::Dump(const std::string &prefix)
115 {
116     StringBuilder sb;
117     sb.Append(prefix);
118     if (isParenExpr) {
119         sb.Append("(");
120     }
121 
122     sb.AppendFormat("%s", value_.c_str());
123 
124     if (isParenExpr) {
125         sb.Append(")");
126     }
127 
128     return sb.ToString();
129 }
130 } // namespace Idl
131 } // namespace OHOS