sc/source/core/data/formulacell.cxx | 51 +++++++++++++++++++++--------------- 1 file changed, 31 insertions(+), 20 deletions(-)
New commits: commit c3cea107354fecda6dedcd6b998343a2bd33d6f3 Author: Michael Meeks <michael.me...@collabora.com> Date: Wed May 28 08:56:35 2014 +0100 ODS load perf: avoid re-compiling an already free'd pCode with ScCompiler. Change-Id: Ia6c3c587302869a42376cda1363ee9df0b7a74f5 diff --git a/sc/source/core/data/formulacell.cxx b/sc/source/core/data/formulacell.cxx index 0429a50..7891500 100644 --- a/sc/source/core/data/formulacell.cxx +++ b/sc/source/core/data/formulacell.cxx @@ -1211,6 +1211,17 @@ void ScFormulaCell::CompileXML( sc::CompileFormulaContext& rCxt, ScProgress& rPr ++xGroup->mnLength; SetCellGroup( xGroup ); + // Do setup here based on previous cell. + + nFormatType = pPreviousCell->nFormatType; + bSubTotal = pPreviousCell->bSubTotal; + bChanged = true; + bCompile = false; + StartListeningTo( pDocument ); + + if (bSubTotal) + pDocument->AddSubTotalCell(this); + bSkipCompile = true; pCode = pPreviousCell->pCode; @@ -1226,31 +1237,31 @@ void ScFormulaCell::CompileXML( sc::CompileFormulaContext& rCxt, ScProgress& rPr ScTokenArray* pCodeOld = pCode; pCode = aComp.CompileString( aFormula, aFormulaNmsp ); delete pCodeOld; - } - if( !pCode->GetCodeError() ) - { - if ( !pCode->GetLen() ) - { - if ( aFormula[0] == '=' ) - pCode->AddBad( aFormula.copy( 1 ) ); - else - pCode->AddBad( aFormula ); - } - bSubTotal = aComp.CompileTokenArray(); if( !pCode->GetCodeError() ) { - nFormatType = aComp.GetNumFormatType(); - bChanged = true; - bCompile = false; - StartListeningTo( pDocument ); - } + if ( !pCode->GetLen() ) + { + if ( aFormula[0] == '=' ) + pCode->AddBad( aFormula.copy( 1 ) ); + else + pCode->AddBad( aFormula ); + } + bSubTotal = aComp.CompileTokenArray(); + if( !pCode->GetCodeError() ) + { + nFormatType = aComp.GetNumFormatType(); + bChanged = true; + bCompile = false; + StartListeningTo( pDocument ); + } - if (bSubTotal) - pDocument->AddSubTotalCell(this); + if (bSubTotal) + pDocument->AddSubTotalCell(this); + } + else + bChanged = true; } - else - bChanged = true; // Same as in Load: after loading, it must be known if ocMacro is in any formula // (for macro warning, CompileXML is called at the end of loading XML file) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits