From 3ab6669eeb64edfe31959cf65d8b27dda1ed931f Mon Sep 17 00:00:00 2001 From: Enrico Granata Date: Mon, 15 Jun 2015 23:12:29 +0000 Subject: If a candidate keyword contains quotes, it's clearly not a keyword, so bail out early There are other characters we could optimize for (any non-letter pretty much), but keyword.iskeyword() will handle them, whereas quotes do have the potential to confuse us, so they actually need custom handling Fixes rdar://problem/21022787 llvm-svn: 239779 --- lldb/source/Interpreter/ScriptInterpreterPython.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'lldb/source/Interpreter') diff --git a/lldb/source/Interpreter/ScriptInterpreterPython.cpp b/lldb/source/Interpreter/ScriptInterpreterPython.cpp index 188f7285776..8f60793550c 100644 --- a/lldb/source/Interpreter/ScriptInterpreterPython.cpp +++ b/lldb/source/Interpreter/ScriptInterpreterPython.cpp @@ -45,6 +45,8 @@ #include "lldb/Host/windows/ConnectionGenericFileWindows.h" #endif +#include "llvm/ADT/StringRef.h" + using namespace lldb; using namespace lldb_private; @@ -2615,6 +2617,16 @@ ScriptInterpreterPython::LoadScriptingModule(const char *pathname, bool can_relo bool ScriptInterpreterPython::IsReservedWord (const char* word) { + if (!word || !word[0]) + return false; + + llvm::StringRef word_sr(word); + + // filter out a few characters that would just confuse us + // and that are clearly not keyword material anyway + if (word_sr.find_first_of("'\"") != llvm::StringRef::npos) + return false; + StreamString command_stream; command_stream.Printf("keyword.iskeyword('%s')", word); bool result; -- cgit v1.2.3