Skip to content

Commit 9e39777

Browse files
committed
Make fragile_ivar, check_ptr_vs_member and use_synthetic members
of the Interpreter.
1 parent 2abdab6 commit 9e39777

File tree

5 files changed

+28
-38
lines changed

5 files changed

+28
-38
lines changed

lldb/include/lldb/ValueObject/DILAST.h

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -92,24 +92,15 @@ class IdentifierNode : public ASTNode {
9292
class MemberOfNode : public ASTNode {
9393
public:
9494
MemberOfNode(uint32_t location, ASTNodeUP base, bool is_arrow,
95-
std::string name, lldb::DynamicValueType use_dynamic,
96-
bool fragile_ivar, bool use_synth_child,
97-
bool check_ptr_vs_member)
95+
std::string name)
9896
: ASTNode(location, NodeKind::eMemberOfNode), m_base(std::move(base)),
99-
m_is_arrow(is_arrow), m_field_name(std::move(name)),
100-
m_use_dynamic(use_dynamic), m_fragile_ivar(fragile_ivar),
101-
m_use_synth_child(use_synth_child),
102-
m_check_ptr_vs_member(check_ptr_vs_member) {}
97+
m_is_arrow(is_arrow), m_field_name(std::move(name)) {}
10398

10499
llvm::Expected<lldb::ValueObjectSP> Accept(Visitor *v) const override;
105100

106101
ASTNode *GetBase() const { return m_base.get(); }
107102
bool GetIsArrow() const { return m_is_arrow; }
108103
llvm::StringRef GetFieldName() const { return llvm::StringRef(m_field_name); }
109-
bool GetCheckPtrVsMember() const { return m_check_ptr_vs_member; }
110-
bool GetFragileIvar() const { return m_fragile_ivar; }
111-
bool GetSynthChild() const { return m_use_synth_child; }
112-
lldb::DynamicValueType GetUseDynamic() const { return m_use_dynamic; }
113104

114105
static bool classof(const ASTNode *node) {
115106
return node->GetKind() == NodeKind::eMemberOfNode;
@@ -119,10 +110,6 @@ class MemberOfNode : public ASTNode {
119110
ASTNodeUP m_base;
120111
bool m_is_arrow;
121112
std::string m_field_name;
122-
lldb::DynamicValueType m_use_dynamic;
123-
bool m_fragile_ivar;
124-
bool m_use_synth_child;
125-
bool m_check_ptr_vs_member;
126113
};
127114

128115
class UnaryOpNode : public ASTNode {

lldb/include/lldb/ValueObject/DILEval.h

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,9 @@ lldb::ValueObjectSP LookupGlobalIdentifier(llvm::StringRef name_ref,
4141
class Interpreter : Visitor {
4242
public:
4343
Interpreter(lldb::TargetSP target, llvm::StringRef expr,
44-
lldb::DynamicValueType use_dynamic,
45-
std::shared_ptr<StackFrame> frame_sp);
44+
std::shared_ptr<StackFrame> frame_sp,
45+
lldb::DynamicValueType use_dynamic, bool use_synthetic,
46+
bool fragile_ivar, bool check_ptr_vs_member);
4647

4748
llvm::Expected<lldb::ValueObjectSP> Evaluate(const ASTNode *node);
4849

@@ -56,8 +57,11 @@ class Interpreter : Visitor {
5657
lldb::TargetSP m_target;
5758
llvm::StringRef m_expr;
5859
lldb::ValueObjectSP m_scope;
59-
lldb::DynamicValueType m_default_dynamic;
6060
std::shared_ptr<StackFrame> m_exe_ctx_scope;
61+
lldb::DynamicValueType m_use_dynamic;
62+
bool m_use_synthetic;
63+
bool m_fragile_ivar;
64+
bool m_check_ptr_vs_member;
6165
};
6266

6367
} // namespace lldb_private::dil

lldb/source/Target/StackFrame.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -552,8 +552,9 @@ ValueObjectSP StackFrame::DILGetValueForVariableExpressionPath(
552552

553553
// Evaluate the parsed expression.
554554
lldb::TargetSP target = this->CalculateTarget();
555-
dil::Interpreter interpreter(target, var_expr, use_dynamic,
556-
shared_from_this());
555+
dil::Interpreter interpreter(target, var_expr, shared_from_this(),
556+
use_dynamic, !no_synth_child, !no_fragile_ivar,
557+
check_ptr_vs_member);
557558

558559
auto valobj_or_error = interpreter.Evaluate((*tree_or_error).get());
559560
if (!valobj_or_error) {

lldb/source/ValueObject/DILEval.cpp

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -201,10 +201,13 @@ lldb::ValueObjectSP LookupIdentifier(llvm::StringRef name_ref,
201201
}
202202

203203
Interpreter::Interpreter(lldb::TargetSP target, llvm::StringRef expr,
204-
lldb::DynamicValueType use_dynamic,
205-
std::shared_ptr<StackFrame> frame_sp)
206-
: m_target(std::move(target)), m_expr(expr), m_default_dynamic(use_dynamic),
207-
m_exe_ctx_scope(frame_sp) {}
204+
std::shared_ptr<StackFrame> frame_sp,
205+
lldb::DynamicValueType use_dynamic, bool use_synthetic,
206+
bool fragile_ivar, bool check_ptr_vs_member)
207+
: m_target(std::move(target)), m_expr(expr), m_exe_ctx_scope(frame_sp),
208+
m_use_dynamic(use_dynamic), m_use_synthetic(use_synthetic),
209+
m_fragile_ivar(fragile_ivar), m_check_ptr_vs_member(check_ptr_vs_member) {
210+
}
208211

209212
llvm::Expected<lldb::ValueObjectSP> Interpreter::Evaluate(const ASTNode *node) {
210213
// Evaluate an AST.
@@ -216,7 +219,7 @@ llvm::Expected<lldb::ValueObjectSP> Interpreter::Evaluate(const ASTNode *node) {
216219

217220
llvm::Expected<lldb::ValueObjectSP>
218221
Interpreter::Visit(const IdentifierNode *node) {
219-
lldb::DynamicValueType use_dynamic = m_default_dynamic;
222+
lldb::DynamicValueType use_dynamic = m_use_dynamic;
220223

221224
lldb::ValueObjectSP identifier =
222225
LookupIdentifier(node->GetName(), m_exe_ctx_scope, use_dynamic);
@@ -245,7 +248,7 @@ Interpreter::Visit(const UnaryOpNode *node) {
245248

246249
switch (node->kind()) {
247250
case UnaryOpKind::Deref: {
248-
lldb::ValueObjectSP dynamic_rhs = rhs->GetDynamicValue(m_default_dynamic);
251+
lldb::ValueObjectSP dynamic_rhs = rhs->GetDynamicValue(m_use_dynamic);
249252
if (dynamic_rhs)
250253
rhs = dynamic_rhs;
251254

@@ -278,14 +281,10 @@ Interpreter::Visit(const MemberOfNode *node) {
278281
if (!base_or_err)
279282
return base_or_err;
280283
lldb::ValueObjectSP base = *base_or_err;
281-
bool check_ptr_vs_member = node->GetCheckPtrVsMember();
282-
bool fragile_ivar = node->GetFragileIvar();
283-
bool synth_child = node->GetSynthChild();
284-
lldb::DynamicValueType use_dynamic = node->GetUseDynamic();
285284

286285
// Perform some basic type & correctness checking.
287286
if (node->GetIsArrow()) {
288-
if (!fragile_ivar) {
287+
if (!m_fragile_ivar) {
289288
// Make sure we aren't trying to deref an objective
290289
// C ivar if this is not allowed
291290
const uint32_t pointer_type_flags =
@@ -323,7 +322,7 @@ Interpreter::Visit(const MemberOfNode *node) {
323322
}
324323
}
325324

326-
if (check_ptr_vs_member) {
325+
if (m_check_ptr_vs_member) {
327326
bool expr_is_ptr = node->GetIsArrow();
328327
bool base_is_ptr = base->IsPointerType();
329328

@@ -349,13 +348,13 @@ Interpreter::Visit(const MemberOfNode *node) {
349348
lldb::ValueObjectSP field_obj =
350349
base->GetChildMemberWithName(node->GetFieldName());
351350
if (!field_obj) {
352-
if (synth_child) {
351+
if (m_use_synthetic) {
353352
field_obj = base->GetSyntheticValue();
354353
if (field_obj)
355354
field_obj = field_obj->GetChildMemberWithName(node->GetFieldName());
356355
}
357356

358-
if (!synth_child || !field_obj) {
357+
if (!m_use_synthetic || !field_obj) {
359358
std::string errMsg = llvm::formatv(
360359
"no member named '{0}' in {1}", node->GetFieldName(),
361360
base->GetCompilerType().GetFullyUnqualifiedType().TypeDescription());
@@ -365,9 +364,9 @@ Interpreter::Visit(const MemberOfNode *node) {
365364
}
366365

367366
if (field_obj && field_obj->GetName() == node->GetFieldName()) {
368-
if (use_dynamic != lldb::eNoDynamicValues) {
367+
if (m_use_dynamic != lldb::eNoDynamicValues) {
369368
lldb::ValueObjectSP dynamic_val_sp =
370-
field_obj->GetDynamicValue(use_dynamic);
369+
field_obj->GetDynamicValue(m_use_dynamic);
371370
if (dynamic_val_sp)
372371
field_obj = dynamic_val_sp;
373372
}

lldb/source/ValueObject/DILParser.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,7 @@ ASTNodeUP DILParser::ParsePostfixExpression() {
131131
std::string member_id = ParseIdExpression();
132132
lhs = std::make_unique<MemberOfNode>(
133133
member_token.GetLocation(), std::move(lhs),
134-
token.GetKind() == Token::arrow, member_id, UseDynamic(),
135-
m_fragile_ivar, m_use_synthetic, m_check_ptr_vs_member);
134+
token.GetKind() == Token::arrow, member_id);
136135
}
137136
return lhs;
138137
}

0 commit comments

Comments
 (0)