summaryrefslogtreecommitdiff
path: root/basic/source/comp/sbcomp.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'basic/source/comp/sbcomp.cxx')
-rw-r--r--basic/source/comp/sbcomp.cxx376
1 files changed, 0 insertions, 376 deletions
diff --git a/basic/source/comp/sbcomp.cxx b/basic/source/comp/sbcomp.cxx
index e7bf0393d296..03c9a50c18da 100644
--- a/basic/source/comp/sbcomp.cxx
+++ b/basic/source/comp/sbcomp.cxx
@@ -32,374 +32,6 @@
#include <basic/sbx.hxx>
#include "sbcomp.hxx"
#include "image.hxx"
-#include "sbtrace.hxx"
-
-
-//==========================================================================
-// Tracing, for debugging only
-
-// To activate tracing enable in sbtrace.hxx
-#ifdef DBG_TRACE_BASIC
-
-#include <hash_map>
-
-// Trace Settings
-static const char* GpTraceFileName = "d:\\zBasic.Asm\\BasicTrace.txt";
-static const bool GbIncludePCodes = false;
-static const int GnIndentPerCallLevel = 4;
-static const int GnIndentForPCode = 2;
-
-struct TraceTextData
-{
- rtl::OString m_aTraceStr_STMNT;
- rtl::OString m_aTraceStr_PCode;
-};
-typedef std::hash_map< sal_Int32, TraceTextData > PCToTextDataMap;
-typedef std::hash_map< ::rtl::OUString, PCToTextDataMap*, ::rtl::OUStringHash, ::std::equal_to< ::rtl::OUString > > ModuleTraceMap;
-
-ModuleTraceMap GaModuleTraceMap;
-ModuleTraceMap& rModuleTraceMap = GaModuleTraceMap;
-
-static void lcl_PrepareTraceForModule( SbModule* pModule )
-{
- String aModuleName = pModule->GetName();
- ModuleTraceMap::iterator it = rModuleTraceMap.find( aModuleName );
- if( it != rModuleTraceMap.end() )
- {
- PCToTextDataMap* pInnerMap = it->second;
- delete pInnerMap;
- rModuleTraceMap.erase( it );
- }
-
- String aDisassemblyStr;
- pModule->Disassemble( aDisassemblyStr );
-}
-
-static void lcl_lineOut( const char* pFileName, const char* pStr, const char* pPreStr = NULL )
-{
- const char* pPrintFirst = (pPreStr != NULL) ? pPreStr : "";
- FILE* pFile = fopen( pFileName, "a+" );
- if( pFile != NULL )
- {
- fprintf( pFile, "%s%s\n", pPrintFirst, pStr );
- fclose( pFile );
- }
-}
-
-const char* lcl_getSpaces( int nSpaceCount )
-{
- static sal_Char Spaces[] = " "
- " "
- " ";
- static int nAvailableSpaceCount = strlen( Spaces );
- static sal_Char* pSpacesEnd = Spaces + nAvailableSpaceCount;
-
- if( nSpaceCount > nAvailableSpaceCount )
- nSpaceCount = nAvailableSpaceCount;
-
- return pSpacesEnd - nSpaceCount;
-}
-
-static rtl::OString lcl_toOStringSkipLeadingWhites( const String& aStr )
-{
- static sal_Char Buffer[1000];
-
- rtl::OString aOStr = OUStringToOString( rtl::OUString( aStr ), RTL_TEXTENCODING_ASCII_US );
- const sal_Char* pStr = aOStr.getStr();
-
- // Skip whitespace
- sal_Char c = *pStr;
- while( c == ' ' || c == '\t' )
- {
- pStr++;
- c = *pStr;
- }
-
- int nLen = strlen( pStr );
- strncpy( Buffer, pStr, nLen );
- Buffer[nLen] = 0;
-
- rtl::OString aORetStr( Buffer );
- return aORetStr;
-}
-
-String dumpMethodParameters( SbMethod* pMethod )
-{
- String aStr;
- if( pMethod == NULL )
- return aStr;
-
- SbxError eOld = SbxBase::GetError();
-
- SbxArray* pParams = pMethod->GetParameters();
- SbxInfo* pInfo = pMethod->GetInfo();
- if ( pParams )
- {
- aStr += '(';
- // 0 is sub itself
- for ( USHORT nParam = 1; nParam < pParams->Count(); nParam++ )
- {
- SbxVariable* pVar = pParams->Get( nParam );
- DBG_ASSERT( pVar, "Parameter?!" );
- if ( pVar->GetName().Len() )
- aStr += pVar->GetName();
- else if ( pInfo )
- {
- const SbxParamInfo* pParam = pInfo->GetParam( nParam );
- if ( pParam )
- aStr += pParam->aName;
- }
- aStr += '=';
- if( pVar->GetType() & SbxARRAY )
- aStr += String( RTL_CONSTASCII_USTRINGPARAM( "..." ) );
- else
- aStr += pVar->GetString();
- if ( nParam < ( pParams->Count() - 1 ) )
- aStr += String( RTL_CONSTASCII_USTRINGPARAM( ", " ) );
- }
- aStr += ')';
- }
-
- SbxBase::ResetError();
- if( eOld != SbxERR_OK )
- SbxBase::SetError( eOld );
-
- return aStr;
-}
-
-// Public functions
-void dbg_InitTrace( void )
-{
- FILE* pFile = fopen( GpTraceFileName, "w" );
- if( pFile != NULL )
- fclose( pFile );
-}
-
-void dbg_traceStep( SbModule* pModule, UINT32 nPC, INT32 nCallLvl )
-{
- SbModule* pTraceMod = pModule;
- if( pTraceMod->ISA(SbClassModuleObject) )
- {
- SbClassModuleObject* pClassModuleObj = (SbClassModuleObject*)(SbxBase*)pTraceMod;
- pTraceMod = pClassModuleObj->getClassModule();
- }
-
- String aModuleName = pTraceMod->GetName();
- ModuleTraceMap::iterator it = rModuleTraceMap.find( aModuleName );
- if( it == rModuleTraceMap.end() )
- {
- const char* pModuleNameStr = OUStringToOString( rtl::OUString( aModuleName ), RTL_TEXTENCODING_ASCII_US ).getStr();
- char Buffer[200];
- sprintf( Buffer, "TRACE ERROR: Unknown module \"%s\"", pModuleNameStr );
- lcl_lineOut( GpTraceFileName, Buffer );
- return;
- }
-
- PCToTextDataMap* pInnerMap = it->second;
- if( pInnerMap == NULL )
- {
- lcl_lineOut( GpTraceFileName, "TRACE INTERNAL ERROR: No inner map" );
- return;
- }
-
- PCToTextDataMap::iterator itInner = pInnerMap->find( nPC );
- if( itInner == pInnerMap->end() )
- {
- const char* pModuleNameStr = OUStringToOString( rtl::OUString( aModuleName ), RTL_TEXTENCODING_ASCII_US ).getStr();
- char Buffer[200];
- sprintf( Buffer, "TRACE ERROR: No info for PC = %d in module \"%s\"", nPC, pModuleNameStr );
- lcl_lineOut( GpTraceFileName, Buffer );
- return;
- }
-
- //nCallLvl--;
- //if( nCallLvl < 0 )
- // nCallLvl = 0;
- int nIndent = nCallLvl * GnIndentPerCallLevel;
-
- const TraceTextData& rTraceTextData = itInner->second;
- const rtl::OString& rStr_STMNT = rTraceTextData.m_aTraceStr_STMNT;
- if( rStr_STMNT.getLength() )
- lcl_lineOut( GpTraceFileName, rStr_STMNT.getStr(), lcl_getSpaces( nIndent ) );
-
- if( !GbIncludePCodes )
- return;
-
- nIndent += GnIndentForPCode;
- const rtl::OString& rStr_PCode = rTraceTextData.m_aTraceStr_PCode;
- if( rStr_PCode.getLength() )
- lcl_lineOut( GpTraceFileName, rStr_PCode.getStr(), lcl_getSpaces( nIndent ) );
-}
-
-void dbg_traceNotifyCall( SbModule* pModule, SbMethod* pMethod, INT32 nCallLvl, bool bLeave )
-{
- static const char* pSeparator = "' ================================================================================";
-
- SbModule* pTraceMod = pModule;
- SbClassModuleObject* pClassModuleObj = NULL;
- if( pTraceMod->ISA(SbClassModuleObject) )
- {
- pClassModuleObj = (SbClassModuleObject*)(SbxBase*)pTraceMod;
- pTraceMod = pClassModuleObj->getClassModule();
- }
-
- if( nCallLvl > 0 )
- nCallLvl--;
- int nIndent = nCallLvl * GnIndentPerCallLevel;
- if( !bLeave )
- {
- lcl_lineOut( GpTraceFileName, "" );
- lcl_lineOut( GpTraceFileName, pSeparator, lcl_getSpaces( nIndent ) );
- }
-
- String aStr;
- if( bLeave )
- {
- lcl_lineOut( GpTraceFileName, "}", lcl_getSpaces( nIndent ) );
- aStr.AppendAscii( "' Leaving " );
- }
- else
- {
- aStr.AppendAscii( "Entering " );
- }
- String aModuleName = pTraceMod->GetName();
- aStr += aModuleName;
- if( pMethod != NULL )
- {
- aStr.AppendAscii( "::" );
- String aMethodName = pMethod->GetName();
- aStr += aMethodName;
- }
- else
- {
- aStr.AppendAscii( "/RunInit" );
- }
-
- if( pClassModuleObj != NULL )
- {
- aStr.AppendAscii( "[this=" );
- aStr += pClassModuleObj->GetName();
- aStr.AppendAscii( "]" );
- }
- if( !bLeave )
- aStr += dumpMethodParameters( pMethod );
-
- lcl_lineOut( GpTraceFileName, OUStringToOString( rtl::OUString( aStr ), RTL_TEXTENCODING_ASCII_US ).getStr(), lcl_getSpaces( nIndent ) );
- if( !bLeave )
- lcl_lineOut( GpTraceFileName, "{", lcl_getSpaces( nIndent ) );
-
- if( bLeave )
- lcl_lineOut( GpTraceFileName, "" );
-}
-
-void dbg_traceNotifyError( SbError nTraceErr, const String& aTraceErrMsg, bool bTraceErrHandled, INT32 nCallLvl )
-{
- rtl::OString aOTraceErrMsg = OUStringToOString( rtl::OUString( aTraceErrMsg ), RTL_TEXTENCODING_ASCII_US );
-
- char Buffer[200];
- const char* pHandledStr = bTraceErrHandled ? " / HANDLED" : "";
- sprintf( Buffer, "*** ERROR%s, Id = %d, Msg = \"%s\" ***", pHandledStr, (int)nTraceErr, aOTraceErrMsg.getStr() );
- int nIndent = nCallLvl * GnIndentPerCallLevel;
- lcl_lineOut( GpTraceFileName, Buffer, lcl_getSpaces( nIndent ) );
-}
-
-void dbg_RegisterTraceTextForPC( SbModule* pModule, UINT32 nPC,
- const String& aTraceStr_STMNT, const String& aTraceStr_PCode )
-{
- String aModuleName = pModule->GetName();
- ModuleTraceMap::iterator it = rModuleTraceMap.find( aModuleName );
- PCToTextDataMap* pInnerMap;
- if( it == rModuleTraceMap.end() )
- {
- pInnerMap = new PCToTextDataMap();
- rModuleTraceMap[ aModuleName ] = pInnerMap;
- }
- else
- {
- pInnerMap = it->second;
- }
-
- TraceTextData aData;
-
- rtl::OString aOTraceStr_STMNT = lcl_toOStringSkipLeadingWhites( aTraceStr_STMNT );
- aData.m_aTraceStr_STMNT = aOTraceStr_STMNT;
-
- rtl::OString aOTraceStr_PCode = lcl_toOStringSkipLeadingWhites( aTraceStr_PCode );
- aData.m_aTraceStr_PCode = aOTraceStr_PCode;
-
- (*pInnerMap)[nPC] = aData;
-}
-
-#endif
-
-
-//==========================================================================
-// For debugging only
-//#define DBG_SAVE_DISASSEMBLY
-
-#ifdef DBG_SAVE_DISASSEMBLY
-static bool dbg_bDisassemble = true;
-#include <comphelper/processfactory.hxx>
-
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include <com/sun/star/ucb/XSimpleFileAccess3.hpp>
-#include <com/sun/star/io/XTextOutputStream.hpp>
-#include <com/sun/star/io/XActiveDataSource.hpp>
-
-using namespace comphelper;
-using namespace rtl;
-using namespace com::sun::star::uno;
-using namespace com::sun::star::lang;
-using namespace com::sun::star::ucb;
-using namespace com::sun::star::io;
-
-void dbg_SaveDisassembly( SbModule* pModule )
-{
- bool bDisassemble = dbg_bDisassemble;
- if( bDisassemble )
- {
- Reference< XSimpleFileAccess3 > xSFI;
- Reference< XTextOutputStream > xTextOut;
- Reference< XOutputStream > xOut;
- Reference< XMultiServiceFactory > xSMgr = getProcessServiceFactory();
- if( xSMgr.is() )
- {
- Reference< XSimpleFileAccess3 > xSFI = Reference< XSimpleFileAccess3 >( xSMgr->createInstance
- ( OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.ucb.SimpleFileAccess" )) ), UNO_QUERY );
- if( xSFI.is() )
- {
- String aFile( RTL_CONSTASCII_USTRINGPARAM("file:///d:/zBasic.Asm/Asm_") );
- StarBASIC* pBasic = (StarBASIC*)pModule->GetParent();
- if( pBasic )
- {
- aFile += pBasic->GetName();
- aFile.AppendAscii( "_" );
- }
- aFile += pModule->GetName();
- aFile.AppendAscii( ".txt" );
-
- // String aFile( RTL_CONSTASCII_USTRINGPARAM("file:///d:/BasicAsm.txt") );
- if( xSFI->exists( aFile ) )
- xSFI->kill( aFile );
- xOut = xSFI->openFileWrite( aFile );
- Reference< XInterface > x = xSMgr->createInstance( OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.io.TextOutputStream" )) );
- Reference< XActiveDataSource > xADS( x, UNO_QUERY );
- xADS->setOutputStream( xOut );
- xTextOut = Reference< XTextOutputStream >( x, UNO_QUERY );
- }
- }
-
- if( xTextOut.is() )
- {
- String aDisassemblyStr;
- pModule->Disassemble( aDisassemblyStr );
- xTextOut->writeString( aDisassemblyStr );
- }
- xOut->closeOutput();
- }
-}
-#endif
-
// Diese Routine ist hier definiert, damit der Compiler als eigenes Segment
// geladen werden kann.
@@ -453,14 +85,6 @@ BOOL SbModule::Compile()
}
}
-#ifdef DBG_SAVE_DISASSEMBLY
- dbg_SaveDisassembly( this );
-#endif
-
-#ifdef DBG_TRACE_BASIC
- lcl_PrepareTraceForModule( this );
-#endif
-
return bRet;
}