[Lldb-commits] [lldb] r275080 - 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)

Enrico Granata via lldb-commits lldb-commits at lists.llvm.org
Mon Jul 11 10:36:55 PDT 2016


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());




More information about the lldb-commits mailing list