forked from OSchip/llvm-project
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)
llvm-svn: 275080
This commit is contained in:
parent
71021cdf47
commit
02989a4b5d
|
@ -0,0 +1 @@
|
|||
cmdline
|
|
@ -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
|
|
@ -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
|
||||
|
|
@ -3172,8 +3172,12 @@ CommandInterpreter::ResolveCommandImpl(std::string &command_line, CommandReturnO
|
|||
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(std::string &command_line, CommandReturnO
|
|||
}
|
||||
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());
|
||||
|
|
Loading…
Reference in New Issue