Add binary arithmetic multiplication, division, remainder to DIL. This patch also passes DILMode to the parser to check if binary multiplication is allowed by the mode. This cannot be done in the lexer alone, because it allows token `*` as a dereference operator for legacy mode, but that token could also be a binary multiplication allowed only in full mode.
81 lines
2.1 KiB
C++
81 lines
2.1 KiB
C++
//===-- DILAST.cpp --------------------------------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "lldb/ValueObject/DILAST.h"
|
|
#include "llvm/Support/ErrorHandling.h"
|
|
|
|
namespace lldb_private::dil {
|
|
|
|
BinaryOpKind GetBinaryOpKindFromToken(Token::Kind token_kind) {
|
|
switch (token_kind) {
|
|
case Token::plus:
|
|
return BinaryOpKind::Add;
|
|
case Token::minus:
|
|
return BinaryOpKind::Sub;
|
|
case Token::star:
|
|
return BinaryOpKind::Mul;
|
|
case Token::slash:
|
|
return BinaryOpKind::Div;
|
|
case Token::percent:
|
|
return BinaryOpKind::Rem;
|
|
default:
|
|
break;
|
|
}
|
|
llvm_unreachable("Unknown binary operator kind.");
|
|
}
|
|
|
|
llvm::Expected<lldb::ValueObjectSP> ErrorNode::Accept(Visitor *v) const {
|
|
llvm_unreachable("Attempting to Visit a DIL ErrorNode.");
|
|
}
|
|
|
|
llvm::Expected<lldb::ValueObjectSP> IdentifierNode::Accept(Visitor *v) const {
|
|
return v->Visit(*this);
|
|
}
|
|
|
|
llvm::Expected<lldb::ValueObjectSP> MemberOfNode::Accept(Visitor *v) const {
|
|
return v->Visit(*this);
|
|
}
|
|
|
|
llvm::Expected<lldb::ValueObjectSP> UnaryOpNode::Accept(Visitor *v) const {
|
|
return v->Visit(*this);
|
|
}
|
|
|
|
llvm::Expected<lldb::ValueObjectSP> BinaryOpNode::Accept(Visitor *v) const {
|
|
return v->Visit(*this);
|
|
}
|
|
|
|
llvm::Expected<lldb::ValueObjectSP>
|
|
ArraySubscriptNode::Accept(Visitor *v) const {
|
|
return v->Visit(*this);
|
|
}
|
|
|
|
llvm::Expected<lldb::ValueObjectSP>
|
|
BitFieldExtractionNode::Accept(Visitor *v) const {
|
|
return v->Visit(*this);
|
|
}
|
|
|
|
llvm::Expected<lldb::ValueObjectSP>
|
|
IntegerLiteralNode::Accept(Visitor *v) const {
|
|
return v->Visit(*this);
|
|
}
|
|
|
|
llvm::Expected<lldb::ValueObjectSP> FloatLiteralNode::Accept(Visitor *v) const {
|
|
return v->Visit(*this);
|
|
}
|
|
|
|
llvm::Expected<lldb::ValueObjectSP>
|
|
BooleanLiteralNode::Accept(Visitor *v) const {
|
|
return v->Visit(*this);
|
|
}
|
|
|
|
llvm::Expected<lldb::ValueObjectSP> CastNode::Accept(Visitor *v) const {
|
|
return v->Visit(*this);
|
|
}
|
|
|
|
} // namespace lldb_private::dil
|