* Copyright (c) 2024 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "ast/ast_expr.h"
#include "util/string_builder.h"
namespace OHOS {
namespace Idl {
std::string ASTUnaryExpr::Dump(const std::string &prefix)
{
StringBuilder sb;
sb.Append(prefix);
if (isParenExpr) {
sb.Append("(");
}
sb.AppendFormat("%s%s", UnaryOpToString(op_).c_str(), expr_->Dump("").c_str());
if (isParenExpr) {
sb.Append(")");
}
return sb.ToString();
}
std::string ASTUnaryExpr::UnaryOpToString(UnaryOpKind op) const
{
switch (op) {
case UnaryOpKind::PLUS:
return "+";
case UnaryOpKind::MINUS:
return "-";
case UnaryOpKind::TILDE:
return "~";
default:
return "unknown";
}
}
std::string ASTBinaryExpr::Dump(const std::string &prefix)
{
StringBuilder sb;
sb.Append(prefix);
if (isParenExpr) {
sb.Append("(");
}
sb.AppendFormat("%s %s %s", lExpr_->Dump("").c_str(), BinaryOpToString(op_).c_str(), rExpr_->Dump("").c_str());
if (isParenExpr) {
sb.Append(")");
}
return sb.ToString();
}
std::string ASTBinaryExpr::BinaryOpToString(BinaryOpKind op) const
{
switch (op) {
case BinaryOpKind::MUL:
return "*";
case BinaryOpKind::DIV:
return "/";
case BinaryOpKind::MOD:
return "%";
case BinaryOpKind::ADD:
return "+";
case BinaryOpKind::SUB:
return "-";
case BinaryOpKind::LSHIFT:
return "<<";
case BinaryOpKind::RSHIFT:
return ">>";
case BinaryOpKind::AND:
return "&";
case BinaryOpKind::XOR:
return "^";
case BinaryOpKind::OR:
return "|";
default:
return "unknown";
}
}
std::string ASTNumExpr::Dump(const std::string &prefix)
{
StringBuilder sb;
sb.Append(prefix);
if (isParenExpr) {
sb.Append("(");
}
sb.AppendFormat("%s", value_.c_str());
if (isParenExpr) {
sb.Append(")");
}
return sb.ToString();
}
std::string ASTEnumExpr::Dump(const std::string &prefix)
{
StringBuilder sb;
sb.Append(prefix);
if (isParenExpr) {
sb.Append("(");
}
sb.AppendFormat("%s", value_.c_str());
if (isParenExpr) {
sb.Append(")");
}
return sb.ToString();
}
}
}