diff -upr old/sc/source/core/tool/interpr1.cxx new/sc/source/core/tool/interpr1.cxx --- old/sc/source/core/tool/interpr1.cxx 2008-07-07 16:26:05.000000000 +0800 +++ new/sc/source/core/tool/interpr1.cxx 2008-07-07 16:34:47.000000000 +0800 @@ -180,28 +180,39 @@ void ScInterpreter::ScIfJump() { // TRUE if( nJumpCount >= 2 ) { // THEN path - aCode.Jump( pJump[ 1 ], pJump[ nJumpCount ] ); + ScJumpMatrix* pJumpMat = new ScJumpMatrix( 1, 1 ); + pJumpMat->SetJump( 0, 0, 1.0, pJump[ 1 ], + pJump[ nJumpCount ]); + ScTokenRef xNew = new ScJumpMatrixToken( pJumpMat ); + GetTokenMatrixMap().insert( ScTokenMatrixMap::value_type( + pCur, xNew)); + PushTempToken( xNew); } else { // no parameter given for THEN nFuncFmtType = NUMBERFORMAT_LOGICAL; PushInt(1); - aCode.Jump( pJump[ nJumpCount ], pJump[ nJumpCount ] ); } } else { // FALSE if( nJumpCount == 3 ) { // ELSE path - aCode.Jump( pJump[ 2 ], pJump[ nJumpCount ] ); + ScJumpMatrix* pJumpMat = new ScJumpMatrix( 1, 1 ); + pJumpMat->SetJump( 0, 0, 0.0, pJump[ 2 ], + pJump[ nJumpCount ]); + ScTokenRef xNew = new ScJumpMatrixToken( pJumpMat ); + GetTokenMatrixMap().insert( ScTokenMatrixMap::value_type( + pCur, xNew)); + PushTempToken( xNew); } else { // no parameter given for ELSE nFuncFmtType = NUMBERFORMAT_LOGICAL; PushInt(0); - aCode.Jump( pJump[ nJumpCount ], pJump[ nJumpCount ] ); } } + aCode.Jump( pJump[ nJumpCount ], pJump[ nJumpCount ] ); } } }