summaryrefslogtreecommitdiffstats
path: root/lldb
diff options
context:
space:
mode:
authorPavel Labath <pavel@labath.sk>2019-04-08 09:52:57 +0000
committerPavel Labath <pavel@labath.sk>2019-04-08 09:52:57 +0000
commit1beeda682baf7f438ac1aafa5db122c7fde6ebae (patch)
treeeab33b3f00f04fb4d05029a88efacbd6fa5f9be2 /lldb
parentedf91ed855157b89339db433f6085a70af1a3a64 (diff)
downloadbcm5719-llvm-1beeda682baf7f438ac1aafa5db122c7fde6ebae.tar.gz
bcm5719-llvm-1beeda682baf7f438ac1aafa5db122c7fde6ebae.zip
PDBFPO: add dyn_cast support
This adds the necessary glue so we can use llvm::dyn_cast, instead of doing a manual type-check followed by a cast. NFC. llvm-svn: 357895
Diffstat (limited to 'lldb')
-rw-r--r--lldb/source/Plugins/SymbolFile/NativePDB/PdbFPOProgramToDWARFExpression.cpp32
1 files changed, 25 insertions, 7 deletions
diff --git a/lldb/source/Plugins/SymbolFile/NativePDB/PdbFPOProgramToDWARFExpression.cpp b/lldb/source/Plugins/SymbolFile/NativePDB/PdbFPOProgramToDWARFExpression.cpp
index dfecfaa85a7..c3b61cb66bd 100644
--- a/lldb/source/Plugins/SymbolFile/NativePDB/PdbFPOProgramToDWARFExpression.cpp
+++ b/lldb/source/Plugins/SymbolFile/NativePDB/PdbFPOProgramToDWARFExpression.cpp
@@ -18,6 +18,7 @@
#include "llvm/ADT/StringExtras.h"
#include "llvm/DebugInfo/CodeView/CodeView.h"
#include "llvm/DebugInfo/CodeView/EnumTables.h"
+#include "llvm/Support/Casting.h"
using namespace lldb;
using namespace lldb_private;
@@ -70,6 +71,10 @@ public:
llvm::StringRef GetName() const { return m_name; }
+ static bool classof(const FPOProgramNode *node) {
+ return node->GetKind() == Symbol;
+ }
+
private:
llvm::StringRef m_name;
};
@@ -83,6 +88,10 @@ public:
uint32_t GetLLDBRegNum() const { return m_lldb_reg_num; }
+ static bool classof(const FPOProgramNode *node) {
+ return node->GetKind() == Register;
+ }
+
private:
uint32_t m_lldb_reg_num;
};
@@ -96,6 +105,10 @@ public:
uint32_t GetValue() const { return m_value; }
+ static bool classof(const FPOProgramNode *node) {
+ return node->GetKind() == IntegerLiteral;
+ }
+
private:
uint32_t m_value;
};
@@ -123,6 +136,10 @@ public:
const FPOProgramNode *Right() const { return m_right; }
FPOProgramNode *&Right() { return m_right; }
+ static bool classof(const FPOProgramNode *node) {
+ return node->GetKind() == BinaryOp;
+ }
+
private:
OpType m_op_type;
FPOProgramNode *m_left;
@@ -145,6 +162,10 @@ public:
const FPOProgramNode *Operand() const { return m_operand; }
FPOProgramNode *&Operand() { return m_operand; }
+ static bool classof(const FPOProgramNode *node) {
+ return node->GetKind() == UnaryOp;
+ }
+
private:
OpType m_op_type;
FPOProgramNode *m_operand;
@@ -216,10 +237,8 @@ void FPOProgramASTVisitorMergeDependent::Visit(FPOProgramNodeUnaryOp &node) {
void FPOProgramASTVisitorMergeDependent::TryReplace(
FPOProgramNode *&node_ref) const {
- while (node_ref->GetKind() == FPOProgramNode::Symbol) {
- auto *node_symbol_ref = static_cast<FPOProgramNodeSymbol *>(node_ref);
-
- auto it = m_dependent_programs.find(node_symbol_ref->GetName());
+ while (auto *symbol = llvm::dyn_cast<FPOProgramNodeSymbol>(node_ref)) {
+ auto it = m_dependent_programs.find(symbol->GetName());
if (it == m_dependent_programs.end()) {
break;
}
@@ -277,11 +296,10 @@ static uint32_t ResolveLLDBRegisterNum(llvm::StringRef reg_name, llvm::Triple::A
bool FPOProgramASTVisitorResolveRegisterRefs::TryReplace(
FPOProgramNode *&node_ref) {
- if (node_ref->GetKind() != FPOProgramNode::Symbol)
+ auto *symbol = llvm::dyn_cast<FPOProgramNodeSymbol>(node_ref);
+ if (!symbol)
return true;
- auto *symbol = static_cast<FPOProgramNodeSymbol *>(node_ref);
-
// Look up register reference as lvalue in preceding assignments.
auto it = m_dependent_programs.find(symbol->GetName());
if (it != m_dependent_programs.end()) {
OpenPOWER on IntegriCloud