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