summaryrefslogtreecommitdiff
path: root/patches/vba/basic-speedup-fix.diff
diff options
context:
space:
mode:
Diffstat (limited to 'patches/vba/basic-speedup-fix.diff')
-rw-r--r--patches/vba/basic-speedup-fix.diff260
1 files changed, 0 insertions, 260 deletions
diff --git a/patches/vba/basic-speedup-fix.diff b/patches/vba/basic-speedup-fix.diff
deleted file mode 100644
index e6734fc14..000000000
--- a/patches/vba/basic-speedup-fix.diff
+++ /dev/null
@@ -1,260 +0,0 @@
-diff -rup basic/source/classes/sbxmod.cxx basic/source/classes/sbxmod.cxx
---- basic/source/classes/sbxmod.cxx 2007-01-02 17:08:45.000000000 +0000
-+++ basic/source/classes/sbxmod.cxx 2007-01-02 13:01:06.000000000 +0000
-@@ -769,7 +769,10 @@ USHORT SbModule::Run( SbMethod* pMeth )
- pRt->pNext->block();
- pINST->pRun = pRt;
- if ( SbiRuntime ::isVBAEnabled() )
-+ {
- pINST->EnableCompatibility( TRUE );
-+ pRt->SetVBAEnabled( true );
-+ }
- while( pRt->Step() ) {}
- if( pRt->pNext )
- pRt->pNext->unblock();
-diff -rup basic/source/inc/runtime.hxx basic/source/inc/runtime.hxx
---- basic/source/inc/runtime.hxx 2007-01-02 17:08:45.000000000 +0000
-+++ basic/source/inc/runtime.hxx 2007-01-02 16:29:59.000000000 +0000
-@@ -61,6 +61,7 @@
- #endif
-
- #include <vector>
-+#include <hash_map>
- #ifndef _COM_SUN_STAR_LANG_XCOMPONENT_HPP_
- #include <com/sun/star/lang/XComponent.hpp>
- #endif
-@@ -77,6 +78,8 @@ using namespace com::sun::star::lang;
- using namespace com::sun::star::container;
-
-
-+typedef std::hash_map< UINT32, UINT32 > LocalOpIndexHash;
-+
- // Define activates old file implementation
- // (only in non UCB case)
- // #define _OLD_FILE_IMPL
-@@ -352,6 +355,7 @@ class SbiRuntime
- String aLibName; // Lib-Name fuer Declare-Call
- SbxArrayRef refParams; // aktuelle Prozedur-Parameter
- SbxArrayRef refLocals; // lokale Variable
-+ LocalOpIndexHash localIndex;
- SbxArrayRef refArgv; // aktueller Argv
- // AB, 28.3.2000 #74254, Ein refSaveObj reicht nicht! Neu: pRefSaveList (s.u.)
- //SbxVariableRef refSaveObj; // #56368 Bei StepElem Referenz sichern
-@@ -360,6 +364,7 @@ class SbiRuntime
- BOOL bError; // TRUE: Fehler behandeln
- BOOL bInError; // TRUE: in einem Fehler-Handler
- BOOL bBlocked; // TRUE: blocked by next call level, #i48868
-+ BOOL bVBAEnabled;
- USHORT nFlags; // Debugging-Flags
- SbError nError; // letzter Fehler
- USHORT nOps; // Opcode-Zaehler
-@@ -474,6 +479,7 @@ class SbiRuntime
- void StepDCREATE_REDIMP(UINT32,UINT32), StepDCREATE_IMPL(UINT32,UINT32);
- void StepFIND_CM( UINT32, UINT32 );
- public:
-+ void SetVBAEnabled( bool bEnabled ) { bVBAEnabled = bEnabled; };
- USHORT GetImageFlag( USHORT n ) const;
- USHORT GetBase();
- xub_StrLen nLine,nCol1,nCol2; // aktuelle Zeile, Spaltenbereich
-diff -rup basic/source/runtime/runtime.cxx basic/source/runtime/runtime.cxx
---- basic/source/runtime/runtime.cxx 2007-01-02 17:08:45.000000000 +0000
-+++ basic/source/runtime/runtime.cxx 2007-01-02 13:01:06.000000000 +0000
-@@ -542,6 +542,7 @@ SbiRuntime::SbiRuntime( SbModule* pm, Sb
- #endif
- pRefSaveList = NULL;
- pItemStoreList = NULL;
-+ bVBAEnabled = isVBAEnabled();
- }
-
- SbiRuntime::~SbiRuntime()
-@@ -810,7 +811,7 @@ void SbiRuntime::Error( SbError n )
- if( n )
- {
- nError = n;
-- if ( isVBAEnabled() )
-+ if ( bVBAEnabled )
- {
- String aMsg = pInst->GetErrorMsg();
- // If a message is defined use that ( in preference to
-diff -rup basic/source/runtime/step0.cxx basic/source/runtime/step0.cxx
---- basic/source/runtime/step0.cxx 2007-01-02 17:08:45.000000000 +0000
-+++ basic/source/runtime/step0.cxx 2007-01-02 13:01:06.000000000 +0000
-@@ -72,7 +72,6 @@ void SbiRuntime::StepArith( SbxOperator
- TOSMakeTemp();
- SbxVariable* p2 = GetTOS();
-
-- bool bVBAInterop = SbiRuntime::isVBAEnabled();
-
- // This could & should be moved to the MakeTempTOS() method in runtime.cxx
- // In the code which this is cut'npaste from there is a check for a ref
-@@ -82,7 +81,7 @@ void SbiRuntime::StepArith( SbxOperator
- // here we alway seem to have a refcount of 1. Also it seems that
- // MakeTempTOS is called for other operation, so I hold off for now
- // until I have a better idea
-- if ( bVBAInterop
-+ if ( bVBAEnabled
- && ( p2->GetType() == SbxOBJECT || p2->GetType() == SbxVARIANT )
- )
- {
-@@ -252,14 +251,13 @@ void SbiRuntime::StepPUT()
- n = refVar->GetFlags();
- refVar->SetFlag( SBX_WRITE );
- }
-- bool bVBAInterop = SbiRuntime::isVBAEnabled();
-
- // if left side arg is an object or variant and right handside isn't
- // either an object or a variant then try and see if a default
- // property exists.
- // to use e.g. Range{"A1") = 34
- // could equate to Range("A1").Value = 34
-- if ( bVBAInterop )
-+ if ( bVBAEnabled )
- {
- if ( refVar->GetType() == SbxOBJECT )
- {
-@@ -277,7 +275,7 @@ void SbiRuntime::StepPUT()
-
- *refVar = *refVal;
- // lhs is a property who's value is currently null
-- if ( !bVBAInterop || ( bVBAInterop && refVar->GetType() != SbxEMPTY ) )
-+ if ( !bVBAEnabled || ( bVBAEnabled && refVar->GetType() != SbxEMPTY ) )
- // #67607 Uno-Structs kopieren
- checkUnoStructCopy( refVal, refVar );
- if( bFlagsChanged )
-@@ -410,7 +408,7 @@ void SbiRuntime::StepSET()
- {
- SbxVariableRef refVal = PopVar();
- SbxVariableRef refVar = PopVar();
-- StepSET_Impl( refVal, refVar, SbiRuntime::isVBAEnabled() ); // this is really assigment
-+ StepSET_Impl( refVal, refVar, bVBAEnabled ); // this is really assigment
- }
-
- void SbiRuntime::StepVBASET()
-diff -rup basic/source/runtime/step1.cxx basic/source/runtime/step1.cxx
---- basic/source/runtime/step1.cxx 2007-01-02 17:08:45.000000000 +0000
-+++ basic/source/runtime/step1.cxx 2007-01-02 13:01:06.000000000 +0000
-@@ -486,7 +486,7 @@ bool SbiRuntime::checkClass_Impl( const
- Error( SbERR_INVALID_USAGE_OBJECT );
- bOk = false;
- #else
-- if ( SbiRuntime::isVBAEnabled() && pObj->IsA( TYPE(SbUnoObject) ) )
-+ if ( bVBAEnabled && pObj->IsA( TYPE(SbUnoObject) ) )
- {
- SbUnoObject* pUnoObj = PTR_CAST(SbUnoObject,pObj);
- bOk = checkUnoObjectType( pUnoObj, aClass );
-@@ -508,7 +508,7 @@ bool SbiRuntime::checkClass_Impl( const
- }
- else
- {
-- if ( !SbiRuntime::isVBAEnabled() )
-+ if ( !bVBAEnabled )
- {
- if( bRaiseErrors )
- Error( SbERR_NEEDS_OBJECT );
---- basic.bak/source/runtime/step2.cxx 2007-01-05 14:19:27.000000000 +0000
-+++ basic/source/runtime/step2.cxx 2007-01-05 15:46:45.000000000 +0000
-@@ -111,8 +111,6 @@ SbxVariable* SbiRuntime::FindElement
- ( SbxObject* pObj, UINT32 nOp1, UINT32 nOp2, SbError nNotFound, BOOL bLocal )
- {
-
-- bool bIsVBAInterOp = SbiRuntime::isVBAEnabled();
--
- SbxVariable* pElem = NULL;
- if( !pObj )
- {
-@@ -123,29 +121,41 @@ SbxVariable* SbiRuntime::FindElement
- {
- BOOL bFatalError = FALSE;
- SbxDataType t = (SbxDataType) nOp2;
-- String aName( pImg->GetString( static_cast<short>( nOp1 & 0x7FFF ) ) );
--#ifdef ENABLE_VBA
-- bool bIsVBAInterOp = SbiRuntime::isVBAEnabled();
-- // Hacky capture of Evaluate [] syntax
-- // this should be tackled I feel at the pcode level
-- if ( bIsVBAInterOp && aName.Search('[') == 0 )
-- {
-- // emulate pcode here
-- StepARGC();
-- // psuedo StepLOADSC
-- String sArg = aName.Copy( 1, aName.Len() - 2 );
-- SbxVariable* p = new SbxVariable;
-- p->PutString( sArg );
-- PushVar( p );
-- //
-- StepARGV();
-- nOp1 = nOp1 | 0x8000; // indicate params are present
-- aName = String::CreateFromAscii("Evaluate");
-- }
--#endif //ENABLE_VBA
-+
-+ UINT32 nOp1Index = ( nOp1 & 0x7FFF );
-
- if( bLocal )
-- pElem = refLocals->Find( aName, SbxCLASS_DONTCARE );
-+ {
-+ LocalOpIndexHash::iterator it = localIndex.find( nOp1Index );
-+ if ( it != localIndex.end() )
-+ pElem = refLocals->Get( static_cast<USHORT>( it->second ) );
-+ }
-+
-+ String aName;
-+ if ( !pElem )
-+ {
-+ aName = pImg->GetString( static_cast<USHORT>( nOp1Index ) );
-+ // Hacky capture of Evaluate [] syntax
-+ // this should be tackled I feel at the pcode level
-+ if ( bVBAEnabled && aName.Search('[') == 0 )
-+ {
-+ // emulate pcode here
-+ StepARGC();
-+ // psuedo StepLOADSC
-+ String sArg = aName.Copy( 1, aName.Len() - 2 );
-+ SbxVariable* p = new SbxVariable;
-+ p->PutString( sArg );
-+ PushVar( p );
-+ //
-+ StepARGV();
-+ nOp1 = nOp1 | 0x8000; // indicate params are present
-+ aName = String::CreateFromAscii("Evaluate");
-+ }
-+ if ( bLocal )
-+ pElem = refLocals->Find( aName, SbxCLASS_DONTCARE );
-+ }
-+
-+
- if( !pElem )
- {
- // Die RTL brauchen wir nicht mehr zu durchsuchen!
-@@ -174,7 +184,7 @@ SbxVariable* SbiRuntime::FindElement
-
- // i#i68894# if VBAInterOp favour searching vba globals
- // over searching for uno classess
-- if ( bIsVBAInterOp )
-+ if ( bVBAEnabled )
- {
- // Try Find in VBA symbols space
- pElem = VBAFind( aName, SbxCLASS_DONTCARE, &rBasic );
-@@ -212,6 +222,7 @@ SbxVariable* SbiRuntime::FindElement
- if ( bSetName )
- pElem->SetName( aName );
- refLocals->Put( pElem, refLocals->Count() );
-+ localIndex[ nOp1Index ] = ( refLocals->Count() - 1 );
- }
- }
-
-@@ -254,6 +265,7 @@ SbxVariable* SbiRuntime::FindElement
- pElem->SetFlag( SBX_FIXED );
- pElem->SetName( aName );
- refLocals->Put( pElem, refLocals->Count() );
-+ localIndex[ nOp1Index ] = ( refLocals->Count() - 1 );
- }
- }
- }
-@@ -1111,6 +1123,7 @@ void SbiRuntime::StepLOCAL( UINT32 nOp1,
- SbxVariable* p = new SbxVariable( t );
- p->SetName( aName );
- refLocals->Put( p, refLocals->Count() );
-+ localIndex[ nOp1 ] = ( refLocals->Count() - 1 );
- }
- }
-