summaryrefslogtreecommitdiff
path: root/formula
diff options
context:
space:
mode:
authorBalazs Varga <balazs.varga.extern@allotropia.de>2024-05-02 11:03:37 +0200
committerBalazs Varga <balazs.varga.extern@allotropia.de>2024-05-08 17:45:36 +0200
commitd68f2394afc3372d867ea6157123e51b278ba81b (patch)
tree25880cdf3ea8e19548ab3687f00a9827e47b8bd2 /formula
parent4f5f24a4a3dac22e0f2c0d4832e0cbdd566263b9 (diff)
tdf#126573 Add Excel2021 array function RANDARRAY to Calc
Add new function called RANDARRAY to the function list. (TODO: dynamic array in separate patch, oasis proposal) Change-Id: I34bad3b7e8d631d649a0350d7c1170b26161331d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167003 Tested-by: Jenkins Tested-by: Gabor Kelemen <gabor.kelemen.extern@allotropia.de> Reviewed-by: Balazs Varga <balazs.varga.extern@allotropia.de>
Diffstat (limited to 'formula')
-rw-r--r--formula/inc/core_resource.hrc6
-rw-r--r--formula/source/core/api/FormulaCompiler.cxx3
2 files changed, 9 insertions, 0 deletions
diff --git a/formula/inc/core_resource.hrc b/formula/inc/core_resource.hrc
index ec1f81699e7f..81c1e32fd38e 100644
--- a/formula/inc/core_resource.hrc
+++ b/formula/inc/core_resource.hrc
@@ -475,6 +475,7 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_ODFF[] =
{ "ORG.LIBREOFFICE.FOURIER", SC_OPCODE_FOURIER },
{ "ORG.LIBREOFFICE.RAND.NV" , SC_OPCODE_RANDOM_NV },
{ "ORG.LIBREOFFICE.RANDBETWEEN.NV" , SC_OPCODE_RANDBETWEEN_NV },
+ { "COM.MICROSOFT.RANDARRAY" , SC_OPCODE_RANDARRAY },
{ nullptr, -1 }
};
@@ -927,6 +928,7 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_OOXML[] =
{ "_xlfn.ORG.LIBREOFFICE.FOURIER", SC_OPCODE_FOURIER },
{ "_xlfn.ORG.LIBREOFFICE.RAND.NV" , SC_OPCODE_RANDOM_NV },
{ "_xlfn.ORG.LIBREOFFICE.RANDBETWEEN.NV" , SC_OPCODE_RANDBETWEEN_NV },
+ { "_xlfn.RANDARRAY" , SC_OPCODE_RANDARRAY },
{ nullptr, -1 }
};
@@ -1384,6 +1386,7 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_PODF[] =
{ "FOURIER", SC_OPCODE_FOURIER },
{ "RAND.NV" , SC_OPCODE_RANDOM_NV },
{ "RANDBETWEEN.NV" , SC_OPCODE_RANDBETWEEN_NV },
+ { "RANDARRAY" , SC_OPCODE_RANDARRAY },
{ nullptr, -1 }
};
@@ -1840,6 +1843,7 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_API[] =
{ "FOURIER", SC_OPCODE_FOURIER },
{ "RAND.NV" , SC_OPCODE_RANDOM_NV },
{ "RANDBETWEEN.NV" , SC_OPCODE_RANDBETWEEN_NV },
+ { "RANDARRAY" , SC_OPCODE_RANDARRAY },
{ nullptr, -1 }
};
@@ -2295,6 +2299,7 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH[] =
{ "FOURIER", SC_OPCODE_FOURIER },
{ "RAND.NV" , SC_OPCODE_RANDOM_NV },
{ "RANDBETWEEN.NV" , SC_OPCODE_RANDBETWEEN_NV },
+ { "RANDARRAY" , SC_OPCODE_RANDARRAY },
{ nullptr, -1 }
};
@@ -2747,6 +2752,7 @@ const std::pair<TranslateId, int> RID_STRLIST_FUNCTION_NAMES[] =
{ NC_("RID_STRLIST_FUNCTION_NAMES", "FOURIER"), SC_OPCODE_FOURIER },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "RAND.NV"), SC_OPCODE_RANDOM_NV },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "RANDBETWEEN.NV"), SC_OPCODE_RANDBETWEEN_NV },
+ { NC_("RID_STRLIST_FUNCTION_NAMES", "RANDARRAY"), SC_OPCODE_RANDARRAY },
{ {}, -1 }
};
diff --git a/formula/source/core/api/FormulaCompiler.cxx b/formula/source/core/api/FormulaCompiler.cxx
index 0f75df5cc184..3157e767c5aa 100644
--- a/formula/source/core/api/FormulaCompiler.cxx
+++ b/formula/source/core/api/FormulaCompiler.cxx
@@ -1171,6 +1171,8 @@ bool FormulaCompiler::IsOpCodeVolatile( OpCode eOp )
case ocOffset:
// ocDebugVar shows internal value that may change as the internal state changes.
case ocDebugVar:
+ // ocRandArray is a volatile function.
+ case ocRandArray:
bRet = true;
break;
default:
@@ -1234,6 +1236,7 @@ bool FormulaCompiler::IsMatrixFunction( OpCode eOpCode )
case ocFilter :
case ocSort :
case ocSortBy :
+ case ocRandArray :
return true;
default:
{