Author: enrico Date: Mon Jul 11 12:36:55 2016 New Revision: 275080 URL: http://llvm.org/viewvc/llvm-project?rev=275080&view=rev Log: Fix an issue where one could not define a Python command with the same name as an existing alias (or rather, one could but the results of invoking the command were far from satisfactory)
Added: lldb/trunk/packages/Python/lldbsuite/test/functionalities/command_script_alias/ lldb/trunk/packages/Python/lldbsuite/test/functionalities/command_script_alias/.categories lldb/trunk/packages/Python/lldbsuite/test/functionalities/command_script_alias/TestCommandScriptAlias.py lldb/trunk/packages/Python/lldbsuite/test/functionalities/command_script_alias/tcsacmd.py Modified: lldb/trunk/source/Interpreter/CommandInterpreter.cpp Added: lldb/trunk/packages/Python/lldbsuite/test/functionalities/command_script_alias/.categories URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/functionalities/command_script_alias/.categories?rev=275080&view=auto ============================================================================== --- lldb/trunk/packages/Python/lldbsuite/test/functionalities/command_script_alias/.categories (added) +++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/command_script_alias/.categories Mon Jul 11 12:36:55 2016 @@ -0,0 +1 @@ +cmdline Added: lldb/trunk/packages/Python/lldbsuite/test/functionalities/command_script_alias/TestCommandScriptAlias.py URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/functionalities/command_script_alias/TestCommandScriptAlias.py?rev=275080&view=auto ============================================================================== --- lldb/trunk/packages/Python/lldbsuite/test/functionalities/command_script_alias/TestCommandScriptAlias.py (added) +++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/command_script_alias/TestCommandScriptAlias.py Mon Jul 11 12:36:55 2016 @@ -0,0 +1,37 @@ +""" +Test lldb Python commands. +""" + +from __future__ import print_function + + +import os, time +import lldb +from lldbsuite.test.lldbtest import * + +class CommandScriptAliasTestCase(TestBase): + + mydir = TestBase.compute_mydir(__file__) + + def test (self): + self.pycmd_tests () + + def pycmd_tests (self): + self.runCmd("command script import tcsacmd.py") + self.runCmd("command script add -f tcsacmd.some_command_here attach") + + # This is the function to remove the custom commands in order to have a + # clean slate for the next test case. + def cleanup(): + self.runCmd('command script delete attach', check=False) + + # Execute the cleanup function during test case tear down. + self.addTearDownHook(cleanup) + + # We don't want to display the stdout if not in TraceOn() mode. + if not self.TraceOn(): + self.HideStdout() + + self.expect('attach a', substrs = ['Victory is mine']); + self.runCmd("command script delete attach") + self.runCmd('attach noprocessexistswiththisname', check=False) # this can't crash but we don't care whether the actual attach works Added: lldb/trunk/packages/Python/lldbsuite/test/functionalities/command_script_alias/tcsacmd.py URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/functionalities/command_script_alias/tcsacmd.py?rev=275080&view=auto ============================================================================== --- lldb/trunk/packages/Python/lldbsuite/test/functionalities/command_script_alias/tcsacmd.py (added) +++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/command_script_alias/tcsacmd.py Mon Jul 11 12:36:55 2016 @@ -0,0 +1,11 @@ +from __future__ import print_function +import lldb, sys + +def some_command_here(debugger, command, result, d): + if command == "a": + print("Victory is mine", file=result) + return True + else: + print("Sadness for all", file=result) + return False + Modified: lldb/trunk/source/Interpreter/CommandInterpreter.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Interpreter/CommandInterpreter.cpp?rev=275080&r1=275079&r2=275080&view=diff ============================================================================== --- lldb/trunk/source/Interpreter/CommandInterpreter.cpp (original) +++ lldb/trunk/source/Interpreter/CommandInterpreter.cpp Mon Jul 11 12:36:55 2016 @@ -3172,8 +3172,12 @@ CommandInterpreter::ResolveCommandImpl(s if (cmd_obj == nullptr) { std::string full_name; - if (GetAliasFullName(next_word.c_str(), full_name)) + bool is_alias = GetAliasFullName(next_word.c_str(), full_name); + cmd_obj = GetCommandObject(next_word.c_str(), &matches); + bool is_real_command = (is_alias == false) || (cmd_obj != nullptr && cmd_obj->IsAlias() == false); + if (!is_real_command) { + matches.Clear(); std::string alias_result; cmd_obj = BuildAliasResult(full_name.c_str(), scratch_command, alias_result, result); revised_command_line.Printf("%s", alias_result.c_str()); @@ -3185,7 +3189,8 @@ CommandInterpreter::ResolveCommandImpl(s } else { - cmd_obj = GetCommandObject(next_word.c_str(), &matches); + if (!cmd_obj) + cmd_obj = GetCommandObject(next_word.c_str(), &matches); if (cmd_obj) { actual_cmd_name_len += strlen(cmd_obj->GetCommandName()); _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits