15cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen//===-- SWIG Interface for SBStream -----------------------------*- C++ -*-===// 25cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen// 35cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen// The LLVM Compiler Infrastructure 45cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen// 55cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen// This file is distributed under the University of Illinois Open Source 65cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen// License. See LICENSE.TXT for details. 75cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen// 85cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen//===----------------------------------------------------------------------===// 95cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen 105cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen#include <stdio.h> 115cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen 125cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chennamespace lldb { 135cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen 141a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen%feature("docstring", 151a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen"Represents a destination for streaming data output to. By default, a string 161a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chenstream is created. 171a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen 181a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny ChenFor example (from test/source-manager/TestSourceManager.py), 191a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen 201a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen # Create the filespec for 'main.c'. 211a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen filespec = lldb.SBFileSpec('main.c', False) 221a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen source_mgr = self.dbg.GetSourceManager() 231a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen # Use a string stream as the destination. 241a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen stream = lldb.SBStream() 251a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen source_mgr.DisplaySourceLinesWithLineNumbers(filespec, 261a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen self.line, 271a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen 2, # context before 281a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen 2, # context after 291a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen '=>', # prefix for current line 301a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen stream) 311a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen 321a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen # 2 331a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen # 3 int main(int argc, char const *argv[]) { 341a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen # => 4 printf('Hello world.\\n'); // Set break point at this line. 351a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen # 5 return 0; 361a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen # 6 } 371a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen self.expect(stream.GetData(), 'Source code displayed correctly', 381a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen exe=False, 391a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen patterns = ['=> %d.*Hello world' % self.line]) 401a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen") SBStream; 415cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chenclass SBStream 425cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen{ 435cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chenpublic: 445cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen 455cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen SBStream (); 465cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen 475cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen ~SBStream (); 485cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen 495cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen bool 505cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen IsValid() const; 515cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen 521a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen %feature("docstring", " 531a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen //-------------------------------------------------------------------------- 541a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen /// If this stream is not redirected to a file, it will maintain a local 551a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen /// cache for the stream data which can be accessed using this accessor. 561a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen //-------------------------------------------------------------------------- 571a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen ") GetData; 585cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen const char * 595cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen GetData (); 605cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen 611a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen %feature("docstring", " 621a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen //-------------------------------------------------------------------------- 631a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen /// If this stream is not redirected to a file, it will maintain a local 641a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen /// cache for the stream output whose length can be accessed using this 651a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen /// accessor. 661a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen //-------------------------------------------------------------------------- 671a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen ") GetSize; 685cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen size_t 695cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen GetSize(); 705cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen 71edc4132cdc042e773b6ba55fbd39ea52e670158dEnrico Granata // wrapping the variadic Printf() with a plain Print() 72edc4132cdc042e773b6ba55fbd39ea52e670158dEnrico Granata // because it is hard to support varargs in SWIG bridgings 73edc4132cdc042e773b6ba55fbd39ea52e670158dEnrico Granata %extend { 74edc4132cdc042e773b6ba55fbd39ea52e670158dEnrico Granata void Print (const char* str) 75edc4132cdc042e773b6ba55fbd39ea52e670158dEnrico Granata { 76f817d45b0db18e72797faec359454eeeba04f076Greg Clayton self->Printf("%s", str); 77edc4132cdc042e773b6ba55fbd39ea52e670158dEnrico Granata } 78edc4132cdc042e773b6ba55fbd39ea52e670158dEnrico Granata } 79edc4132cdc042e773b6ba55fbd39ea52e670158dEnrico Granata 805cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen void 815cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen RedirectToFile (const char *path, bool append); 825cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen 835cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen void 845cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen RedirectToFileHandle (FILE *fh, bool transfer_fh_ownership); 855cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen 865cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen void 875cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen RedirectToFileDescriptor (int fd, bool transfer_fh_ownership); 885cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen 891a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen %feature("docstring", " 901a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen //-------------------------------------------------------------------------- 911a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen /// If the stream is redirected to a file, forget about the file and if 921a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen /// ownership of the file was transfered to this object, close the file. 931a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen /// If the stream is backed by a local cache, clear this cache. 941a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen //-------------------------------------------------------------------------- 951a73d4c5ea7395971a82bc6389b0dde5db60ed2fJohnny Chen ") Clear; 965cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen void 975cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen Clear (); 985cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen}; 995cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen 1005cb6cab6395a896ec5938acc0885858b8e2ba2c8Johnny Chen} // namespace lldb 101