[NFC][LLVM][CodeGen] Move LiveDebugVariables.h into llvm/include/llvm/CodeGen (#88374)
[llvm-project.git] / lldb / packages / Python / lldbsuite / support / encoded_file.py
blob4214a9782b120029d216b39c181d83dba1459d84
1 """
2 Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
3 See https://llvm.org/LICENSE.txt for license information.
4 SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 Prepares language bindings for LLDB build process. Run with --help
7 to see a description of the supported command line arguments.
8 """
10 # Python modules:
11 import io
14 def _encoded_write(old_write, encoding):
15 def impl(s):
16 # If we were asked to write a `bytes` decode it as unicode before
17 # attempting to write.
18 if isinstance(s, bytes):
19 s = s.decode(encoding, "replace")
20 # Filter unreadable characters, Python 3 is stricter than python 2 about them.
21 import re
23 s = re.sub(r"[^\x00-\x7f]", r" ", s)
24 return old_write(s)
26 return impl
29 """
30 Create a Text I/O file object that can be written to with either unicode strings
31 or byte strings.
32 """
35 def open(
36 file, encoding, mode="r", buffering=-1, errors=None, newline=None, closefd=True
38 wrapped_file = io.open(
39 file,
40 mode=mode,
41 buffering=buffering,
42 encoding=encoding,
43 errors=errors,
44 newline=newline,
45 closefd=closefd,
47 new_write = _encoded_write(getattr(wrapped_file, "write"), encoding)
48 setattr(wrapped_file, "write", new_write)
49 return wrapped_file