teemperor created this revision.
teemperor added a reviewer: labath.
Herald added subscribers: lldb-commits, JDevlieghere.
Herald added a project: LLDB.
teemperor added a comment.

If anyone wants to test this pre-commit, that would be appreciated as I fear 
we'll find some Editline implementations that will freak out over this patch. I 
tested this on Arch Linux and macOS.


Our Editline implementation in LLDB supports using the wchar interface of 
Editline which
should improve handling of unicode input when using Editline. At the moment we 
essentially
just ignore it and print the escaped unicode code point to the command line 
(which we then
also incorrectly treat as multiple characters, so console navigation is also 
broken afterwards).

This patch just adds the include to the host config file which already contains 
the LLDB_EDITLINE_USE_WCHAR
define to enable the Editline support (we just never included it in the file 
before).

Also adds a test that the unicode we put into Editline actually ends up being 
interpreted as unicode
and not just ends up being ignored in Editline.


Repository:
  rLLDB LLDB

https://reviews.llvm.org/D71251

Files:
  lldb/include/lldb/Host/Editline.h
  lldb/packages/Python/lldbsuite/test/iohandler/unicode/TestUnicode.py


Index: lldb/packages/Python/lldbsuite/test/iohandler/unicode/TestUnicode.py
===================================================================
--- /dev/null
+++ lldb/packages/Python/lldbsuite/test/iohandler/unicode/TestUnicode.py
@@ -0,0 +1,28 @@
+# -*- coding: utf-8 -*-
+"""
+Test unicode handling in LLDB.
+"""
+
+import os
+
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test.lldbpexpect import PExpectTest
+
+class TestCase(PExpectTest):
+
+    mydir = TestBase.compute_mydir(__file__)
+
+    # PExpect uses many timeouts internally and doesn't play well
+    # under ASAN on a loaded machine..
+    @skipIfAsan
+    def test_unicode_input(self):
+        self.launch()
+
+        # Pass in some unicode that should be read correctly.
+        self.child.send(u'\u1234\n')
+        # We should get out that this is an invalid command with our character 
as UTF-8.
+        self.child.expect(u"error: '\u1234' is not a valid 
command.".encode('utf-8'))
+
+        self.quit()
Index: lldb/include/lldb/Host/Editline.h
===================================================================
--- lldb/include/lldb/Host/Editline.h
+++ lldb/include/lldb/Host/Editline.h
@@ -32,6 +32,8 @@
 #define liblldb_Editline_h_
 #if defined(__cplusplus)
 
+#include "lldb/Host/Config.h"
+
 #if LLDB_EDITLINE_USE_WCHAR
 #include <codecvt>
 #endif


Index: lldb/packages/Python/lldbsuite/test/iohandler/unicode/TestUnicode.py
===================================================================
--- /dev/null
+++ lldb/packages/Python/lldbsuite/test/iohandler/unicode/TestUnicode.py
@@ -0,0 +1,28 @@
+# -*- coding: utf-8 -*-
+"""
+Test unicode handling in LLDB.
+"""
+
+import os
+
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test.lldbpexpect import PExpectTest
+
+class TestCase(PExpectTest):
+
+    mydir = TestBase.compute_mydir(__file__)
+
+    # PExpect uses many timeouts internally and doesn't play well
+    # under ASAN on a loaded machine..
+    @skipIfAsan
+    def test_unicode_input(self):
+        self.launch()
+
+        # Pass in some unicode that should be read correctly.
+        self.child.send(u'\u1234\n')
+        # We should get out that this is an invalid command with our character as UTF-8.
+        self.child.expect(u"error: '\u1234' is not a valid command.".encode('utf-8'))
+
+        self.quit()
Index: lldb/include/lldb/Host/Editline.h
===================================================================
--- lldb/include/lldb/Host/Editline.h
+++ lldb/include/lldb/Host/Editline.h
@@ -32,6 +32,8 @@
 #define liblldb_Editline_h_
 #if defined(__cplusplus)
 
+#include "lldb/Host/Config.h"
+
 #if LLDB_EDITLINE_USE_WCHAR
 #include <codecvt>
 #endif
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to