diff options
Diffstat (limited to 'lldb/bindings/interface/SBFile.i')
-rw-r--r-- | lldb/bindings/interface/SBFile.i | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/lldb/bindings/interface/SBFile.i b/lldb/bindings/interface/SBFile.i new file mode 100644 index 0000000000000..a19666995cd31 --- /dev/null +++ b/lldb/bindings/interface/SBFile.i @@ -0,0 +1,101 @@ +//===-- SWIG Interface for SBFile -----------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +namespace lldb { + +%feature("docstring", +"Represents a file." +) SBFile; + +class SBFile +{ +public: + + SBFile(); + + %feature("docstring", " + Initialize a SBFile from a file descriptor. mode is + 'r', 'r+', or 'w', like fdopen."); + SBFile(int fd, const char *mode, bool transfer_ownership); + + %feature("docstring", "initialize a SBFile from a python file object"); + SBFile(FileSP file); + + %extend { + static lldb::SBFile MakeBorrowed(lldb::FileSP BORROWED) { + return lldb::SBFile(BORROWED); + } + static lldb::SBFile MakeForcingIOMethods(lldb::FileSP FORCE_IO_METHODS) { + return lldb::SBFile(FORCE_IO_METHODS); + } + static lldb::SBFile MakeBorrowedForcingIOMethods(lldb::FileSP BORROWED_FORCE_IO_METHODS) { + return lldb::SBFile(BORROWED_FORCE_IO_METHODS); + } + } + +#ifdef SWIGPYTHON + %pythoncode { + @classmethod + def Create(cls, file, borrow=False, force_io_methods=False): + """ + Create a SBFile from a python file object, with options. + + If borrow is set then the underlying file will + not be closed when the SBFile is closed or destroyed. + + If force_scripting_io is set then the python read/write + methods will be called even if a file descriptor is available. + """ + if borrow: + if force_io_methods: + return cls.MakeBorrowedForcingIOMethods(file) + else: + return cls.MakeBorrowed(file) + else: + if force_io_methods: + return cls.MakeForcingIOMethods(file) + else: + return cls(file) + } +#endif + + ~SBFile (); + + %feature("autodoc", "Read(buffer) -> SBError, bytes_read") Read; + SBError Read(uint8_t *buf, size_t num_bytes, size_t *OUTPUT); + + %feature("autodoc", "Write(buffer) -> SBError, written_read") Write; + SBError Write(const uint8_t *buf, size_t num_bytes, size_t *OUTPUT); + + void Flush(); + + bool IsValid() const; + + operator bool() const; + + SBError Close(); + + %feature("docstring", " + Convert this SBFile into a python io.IOBase file object. + + If the SBFile is itself a wrapper around a python file object, + this will return that original object. + + The file returned from here should be considered borrowed, + in the sense that you may read and write to it, and flush it, + etc, but you should not close it. If you want to close the + SBFile, call SBFile.Close(). + + If there is no underlying python file to unwrap, GetFile will + use the file descriptor, if availble to create a new python + file object using `open(fd, mode=..., closefd=False)` + "); + FileSP GetFile(); +}; + +} // namespace lldb |