Skip to content

Commit 311dbb1

Browse files
convert SBDebugger::***FileHandle() wrappers to native files.
Summary: This patch converts the swig wrappers for SetInputFileHandle() and friends to emulate the old behavior using SetInputFile(). This will clear the way for deleting the FILE* typemaps altogether. Reviewers: JDevlieghere, jasonmolenda, labath Reviewed By: labath Subscribers: mehdi_amini, dexonsmith, lldb-commits Tags: #lldb Differential Revision: https://reviews.llvm.org/D68856 llvm-svn: 374912
1 parent d9b553e commit 311dbb1

File tree

2 files changed

+75
-27
lines changed

2 files changed

+75
-27
lines changed

lldb/packages/Python/lldbsuite/test/python_api/file_handle/TestFileHandle.py

Lines changed: 42 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -129,8 +129,6 @@ def handleCmd(self, cmd, check=True, collect_result=True):
129129

130130

131131
@add_test_categories(['pyapi'])
132-
@skipIfWindows # FIXME pre-existing bug, should be fixed
133-
# when we delete the FILE* typemaps.
134132
def test_legacy_file_out_script(self):
135133
with open(self.out_filename, 'w') as f:
136134
self.debugger.SetOutputFileHandle(f, False)
@@ -155,8 +153,6 @@ def test_legacy_file_out(self):
155153
self.assertIn('deadbeef', f.read())
156154

157155
@add_test_categories(['pyapi'])
158-
@skipIfWindows # FIXME pre-existing bug, should be fixed
159-
# when we delete the FILE* typemaps.
160156
def test_legacy_file_err_with_get(self):
161157
with open(self.out_filename, 'w') as f:
162158
self.debugger.SetErrorFileHandle(f, False)
@@ -194,11 +190,11 @@ def test_legacy_file_error(self):
194190
@add_test_categories(['pyapi'])
195191
def test_sbfile_type_errors(self):
196192
sbf = lldb.SBFile()
197-
self.assertRaises(TypeError, sbf.Write, None)
198-
self.assertRaises(TypeError, sbf.Read, None)
199-
self.assertRaises(TypeError, sbf.Read, b'this bytes is not mutable')
200-
self.assertRaises(TypeError, sbf.Write, u"ham sandwich")
201-
self.assertRaises(TypeError, sbf.Read, u"ham sandwich")
193+
self.assertRaises(Exception, sbf.Write, None)
194+
self.assertRaises(Exception, sbf.Read, None)
195+
self.assertRaises(Exception, sbf.Read, b'this bytes is not mutable')
196+
self.assertRaises(Exception, sbf.Write, u"ham sandwich")
197+
self.assertRaises(Exception, sbf.Read, u"ham sandwich")
202198

203199

204200
@add_test_categories(['pyapi'])
@@ -859,3 +855,40 @@ def i(sbf):
859855
with open(self.out_filename, 'r') as f:
860856
self.assertEqual(list(range(10)), list(map(int, f.read().strip().split())))
861857

858+
859+
@add_test_categories(['pyapi'])
860+
def test_set_filehandle_none(self):
861+
self.assertRaises(Exception, self.debugger.SetOutputFile, None)
862+
self.assertRaises(Exception, self.debugger.SetOutputFile, "ham sandwich")
863+
self.assertRaises(Exception, self.debugger.SetOutputFileHandle, "ham sandwich")
864+
self.assertRaises(Exception, self.debugger.SetInputFile, None)
865+
self.assertRaises(Exception, self.debugger.SetInputFile, "ham sandwich")
866+
self.assertRaises(Exception, self.debugger.SetInputFileHandle, "ham sandwich")
867+
self.assertRaises(Exception, self.debugger.SetErrorFile, None)
868+
self.assertRaises(Exception, self.debugger.SetErrorFile, "ham sandwich")
869+
self.assertRaises(Exception, self.debugger.SetErrorFileHandle, "ham sandwich")
870+
871+
with open(self.out_filename, 'w') as f:
872+
status = self.debugger.SetOutputFile(f)
873+
self.assertTrue(status.Success())
874+
status = self.debugger.SetErrorFile(f)
875+
self.assertTrue(status.Success())
876+
self.debugger.SetOutputFileHandle(None, False)
877+
self.debugger.SetErrorFileHandle(None, False)
878+
sbf = self.debugger.GetOutputFile()
879+
if sys.version_info.major >= 3:
880+
# python 2 lacks PyFile_FromFd, so GetFile() will
881+
# have to duplicate the file descriptor and make a FILE*
882+
# in order to convert a NativeFile it back to a python
883+
# file.
884+
self.assertEqual(sbf.GetFile().fileno(), 1)
885+
sbf = self.debugger.GetErrorFile()
886+
if sys.version_info.major >= 3:
887+
self.assertEqual(sbf.GetFile().fileno(), 2)
888+
with open(self.out_filename, 'r') as f:
889+
status = self.debugger.SetInputFile(f)
890+
self.assertTrue(status.Success())
891+
self.debugger.SetInputFileHandle(None, False)
892+
sbf = self.debugger.GetInputFile()
893+
if sys.version_info.major >= 3:
894+
self.assertEqual(sbf.GetFile().fileno(), 0)

lldb/scripts/interface/SBDebugger.i

Lines changed: 33 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -165,29 +165,44 @@ public:
165165
void
166166
SkipLLDBInitFiles (bool b);
167167

168-
%feature("autodoc", "DEPRECATED, use SetInputFile");
169-
void
170-
SetInputFileHandle (FILE *f, bool transfer_ownership);
168+
%pythoncode %{
169+
def SetOutputFileHandle(self, file, transfer_ownership):
170+
"DEPRECATED, use SetOutputFile"
171+
if file is None:
172+
import sys
173+
file = sys.stdout
174+
self.SetOutputFile(SBFile.Create(file, borrow=True))
175+
176+
def SetInputFileHandle(self, file, transfer_ownership):
177+
"DEPRECATED, use SetInputFile"
178+
if file is None:
179+
import sys
180+
file = sys.stdin
181+
self.SetInputFile(SBFile.Create(file, borrow=True))
182+
183+
def SetErrorFileHandle(self, file, transfer_ownership):
184+
"DEPRECATED, use SetErrorFile"
185+
if file is None:
186+
import sys
187+
file = sys.stderr
188+
self.SetErrorFile(SBFile.Create(file, borrow=True))
189+
%}
171190

172-
%feature("autodoc", "DEPRECATED, use SetOutputFile");
173-
void
174-
SetOutputFileHandle (FILE *f, bool transfer_ownership);
175191

176-
%feature("autodoc", "DEPRECATED, use SetErrorFile");
177-
void
178-
SetErrorFileHandle (FILE *f, bool transfer_ownership);
192+
%extend {
179193

180-
%feature("autodoc", "DEPRECATED, use GetInputFile");
181-
FILE *
182-
GetInputFileHandle ();
194+
lldb::FileSP GetInputFileHandle() {
195+
return self->GetInputFile().GetFile();
196+
}
183197

184-
%feature("autodoc", "DEPRECATED, use GetOutputFile");
185-
FILE *
186-
GetOutputFileHandle ();
198+
lldb::FileSP GetOutputFileHandle() {
199+
return self->GetOutputFile().GetFile();
200+
}
187201

188-
%feature("autodoc", "DEPRECATED, use GetErrorFile");
189-
FILE *
190-
GetErrorFileHandle ();
202+
lldb::FileSP GetErrorFileHandle() {
203+
return self->GetErrorFile().GetFile();
204+
}
205+
}
191206

192207
SBError
193208
SetInputFile (SBFile file);

0 commit comments

Comments
 (0)