PDBFPO: Use references instead of pointers, where possible
Summary: The code was passing pointers around, expecting they would be not null. In c++ it is possible to convey this notion explicitly by using a reference instead. Not all uses of pointers could be converted to references (e.g. one can't store references in a container), but this will at least make it locally obvious that code is dealing with nonnull pointers. Reviewers: aleksandr.urakov, amccarth Subscribers: lldb-commits Differential Revision: https://reviews.llvm.org/D60271 llvm-svn: 357744
This commit is contained in:
@@ -53,7 +53,7 @@ protected:
|
||||
|
||||
public:
|
||||
virtual ~FPOProgramNode() = default;
|
||||
virtual void Accept(FPOProgramASTVisitor *visitor) = 0;
|
||||
virtual void Accept(FPOProgramASTVisitor &visitor) = 0;
|
||||
|
||||
Kind GetKind() const { return m_token_kind; }
|
||||
|
||||
@@ -66,7 +66,7 @@ public:
|
||||
FPOProgramNodeSymbol(llvm::StringRef name)
|
||||
: FPOProgramNode(Symbol), m_name(name) {}
|
||||
|
||||
void Accept(FPOProgramASTVisitor *visitor) override;
|
||||
void Accept(FPOProgramASTVisitor &visitor) override;
|
||||
|
||||
llvm::StringRef GetName() const { return m_name; }
|
||||
|
||||
@@ -79,7 +79,7 @@ public:
|
||||
FPOProgramNodeRegisterRef(uint32_t lldb_reg_num)
|
||||
: FPOProgramNode(Register), m_lldb_reg_num(lldb_reg_num) {}
|
||||
|
||||
void Accept(FPOProgramASTVisitor *visitor) override;
|
||||
void Accept(FPOProgramASTVisitor &visitor) override;
|
||||
|
||||
uint32_t GetLLDBRegNum() const { return m_lldb_reg_num; }
|
||||
|
||||
@@ -92,7 +92,7 @@ public:
|
||||
FPOProgramNodeIntegerLiteral(uint32_t value)
|
||||
: FPOProgramNode(IntegerLiteral), m_value(value) {}
|
||||
|
||||
void Accept(FPOProgramASTVisitor *visitor) override;
|
||||
void Accept(FPOProgramASTVisitor &visitor) override;
|
||||
|
||||
uint32_t GetValue() const { return m_value; }
|
||||
|
||||
@@ -108,12 +108,12 @@ public:
|
||||
Align,
|
||||
};
|
||||
|
||||
FPOProgramNodeBinaryOp(OpType op_type, FPOProgramNode *left,
|
||||
FPOProgramNode *right)
|
||||
: FPOProgramNode(BinaryOp), m_op_type(op_type), m_left(left),
|
||||
m_right(right) {}
|
||||
FPOProgramNodeBinaryOp(OpType op_type, FPOProgramNode &left,
|
||||
FPOProgramNode &right)
|
||||
: FPOProgramNode(BinaryOp), m_op_type(op_type), m_left(&left),
|
||||
m_right(&right) {}
|
||||
|
||||
void Accept(FPOProgramASTVisitor *visitor) override;
|
||||
void Accept(FPOProgramASTVisitor &visitor) override;
|
||||
|
||||
OpType GetOpType() const { return m_op_type; }
|
||||
|
||||
@@ -135,10 +135,10 @@ public:
|
||||
Deref,
|
||||
};
|
||||
|
||||
FPOProgramNodeUnaryOp(OpType op_type, FPOProgramNode *operand)
|
||||
: FPOProgramNode(UnaryOp), m_op_type(op_type), m_operand(operand) {}
|
||||
FPOProgramNodeUnaryOp(OpType op_type, FPOProgramNode &operand)
|
||||
: FPOProgramNode(UnaryOp), m_op_type(op_type), m_operand(&operand) {}
|
||||
|
||||
void Accept(FPOProgramASTVisitor *visitor) override;
|
||||
void Accept(FPOProgramASTVisitor &visitor) override;
|
||||
|
||||
OpType GetOpType() const { return m_op_type; }
|
||||
|
||||
@@ -154,31 +154,31 @@ class FPOProgramASTVisitor {
|
||||
public:
|
||||
virtual ~FPOProgramASTVisitor() = default;
|
||||
|
||||
virtual void Visit(FPOProgramNodeSymbol *node) {}
|
||||
virtual void Visit(FPOProgramNodeRegisterRef *node) {}
|
||||
virtual void Visit(FPOProgramNodeIntegerLiteral *node) {}
|
||||
virtual void Visit(FPOProgramNodeBinaryOp *node) {}
|
||||
virtual void Visit(FPOProgramNodeUnaryOp *node) {}
|
||||
virtual void Visit(FPOProgramNodeSymbol &node) {}
|
||||
virtual void Visit(FPOProgramNodeRegisterRef &node) {}
|
||||
virtual void Visit(FPOProgramNodeIntegerLiteral &node) {}
|
||||
virtual void Visit(FPOProgramNodeBinaryOp &node) {}
|
||||
virtual void Visit(FPOProgramNodeUnaryOp &node) {}
|
||||
};
|
||||
|
||||
void FPOProgramNodeSymbol::Accept(FPOProgramASTVisitor *visitor) {
|
||||
visitor->Visit(this);
|
||||
void FPOProgramNodeSymbol::Accept(FPOProgramASTVisitor &visitor) {
|
||||
visitor.Visit(*this);
|
||||
}
|
||||
|
||||
void FPOProgramNodeRegisterRef::Accept(FPOProgramASTVisitor *visitor) {
|
||||
visitor->Visit(this);
|
||||
void FPOProgramNodeRegisterRef::Accept(FPOProgramASTVisitor &visitor) {
|
||||
visitor.Visit(*this);
|
||||
}
|
||||
|
||||
void FPOProgramNodeIntegerLiteral::Accept(FPOProgramASTVisitor *visitor) {
|
||||
visitor->Visit(this);
|
||||
void FPOProgramNodeIntegerLiteral::Accept(FPOProgramASTVisitor &visitor) {
|
||||
visitor.Visit(*this);
|
||||
}
|
||||
|
||||
void FPOProgramNodeBinaryOp::Accept(FPOProgramASTVisitor *visitor) {
|
||||
visitor->Visit(this);
|
||||
void FPOProgramNodeBinaryOp::Accept(FPOProgramASTVisitor &visitor) {
|
||||
visitor.Visit(*this);
|
||||
}
|
||||
|
||||
void FPOProgramNodeUnaryOp::Accept(FPOProgramASTVisitor *visitor) {
|
||||
visitor->Visit(this);
|
||||
void FPOProgramNodeUnaryOp::Accept(FPOProgramASTVisitor &visitor) {
|
||||
visitor.Visit(*this);
|
||||
}
|
||||
|
||||
class FPOProgramASTVisitorMergeDependent : public FPOProgramASTVisitor {
|
||||
@@ -191,10 +191,8 @@ public:
|
||||
void Merge(FPOProgramNode *&node_ref);
|
||||
|
||||
private:
|
||||
void Visit(FPOProgramNodeRegisterRef *node) override {}
|
||||
void Visit(FPOProgramNodeIntegerLiteral *node) override {}
|
||||
void Visit(FPOProgramNodeBinaryOp *node) override;
|
||||
void Visit(FPOProgramNodeUnaryOp *node) override;
|
||||
void Visit(FPOProgramNodeBinaryOp &node) override;
|
||||
void Visit(FPOProgramNodeUnaryOp &node) override;
|
||||
|
||||
void TryReplace(FPOProgramNode *&node_ref) const;
|
||||
|
||||
@@ -204,15 +202,15 @@ private:
|
||||
|
||||
void FPOProgramASTVisitorMergeDependent::Merge(FPOProgramNode *&node_ref) {
|
||||
TryReplace(node_ref);
|
||||
node_ref->Accept(this);
|
||||
node_ref->Accept(*this);
|
||||
}
|
||||
|
||||
void FPOProgramASTVisitorMergeDependent::Visit(FPOProgramNodeBinaryOp *node) {
|
||||
Merge(node->Left());
|
||||
Merge(node->Right());
|
||||
void FPOProgramASTVisitorMergeDependent::Visit(FPOProgramNodeBinaryOp &node) {
|
||||
Merge(node.Left());
|
||||
Merge(node.Right());
|
||||
}
|
||||
void FPOProgramASTVisitorMergeDependent::Visit(FPOProgramNodeUnaryOp *node) {
|
||||
Merge(node->Operand());
|
||||
void FPOProgramASTVisitorMergeDependent::Visit(FPOProgramNodeUnaryOp &node) {
|
||||
Merge(node.Operand());
|
||||
}
|
||||
|
||||
void FPOProgramASTVisitorMergeDependent::TryReplace(
|
||||
@@ -242,8 +240,8 @@ public:
|
||||
bool Resolve(FPOProgramNode *&program);
|
||||
|
||||
private:
|
||||
void Visit(FPOProgramNodeBinaryOp *node) override;
|
||||
void Visit(FPOProgramNodeUnaryOp *node) override;
|
||||
void Visit(FPOProgramNodeBinaryOp &node) override;
|
||||
void Visit(FPOProgramNodeUnaryOp &node) override;
|
||||
|
||||
bool TryReplace(FPOProgramNode *&node_ref);
|
||||
|
||||
@@ -256,7 +254,7 @@ private:
|
||||
bool FPOProgramASTVisitorResolveRegisterRefs::Resolve(FPOProgramNode *&program) {
|
||||
if (!TryReplace(program))
|
||||
return false;
|
||||
program->Accept(this);
|
||||
program->Accept(*this);
|
||||
return m_no_error_flag;
|
||||
}
|
||||
|
||||
@@ -302,38 +300,38 @@ bool FPOProgramASTVisitorResolveRegisterRefs::TryReplace(
|
||||
}
|
||||
|
||||
void FPOProgramASTVisitorResolveRegisterRefs::Visit(
|
||||
FPOProgramNodeBinaryOp *node) {
|
||||
m_no_error_flag = Resolve(node->Left()) && Resolve(node->Right());
|
||||
FPOProgramNodeBinaryOp &node) {
|
||||
m_no_error_flag = Resolve(node.Left()) && Resolve(node.Right());
|
||||
}
|
||||
|
||||
void FPOProgramASTVisitorResolveRegisterRefs::Visit(
|
||||
FPOProgramNodeUnaryOp *node) {
|
||||
m_no_error_flag = Resolve(node->Operand());
|
||||
FPOProgramNodeUnaryOp &node) {
|
||||
m_no_error_flag = Resolve(node.Operand());
|
||||
}
|
||||
|
||||
class FPOProgramASTVisitorDWARFCodegen : public FPOProgramASTVisitor {
|
||||
public:
|
||||
FPOProgramASTVisitorDWARFCodegen(Stream &stream) : m_out_stream(stream) {}
|
||||
|
||||
void Emit(FPOProgramNode *program);
|
||||
void Emit(FPOProgramNode &program);
|
||||
|
||||
private:
|
||||
void Visit(FPOProgramNodeRegisterRef *node) override;
|
||||
void Visit(FPOProgramNodeIntegerLiteral *node) override;
|
||||
void Visit(FPOProgramNodeBinaryOp *node) override;
|
||||
void Visit(FPOProgramNodeUnaryOp *node) override;
|
||||
void Visit(FPOProgramNodeRegisterRef &node) override;
|
||||
void Visit(FPOProgramNodeIntegerLiteral &node) override;
|
||||
void Visit(FPOProgramNodeBinaryOp &node) override;
|
||||
void Visit(FPOProgramNodeUnaryOp &node) override;
|
||||
|
||||
private:
|
||||
Stream &m_out_stream;
|
||||
};
|
||||
|
||||
void FPOProgramASTVisitorDWARFCodegen::Emit(FPOProgramNode *program) {
|
||||
program->Accept(this);
|
||||
void FPOProgramASTVisitorDWARFCodegen::Emit(FPOProgramNode &program) {
|
||||
program.Accept(*this);
|
||||
}
|
||||
|
||||
void FPOProgramASTVisitorDWARFCodegen::Visit(FPOProgramNodeRegisterRef *node) {
|
||||
void FPOProgramASTVisitorDWARFCodegen::Visit(FPOProgramNodeRegisterRef &node) {
|
||||
|
||||
uint32_t reg_num = node->GetLLDBRegNum();
|
||||
uint32_t reg_num = node.GetLLDBRegNum();
|
||||
lldbassert(reg_num != LLDB_INVALID_REGNUM);
|
||||
|
||||
if (reg_num > 31) {
|
||||
@@ -346,18 +344,18 @@ void FPOProgramASTVisitorDWARFCodegen::Visit(FPOProgramNodeRegisterRef *node) {
|
||||
}
|
||||
|
||||
void FPOProgramASTVisitorDWARFCodegen::Visit(
|
||||
FPOProgramNodeIntegerLiteral *node) {
|
||||
uint32_t value = node->GetValue();
|
||||
FPOProgramNodeIntegerLiteral &node) {
|
||||
uint32_t value = node.GetValue();
|
||||
m_out_stream.PutHex8(DW_OP_constu);
|
||||
m_out_stream.PutULEB128(value);
|
||||
}
|
||||
|
||||
void FPOProgramASTVisitorDWARFCodegen::Visit(FPOProgramNodeBinaryOp *node) {
|
||||
void FPOProgramASTVisitorDWARFCodegen::Visit(FPOProgramNodeBinaryOp &node) {
|
||||
|
||||
Emit(node->Left());
|
||||
Emit(node->Right());
|
||||
Emit(*node.Left());
|
||||
Emit(*node.Right());
|
||||
|
||||
switch (node->GetOpType()) {
|
||||
switch (node.GetOpType()) {
|
||||
case FPOProgramNodeBinaryOp::Plus:
|
||||
m_out_stream.PutHex8(DW_OP_plus);
|
||||
// NOTE: can be optimized by using DW_OP_plus_uconst opcpode
|
||||
@@ -379,10 +377,10 @@ void FPOProgramASTVisitorDWARFCodegen::Visit(FPOProgramNodeBinaryOp *node) {
|
||||
}
|
||||
}
|
||||
|
||||
void FPOProgramASTVisitorDWARFCodegen::Visit(FPOProgramNodeUnaryOp *node) {
|
||||
Emit(node->Operand());
|
||||
void FPOProgramASTVisitorDWARFCodegen::Visit(FPOProgramNodeUnaryOp &node) {
|
||||
Emit(*node.Operand());
|
||||
|
||||
switch (node->GetOpType()) {
|
||||
switch (node.GetOpType()) {
|
||||
case FPOProgramNodeUnaryOp::Deref:
|
||||
m_out_stream.PutHex8(DW_OP_deref);
|
||||
break;
|
||||
@@ -429,7 +427,7 @@ static bool ParseFPOSingleAssignmentProgram(llvm::StringRef program,
|
||||
FPOProgramNode *right = eval_stack.pop_back_val();
|
||||
FPOProgramNode *left = eval_stack.pop_back_val();
|
||||
FPOProgramNode *node = alloc.makeNode<FPOProgramNodeBinaryOp>(
|
||||
ops_binary_it->second, left, right);
|
||||
ops_binary_it->second, *left, *right);
|
||||
eval_stack.push_back(node);
|
||||
continue;
|
||||
}
|
||||
@@ -442,7 +440,7 @@ static bool ParseFPOSingleAssignmentProgram(llvm::StringRef program,
|
||||
}
|
||||
FPOProgramNode *operand = eval_stack.pop_back_val();
|
||||
FPOProgramNode *node =
|
||||
alloc.makeNode<FPOProgramNodeUnaryOp>(ops_unary_it->second, operand);
|
||||
alloc.makeNode<FPOProgramNodeUnaryOp>(ops_unary_it->second, *operand);
|
||||
eval_stack.push_back(node);
|
||||
continue;
|
||||
}
|
||||
@@ -542,6 +540,6 @@ bool lldb_private::npdb::TranslateFPOProgramToDWARFExpression(
|
||||
}
|
||||
|
||||
FPOProgramASTVisitorDWARFCodegen codegen(stream);
|
||||
codegen.Emit(target_program);
|
||||
codegen.Emit(*target_program);
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user