Skip to content

Commit

Permalink
[lldb][NFC] Delete the original UserExpression before trying to repar…
Browse files Browse the repository at this point in the history
…se it with FixIts.

Currently when an expression fails to parse and we have a FixIt, we keep
the failed UserExpression around while trying to parse the expression with
applied fixits. This means that we have this rather confusing control flow:

1. Original expression created and parsing attempted.
2. Expression with applied FixIts is created and parsing attempted.
3. Original expression is destroyed and parser deconstructed.
4. Expression with applied FixIts is destroyed and parser deconstructed.

This patch just deletes the original expression so that step 2 and 3 are
swapped and the whole process looks more like just sequentially parsing two
expressions (which is what we actually do here).

Doesn't fix anything just makes the code less fragile.
  • Loading branch information
Teemperor committed Mar 19, 2020
1 parent 5ade17e commit 50f1985
Showing 1 changed file with 4 additions and 0 deletions.
4 changes: 4 additions & 0 deletions lldb/source/Expression/UserExpression.cpp
Expand Up @@ -259,6 +259,10 @@ UserExpression::Evaluate(ExecutionContext &exe_ctx,

// If there is a fixed expression, try to parse it:
if (!parse_success) {
// Delete the expression that failed to parse before attempting to parse
// the next expression.
user_expression_sp.reset();

execution_results = lldb::eExpressionParseError;
if (fixed_expression && !fixed_expression->empty() &&
options.GetAutoApplyFixIts()) {
Expand Down

0 comments on commit 50f1985

Please sign in to comment.