jingham added a comment.

This seems fine in general, with one quibble:

IIUC, the "indirect" removal of persistent results which you are trying to 
avoid happens here:

  lldb::ExpressionResults
  UserExpression::Execute(DiagnosticManager &diagnostic_manager,
                          ExecutionContext &exe_ctx,
                          const EvaluateExpressionOptions &options,
                          lldb::UserExpressionSP &shared_ptr_to_me,
                          lldb::ExpressionVariableSP &result_var) {
    lldb::ExpressionResults expr_result = DoExecute(
        diagnostic_manager, exe_ctx, options, shared_ptr_to_me, result_var);
    Target *target = exe_ctx.GetTargetPtr();
    if (options.GetSuppressPersistentResult() && result_var && target) {
      if (auto *persistent_state =
              target->GetPersistentExpressionStateForLanguage(m_language))
        persistent_state->RemovePersistentVariable(result_var);
    }
    return expr_result;
  }

So to succeed in preserving the persistent result, your patch relies on 
SuppressPersistentResult being false in the EvaluateExpressionOptions you pass 
to the expression.  However, you derive the expression options from the command 
options, for instance in:

  const EvaluateExpressionOptions eval_options =
      m_command_options.GetEvaluateExpressionOptions(target, m_varobj_options);

so you don't actually know what the value of the SuppressPersistentResults is 
going to be.  Since you rely on this having a particular value regardless of 
the user's intentions, you should do SetSuppressPersistentResults explicitly 
(with an appropriate comment) after you've fetch the eval_options in the 
`dwim-print` and `expr` commands.

A much smaller quibble is that it seems a little weird to ask the expression 
options or the frame which language in the 
PersistentExpressionResultsForLanguage map the result variable was stuffed into 
when you have the Result ValueObject on hand.  That seems like something the 
ValueObject should tell you.  When we Persist ValueObjects we use 
ValueObject::GetPreferredDisplayLanguage.  That seems more trustworthy - if it 
isn't we should make it so...


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D150619/new/

https://reviews.llvm.org/D150619

_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to