Commit ec31255c authored by Gongyu Deng's avatar Gongyu Deng Committed by Raphael Isemann
Browse files

[lldb] Update the current execution context at the beginning of tab completions

Summary: Fix a bug that tab completions won't synchronous the current execution context. ( Thanks for Jim's explanation! )

Reviewers: teemperor, labath, jingham

Reviewed By: jingham

Subscribers: jingham, labath

Tags: #lldb

Differential Revision: https://reviews.llvm.org/D75597
parent 1badf7c3
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -1837,6 +1837,8 @@ void CommandInterpreter::HandleCompletionMatches(CompletionRequest &request) {

void CommandInterpreter::HandleCompletion(CompletionRequest &request) {

  UpdateExecutionContext(nullptr);

  // Don't complete comments, and if the line we are completing is just the
  // history repeat character, substitute the appropriate history line.
  llvm::StringRef first_arg = request.GetParsedLine().GetArgumentAtIndex(0);
+5 −0
Original line number Diff line number Diff line
@@ -267,6 +267,9 @@ void CommandObject::Cleanup() {
}

void CommandObject::HandleCompletion(CompletionRequest &request) {

  m_exe_ctx = m_interpreter.GetExecutionContext();

  // Default implementation of WantsCompletion() is !WantsRawCommandString().
  // Subclasses who want raw command string but desire, for example, argument
  // completion should override WantsCompletion() to return true, instead.
@@ -293,6 +296,8 @@ void CommandObject::HandleCompletion(CompletionRequest &request) {
    // If we got here, the last word is not an option or an option argument.
    HandleArgumentCompletion(request, opt_element_vector);
  }

  m_exe_ctx.Clear();
}

bool CommandObject::HelpTextContainsWord(llvm::StringRef search_word,
+4 −3
Original line number Diff line number Diff line
@@ -43,9 +43,10 @@ class CommandLineCompletionTestCase(TestBase):
        (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
                                          '// Break here', self.main_source_spec)
        self.assertEquals(process.GetState(), lldb.eStateStopped)
        # FIXME: This pulls in the debug information to make the completions work,
        # but the completions should also work without.
        self.runCmd("frame variable fooo")
        
        # Since CommandInterpreter has been corrected to update the current execution 
        # context at the beginning of HandleCompletion, we're here explicitly testing  
        # the scenario where "frame var" is completed without any preceding commands.

        self.complete_from_to('frame variable fo',
                              'frame variable fooo')