If a candidate keyword contains quotes, it's clearly not a keyword, so bail out early
authorEnrico Granata <egranata@apple.com>
Mon, 15 Jun 2015 23:12:29 +0000 (23:12 +0000)
committerEnrico Granata <egranata@apple.com>
Mon, 15 Jun 2015 23:12:29 +0000 (23:12 +0000)
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

index 188f728..8f60793 100644 (file)
@@ -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;