summaryrefslogtreecommitdiff
path: root/sc/source/core/tool/interpr5.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sc/source/core/tool/interpr5.cxx')
-rw-r--r--sc/source/core/tool/interpr5.cxx33
1 files changed, 23 insertions, 10 deletions
diff --git a/sc/source/core/tool/interpr5.cxx b/sc/source/core/tool/interpr5.cxx
index 66b20f6cced5..e1ff66e2b642 100644
--- a/sc/source/core/tool/interpr5.cxx
+++ b/sc/source/core/tool/interpr5.cxx
@@ -455,25 +455,38 @@ ScMatrixRef ScInterpreter::GetMatrix()
{
ScExternalRefCache::TokenRef pToken;
PopExternalSingleRef(pToken);
- if (!pToken)
+ pMat = GetNewMat( 1, 1, true);
+ if (!pMat)
{
- PopError();
SetError( errIllegalArgument);
break;
}
- if (pToken->GetType() == svDouble)
+ if (!pToken)
{
- pMat = new ScFullMatrix(1, 1, 0.0);
- pMat->PutDouble(pToken->GetDouble(), 0, 0);
+ SetError( errIllegalArgument);
+ pMat->PutError( nGlobalError, 0, 0);
+ nGlobalError = 0;
+ break;
}
- else if (pToken->GetType() == svString)
+ if (nGlobalError)
{
- pMat = new ScFullMatrix(1, 1, 0.0);
- pMat->PutString(pToken->GetString(), 0, 0);
+ pMat->PutError( nGlobalError, 0, 0);
+ nGlobalError = 0;
+ break;
}
- else
+ switch (pToken->GetType())
{
- pMat = new ScFullMatrix(1, 1);
+ case svError:
+ pMat->PutError( pToken->GetError(), 0, 0);
+ break;
+ case svDouble:
+ pMat->PutDouble( pToken->GetDouble(), 0, 0);
+ break;
+ case svString:
+ pMat->PutString( pToken->GetString(), 0, 0);
+ break;
+ default:
+ ; // nothing, empty element matrix
}
}
break;