replace SC_OPCODE* with oc* constants (1)

I note in moving comments around to preserve them that ocXor
is in the wrong place, but it has always been that way, so I will
leave it alone.

Change-Id: Ia5fd59e96c478fe5f30788554cc260059a1c46e3
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/201510
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
This commit is contained in:
Noel Grandin
2026-03-12 09:06:58 +01:00
parent f4e878327c
commit 23ef4be9b8
12 changed files with 492 additions and 563 deletions
+302 -302
View File
@@ -34,40 +34,40 @@
// ScCompiler::IsOpCode() in the if (mxSymbols->isODFF()) block.
const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_ODFF[] =
{
{ "IF" , SC_OPCODE_IF },
{ "IFERROR" , SC_OPCODE_IF_ERROR },
{ "IFNA" , SC_OPCODE_IF_NA },
{ "CHOOSE" , SC_OPCODE_CHOOSE },
{ "(" , SC_OPCODE_OPEN },
{ ")" , SC_OPCODE_CLOSE },
{ "IF" , ocIf },
{ "IFERROR" , ocIfError },
{ "IFNA" , ocIfNA },
{ "CHOOSE" , ocChoose },
{ "(" , ocOpen },
{ ")" , ocClose },
// SC_OPCODE_TABLE_REF_... not supported in ODFF
{ "{" , SC_OPCODE_ARRAY_OPEN },
{ "}" , SC_OPCODE_ARRAY_CLOSE },
{ "|" , SC_OPCODE_ARRAY_ROW_SEP },
{ ";" , SC_OPCODE_ARRAY_COL_SEP },
{ ";" , SC_OPCODE_SEP },
{ "%" , SC_OPCODE_PERCENT_SIGN },
{ "+" , SC_OPCODE_ADD },
{ "-" , SC_OPCODE_SUB },
{ "*" , SC_OPCODE_MUL },
{ "/" , SC_OPCODE_DIV },
{ "&" , SC_OPCODE_AMPERSAND },
{ "^" , SC_OPCODE_POW },
{ "=" , SC_OPCODE_EQUAL },
{ "<>" , SC_OPCODE_NOT_EQUAL },
{ "<" , SC_OPCODE_LESS },
{ ">" , SC_OPCODE_GREATER },
{ "<=" , SC_OPCODE_LESS_EQUAL },
{ ">=" , SC_OPCODE_GREATER_EQUAL },
{ "AND" , SC_OPCODE_AND },
{ "OR" , SC_OPCODE_OR },
{ "XOR" , SC_OPCODE_XOR },
{ "!" , SC_OPCODE_INTERSECT },
{ "~" , SC_OPCODE_UNION },
{ ":" , SC_OPCODE_RANGE },
{ "{" , ocArrayOpen },
{ "}" , ocArrayClose },
{ "|" , ocArrayRowSep },
{ ";" , ocArrayColSep },
{ ";" , ocSep },
{ "%" , ocPercentSign },
{ "+" , ocAdd },
{ "-" , ocSub },
{ "*" , ocMul },
{ "/" , ocDiv },
{ "&" , ocAmpersand },
{ "^" , ocPow },
{ "=" , ocEqual },
{ "<>" , ocNotEqual },
{ "<" , ocLess },
{ ">" , ocGreater },
{ "<=" , ocLessEqual },
{ ">=" , ocGreaterEqual },
{ "AND" , ocAnd },
{ "OR" , ocOr },
{ "XOR" , ocXor },
{ "!" , ocIntersect },
{ "~" , ocUnion },
{ ":" , ocRange },
{ "NOT" , SC_OPCODE_NOT },
{ "NEG" , SC_OPCODE_NEG },
{ "-" , SC_OPCODE_NEG_SUB },
{ "-" , ocNegSub },
{ "PI" , SC_OPCODE_PI },
{ "RAND" , SC_OPCODE_RANDOM },
{ "TRUE" , SC_OPCODE_TRUE },
@@ -173,7 +173,7 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_ODFF[] =
{ "ROUNDDOWN" , SC_OPCODE_ROUND_DOWN },
{ "TRUNC" , SC_OPCODE_TRUNC },
{ "LOG" , SC_OPCODE_LOG },
{ "POWER" , SC_OPCODE_POWER },
{ "POWER" , ocPowER },
{ "GCD" , SC_OPCODE_GCD },
{ "LCM" , SC_OPCODE_LCM },
{ "MOD" , SC_OPCODE_MOD },
@@ -250,7 +250,7 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_ODFF[] =
{ "CUMPRINC" , SC_OPCODE_CUM_PRINC },
{ "EFFECT" , SC_OPCODE_EFFECT },
{ "NOMINAL" , SC_OPCODE_NOMINAL },
{ "SUBTOTAL" , SC_OPCODE_SUB_TOTAL },
{ "SUBTOTAL" , ocSub_TOTAL },
{ "DSUM" , SC_OPCODE_DB_SUM },
{ "DCOUNT" , SC_OPCODE_DB_COUNT },
{ "DCOUNTA" , SC_OPCODE_DB_COUNT_2 },
@@ -264,7 +264,7 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_ODFF[] =
{ "DVAR" , SC_OPCODE_DB_VAR },
{ "DVARP" , SC_OPCODE_DB_VAR_P },
{ "INDIRECT" , SC_OPCODE_INDIRECT },
{ "ADDRESS" , SC_OPCODE_ADDRESS },
{ "ADDRESS" , ocAddRESS },
{ "MATCH" , SC_OPCODE_MATCH },
{ "COM.MICROSOFT.XMATCH" , SC_OPCODE_X_MATCH },
{ "COUNTBLANK" , SC_OPCODE_COUNT_EMPTY_CELLS },
@@ -294,11 +294,11 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_ODFF[] =
{ "COM.MICROSOFT.TOCOL" , SC_OPCODE_TOCOL },
{ "COM.MICROSOFT.TOROW" , SC_OPCODE_TOROW },
{ "COM.MICROSOFT.UNIQUE" , SC_OPCODE_UNIQUE },
{ "COM.MICROSOFT.LET" , SC_OPCODE_LET },
{ "COM.MICROSOFT.LET" , ocLet },
{ "COM.MICROSOFT.WRAPCOLS" , SC_OPCODE_WRAPCOLS },
{ "COM.MICROSOFT.WRAPROWS" , SC_OPCODE_WRAPROWS },
{ "_xlpm." , SC_OPCODE_STRINGNAME },
{ "ORG.OPENOFFICE.MULTIRANGE" , SC_OPCODE_MULTI_AREA }, // legacy for range list (union)
{ "_xlpm." , ocStringName },
{ "ORG.OPENOFFICE.MULTIRANGE" , ocMulTI_AREA }, // legacy for range list (union)
{ "OFFSET" , SC_OPCODE_OFFSET },
{ "INDEX" , SC_OPCODE_INDEX },
{ "AREAS" , SC_OPCODE_AREAS },
@@ -319,7 +319,7 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_ODFF[] =
{ "SEARCHB" , SC_OPCODE_SEARCHB },
{ "MIDB" , SC_OPCODE_MIDB },
{ "TEXT" , SC_OPCODE_TEXT },
{ "SUBSTITUTE" , SC_OPCODE_SUBSTITUTE },
{ "SUBSTITUTE" , ocSubSTITUTE },
{ "REPT" , SC_OPCODE_REPT },
{ "CONCATENATE" , SC_OPCODE_CONCAT },
{ "COM.MICROSOFT.CONCAT" , SC_OPCODE_CONCAT_MS },
@@ -472,13 +472,13 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_ODFF[] =
{ "BITRSHIFT" , SC_OPCODE_BITRSHIFT },
{ "BITLSHIFT" , SC_OPCODE_BITLSHIFT },
/* BEGIN defined ERROR.TYPE() values. */
{ "#NULL!" , SC_OPCODE_ERROR_NULL },
{ "#DIV/0!" , SC_OPCODE_ERROR_DIVZERO },
{ "#VALUE!" , SC_OPCODE_ERROR_VALUE },
{ "#REF!" , SC_OPCODE_ERROR_REF },
{ "#NAME?" , SC_OPCODE_ERROR_NAME },
{ "#NUM!" , SC_OPCODE_ERROR_NUM },
{ "#N/A" , SC_OPCODE_ERROR_NA },
{ "#NULL!" , ocErrNull },
{ "#DIV/0!" , ocErrDivZero },
{ "#VALUE!" , ocErrValue },
{ "#REF!" , ocErrRef },
{ "#NAME?" , ocErrName },
{ "#NUM!" , ocErrNum },
{ "#N/A" , ocErrNA },
/* END defined ERROR.TYPE() values. */
{ "COM.MICROSOFT.FILTERXML" , SC_OPCODE_FILTERXML },
{ "COM.MICROSOFT.WEBSERVICE" , SC_OPCODE_WEBSERVICE },
@@ -499,46 +499,46 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_ODFF[] =
/** These function names are used in the OOXML XLSX import/export. */
const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_OOXML[] =
{
{ "IF" , SC_OPCODE_IF },
{ "IFERROR" , SC_OPCODE_IF_ERROR },
{ "_xlfn.IFNA" , SC_OPCODE_IF_NA },
{ "CHOOSE" , SC_OPCODE_CHOOSE },
{ "(" , SC_OPCODE_OPEN },
{ ")" , SC_OPCODE_CLOSE },
{ "[" , SC_OPCODE_TABLE_REF_OPEN },
{ "]" , SC_OPCODE_TABLE_REF_CLOSE },
{ "#All" , SC_OPCODE_TABLE_REF_ITEM_ALL },
{ "#Headers" , SC_OPCODE_TABLE_REF_ITEM_HEADERS },
{ "#Data" , SC_OPCODE_TABLE_REF_ITEM_DATA },
{ "#Totals" , SC_OPCODE_TABLE_REF_ITEM_TOTALS },
{ "#This Row" , SC_OPCODE_TABLE_REF_ITEM_THIS_ROW },
{ "{" , SC_OPCODE_ARRAY_OPEN },
{ "}" , SC_OPCODE_ARRAY_CLOSE },
{ ";" , SC_OPCODE_ARRAY_ROW_SEP },
{ "," , SC_OPCODE_ARRAY_COL_SEP },
{ "," , SC_OPCODE_SEP },
{ "%" , SC_OPCODE_PERCENT_SIGN },
{ "+" , SC_OPCODE_ADD },
{ "-" , SC_OPCODE_SUB },
{ "*" , SC_OPCODE_MUL },
{ "/" , SC_OPCODE_DIV },
{ "&" , SC_OPCODE_AMPERSAND },
{ "^" , SC_OPCODE_POW },
{ "=" , SC_OPCODE_EQUAL },
{ "<>" , SC_OPCODE_NOT_EQUAL },
{ "<" , SC_OPCODE_LESS },
{ ">" , SC_OPCODE_GREATER },
{ "<=" , SC_OPCODE_LESS_EQUAL },
{ ">=" , SC_OPCODE_GREATER_EQUAL },
{ "AND" , SC_OPCODE_AND },
{ "OR" , SC_OPCODE_OR },
{ "_xlfn.XOR" , SC_OPCODE_XOR },
{ " " , SC_OPCODE_INTERSECT },
{ "," , SC_OPCODE_UNION }, // Excel uses ',' as Union operator
{ ":" , SC_OPCODE_RANGE },
{ "IF" , ocIf },
{ "IFERROR" , ocIfError },
{ "_xlfn.IFNA" , ocIfNA },
{ "CHOOSE" , ocChoose },
{ "(" , ocOpen },
{ ")" , ocClose },
{ "[" , ocTableRefOpen },
{ "]" , ocTableRefClose },
{ "#All" , ocTableRefItemAll },
{ "#Headers" , ocTableRefItemHeaders },
{ "#Data" , ocTableRefItemData },
{ "#Totals" , ocTableRefItemTotals },
{ "#This Row" , ocTableRefItemThisRow },
{ "{" , ocArrayOpen },
{ "}" , ocArrayClose },
{ ";" , ocArrayRowSep },
{ "," , ocArrayColSep },
{ "," , ocSep },
{ "%" , ocPercentSign },
{ "+" , ocAdd },
{ "-" , ocSub },
{ "*" , ocMul },
{ "/" , ocDiv },
{ "&" , ocAmpersand },
{ "^" , ocPow },
{ "=" , ocEqual },
{ "<>" , ocNotEqual },
{ "<" , ocLess },
{ ">" , ocGreater },
{ "<=" , ocLessEqual },
{ ">=" , ocGreaterEqual },
{ "AND" , ocAnd },
{ "OR" , ocOr },
{ "_xlfn.XOR" , ocXor },
{ " " , ocIntersect },
{ "," , ocUnion }, // Excel uses ',' as Union operator
{ ":" , ocRange },
{ "NOT" , SC_OPCODE_NOT },
{ "NEG" , SC_OPCODE_NEG },
{ "-" , SC_OPCODE_NEG_SUB },
{ "-" , ocNegSub },
{ "PI" , SC_OPCODE_PI },
{ "RAND" , SC_OPCODE_RANDOM },
{ "TRUE" , SC_OPCODE_TRUE },
@@ -644,7 +644,7 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_OOXML[] =
{ "ROUNDDOWN" , SC_OPCODE_ROUND_DOWN },
{ "TRUNC" , SC_OPCODE_TRUNC },
{ "LOG" , SC_OPCODE_LOG },
{ "POWER" , SC_OPCODE_POWER },
{ "POWER" , ocPowER },
{ "GCD" , SC_OPCODE_GCD },
{ "LCM" , SC_OPCODE_LCM },
{ "MOD" , SC_OPCODE_MOD },
@@ -721,7 +721,7 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_OOXML[] =
{ "CUMPRINC" , SC_OPCODE_CUM_PRINC },
{ "EFFECT" , SC_OPCODE_EFFECT },
{ "NOMINAL" , SC_OPCODE_NOMINAL },
{ "SUBTOTAL" , SC_OPCODE_SUB_TOTAL },
{ "SUBTOTAL" , ocSub_TOTAL },
{ "DSUM" , SC_OPCODE_DB_SUM },
{ "DCOUNT" , SC_OPCODE_DB_COUNT },
{ "DCOUNTA" , SC_OPCODE_DB_COUNT_2 },
@@ -735,7 +735,7 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_OOXML[] =
{ "DVAR" , SC_OPCODE_DB_VAR },
{ "DVARP" , SC_OPCODE_DB_VAR_P },
{ "INDIRECT" , SC_OPCODE_INDIRECT },
{ "ADDRESS" , SC_OPCODE_ADDRESS },
{ "ADDRESS" , ocAddRESS },
{ "MATCH" , SC_OPCODE_MATCH },
{ "_xlfn.XMATCH" , SC_OPCODE_X_MATCH },
{ "COUNTBLANK" , SC_OPCODE_COUNT_EMPTY_CELLS },
@@ -765,11 +765,11 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_OOXML[] =
{ "_xlfn.TOCOL" , SC_OPCODE_TOCOL },
{ "_xlfn.TOROW" , SC_OPCODE_TOROW },
{ "_xlfn.UNIQUE" , SC_OPCODE_UNIQUE },
{ "_xlfn.LET" , SC_OPCODE_LET },
{ "_xlfn.LET" , ocLet },
{ "_xlfn.WRAPCOLS" , SC_OPCODE_WRAPCOLS },
{ "_xlfn.WRAPROWS" , SC_OPCODE_WRAPROWS },
{ "_xlpm." , SC_OPCODE_STRINGNAME },
{ "_xlfn.ORG.OPENOFFICE.MULTIRANGE" , SC_OPCODE_MULTI_AREA }, // legacy for range list (union)
{ "_xlpm." , ocStringName },
{ "_xlfn.ORG.OPENOFFICE.MULTIRANGE" , ocMulTI_AREA }, // legacy for range list (union)
{ "OFFSET" , SC_OPCODE_OFFSET },
{ "INDEX" , SC_OPCODE_INDEX },
{ "AREAS" , SC_OPCODE_AREAS },
@@ -790,7 +790,7 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_OOXML[] =
{ "SEARCHB" , SC_OPCODE_SEARCHB },
{ "MIDB" , SC_OPCODE_MIDB },
{ "TEXT" , SC_OPCODE_TEXT },
{ "SUBSTITUTE" , SC_OPCODE_SUBSTITUTE },
{ "SUBSTITUTE" , ocSubSTITUTE },
{ "REPT" , SC_OPCODE_REPT },
{ "CONCATENATE" , SC_OPCODE_CONCAT },
{ "_xlfn.CONCAT" , SC_OPCODE_CONCAT_MS },
@@ -942,13 +942,13 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_OOXML[] =
{ "_xlfn.BITXOR" , SC_OPCODE_BITXOR },
{ "_xlfn.BITRSHIFT" , SC_OPCODE_BITRSHIFT },
{ "_xlfn.BITLSHIFT" , SC_OPCODE_BITLSHIFT },
{ "#NULL!" , SC_OPCODE_ERROR_NULL },
{ "#DIV/0!" , SC_OPCODE_ERROR_DIVZERO },
{ "#VALUE!" , SC_OPCODE_ERROR_VALUE },
{ "#REF!" , SC_OPCODE_ERROR_REF },
{ "#NAME?" , SC_OPCODE_ERROR_NAME },
{ "#NUM!" , SC_OPCODE_ERROR_NUM },
{ "#N/A" , SC_OPCODE_ERROR_NA },
{ "#NULL!" , ocErrNull },
{ "#DIV/0!" , ocErrDivZero },
{ "#VALUE!" , ocErrValue },
{ "#REF!" , ocErrRef },
{ "#NAME?" , ocErrName },
{ "#NUM!" , ocErrNum },
{ "#N/A" , ocErrNA },
/* END defined ERROR.TYPE() values. */
{ "_xlfn.FILTERXML" , SC_OPCODE_FILTERXML },
{ "_xlfn.WEBSERVICE" , SC_OPCODE_WEBSERVICE },
@@ -963,7 +963,7 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_OOXML[] =
{ "_xlfn.ORG.LIBREOFFICE.RAND.NV" , SC_OPCODE_RANDOM_NV },
{ "_xlfn.ORG.LIBREOFFICE.RANDBETWEEN.NV" , SC_OPCODE_RANDBETWEEN_NV },
{ "_xlfn.RANDARRAY" , SC_OPCODE_RANDARRAY },
{ "#REF!", SC_OPCODE_STOP },
{ "#REF!", ocStop },
{ nullptr, -1 }
};
@@ -974,46 +974,46 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_OOXML[] =
// ScCompiler::IsOpCode() in the else if (mxSymbols->isPODF()) block.
const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_PODF[] =
{
{ "IF" , SC_OPCODE_IF },
{ "IFERROR" , SC_OPCODE_IF_ERROR },
{ "IFNA" , SC_OPCODE_IF_NA },
{ "CHOOSE" , SC_OPCODE_CHOOSE },
{ "(" , SC_OPCODE_OPEN },
{ ")" , SC_OPCODE_CLOSE },
{ "[" , SC_OPCODE_TABLE_REF_OPEN },
{ "]" , SC_OPCODE_TABLE_REF_CLOSE },
{ "#All" , SC_OPCODE_TABLE_REF_ITEM_ALL },
{ "#Headers" , SC_OPCODE_TABLE_REF_ITEM_HEADERS },
{ "#Data" , SC_OPCODE_TABLE_REF_ITEM_DATA },
{ "#Totals" , SC_OPCODE_TABLE_REF_ITEM_TOTALS },
{ "#This Row" , SC_OPCODE_TABLE_REF_ITEM_THIS_ROW },
{ "{" , SC_OPCODE_ARRAY_OPEN },
{ "}" , SC_OPCODE_ARRAY_CLOSE },
{ "|" , SC_OPCODE_ARRAY_ROW_SEP },
{ ";" , SC_OPCODE_ARRAY_COL_SEP },
{ ";" , SC_OPCODE_SEP },
{ "%" , SC_OPCODE_PERCENT_SIGN },
{ "+" , SC_OPCODE_ADD },
{ "-" , SC_OPCODE_SUB },
{ "*" , SC_OPCODE_MUL },
{ "/" , SC_OPCODE_DIV },
{ "&" , SC_OPCODE_AMPERSAND },
{ "^" , SC_OPCODE_POW },
{ "=" , SC_OPCODE_EQUAL },
{ "<>" , SC_OPCODE_NOT_EQUAL },
{ "<" , SC_OPCODE_LESS },
{ ">" , SC_OPCODE_GREATER },
{ "<=" , SC_OPCODE_LESS_EQUAL },
{ ">=" , SC_OPCODE_GREATER_EQUAL },
{ "AND" , SC_OPCODE_AND },
{ "OR" , SC_OPCODE_OR },
{ "XOR" , SC_OPCODE_XOR },
{ "!" , SC_OPCODE_INTERSECT },
{ "~" , SC_OPCODE_UNION },
{ ":" , SC_OPCODE_RANGE },
{ "IF" , ocIf },
{ "IFERROR" , ocIfError },
{ "IFNA" , ocIfNA },
{ "CHOOSE" , ocChoose },
{ "(" , ocOpen },
{ ")" , ocClose },
{ "[" , ocTableRefOpen },
{ "]" , ocTableRefClose },
{ "#All" , ocTableRefItemAll },
{ "#Headers" , ocTableRefItemHeaders },
{ "#Data" , ocTableRefItemData },
{ "#Totals" , ocTableRefItemTotals },
{ "#This Row" , ocTableRefItemThisRow },
{ "{" , ocArrayOpen },
{ "}" , ocArrayClose },
{ "|" , ocArrayRowSep },
{ ";" , ocArrayColSep },
{ ";" , ocSep },
{ "%" , ocPercentSign },
{ "+" , ocAdd },
{ "-" , ocSub },
{ "*" , ocMul },
{ "/" , ocDiv },
{ "&" , ocAmpersand },
{ "^" , ocPow },
{ "=" , ocEqual },
{ "<>" , ocNotEqual },
{ "<" , ocLess },
{ ">" , ocGreater },
{ "<=" , ocLessEqual },
{ ">=" , ocGreaterEqual },
{ "AND" , ocAnd },
{ "OR" , ocOr },
{ "XOR" , ocXor },
{ "!" , ocIntersect },
{ "~" , ocUnion },
{ ":" , ocRange },
{ "NOT" , SC_OPCODE_NOT },
{ "NEG" , SC_OPCODE_NEG },
{ "-" , SC_OPCODE_NEG_SUB },
{ "-" , ocNegSub },
{ "PI" , SC_OPCODE_PI },
{ "RAND" , SC_OPCODE_RANDOM },
{ "TRUE" , SC_OPCODE_TRUE },
@@ -1119,7 +1119,7 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_PODF[] =
{ "ROUNDDOWN" , SC_OPCODE_ROUND_DOWN },
{ "TRUNC" , SC_OPCODE_TRUNC },
{ "LOG" , SC_OPCODE_LOG },
{ "POWER" , SC_OPCODE_POWER },
{ "POWER" , ocPowER },
{ "GCD" , SC_OPCODE_GCD },
{ "LCM" , SC_OPCODE_LCM },
{ "MOD" , SC_OPCODE_MOD },
@@ -1196,7 +1196,7 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_PODF[] =
{ "CUMPRINC" , SC_OPCODE_CUM_PRINC },
{ "EFFECTIVE" , SC_OPCODE_EFFECT },
{ "NOMINAL" , SC_OPCODE_NOMINAL },
{ "SUBTOTAL" , SC_OPCODE_SUB_TOTAL },
{ "SUBTOTAL" , ocSub_TOTAL },
{ "DSUM" , SC_OPCODE_DB_SUM },
{ "DCOUNT" , SC_OPCODE_DB_COUNT },
{ "DCOUNTA" , SC_OPCODE_DB_COUNT_2 },
@@ -1210,7 +1210,7 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_PODF[] =
{ "DVAR" , SC_OPCODE_DB_VAR },
{ "DVARP" , SC_OPCODE_DB_VAR_P },
{ "INDIRECT" , SC_OPCODE_INDIRECT },
{ "ADDRESS" , SC_OPCODE_ADDRESS },
{ "ADDRESS" , ocAddRESS },
{ "MATCH" , SC_OPCODE_MATCH },
{ "XMATCH" , SC_OPCODE_X_MATCH },
{ "COUNTBLANK" , SC_OPCODE_COUNT_EMPTY_CELLS },
@@ -1240,10 +1240,10 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_PODF[] =
{ "TOCOL" , SC_OPCODE_TOCOL },
{ "TOROW" , SC_OPCODE_TOROW },
{ "UNIQUE" , SC_OPCODE_UNIQUE },
{ "LET" , SC_OPCODE_LET },
{ "LET" , ocLet },
{ "WRAPCOLS" , SC_OPCODE_WRAPCOLS },
{ "WRAPROWS" , SC_OPCODE_WRAPROWS },
{ "MULTIRANGE" , SC_OPCODE_MULTI_AREA }, // legacy for range list (union)
{ "MULTIRANGE" , ocMulTI_AREA }, // legacy for range list (union)
{ "OFFSET" , SC_OPCODE_OFFSET },
{ "INDEX" , SC_OPCODE_INDEX },
{ "AREAS" , SC_OPCODE_AREAS },
@@ -1264,7 +1264,7 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_PODF[] =
{ "SEARCHB" , SC_OPCODE_SEARCHB },
{ "MIDB" , SC_OPCODE_MIDB },
{ "TEXT" , SC_OPCODE_TEXT },
{ "SUBSTITUTE" , SC_OPCODE_SUBSTITUTE },
{ "SUBSTITUTE" , ocSubSTITUTE },
{ "REPT" , SC_OPCODE_REPT },
{ "CONCATENATE" , SC_OPCODE_CONCAT },
{ "CONCAT" , SC_OPCODE_CONCAT_MS },
@@ -1417,13 +1417,13 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_PODF[] =
{ "BITRSHIFT" , SC_OPCODE_BITRSHIFT },
{ "BITLSHIFT" , SC_OPCODE_BITLSHIFT },
/* BEGIN defined ERROR.TYPE() values. */
{ "#NULL!" , SC_OPCODE_ERROR_NULL },
{ "#DIV/0!" , SC_OPCODE_ERROR_DIVZERO },
{ "#VALUE!" , SC_OPCODE_ERROR_VALUE },
{ "#REF!" , SC_OPCODE_ERROR_REF },
{ "#NAME?" , SC_OPCODE_ERROR_NAME },
{ "#NUM!" , SC_OPCODE_ERROR_NUM },
{ "#N/A" , SC_OPCODE_ERROR_NA },
{ "#NULL!" , ocErrNull },
{ "#DIV/0!" , ocErrDivZero },
{ "#VALUE!" , ocErrValue },
{ "#REF!" , ocErrRef },
{ "#NAME?" , ocErrName },
{ "#NUM!" , ocErrNum },
{ "#N/A" , ocErrNA },
/* END defined ERROR.TYPE() values. */
{ "FILTERXML" , SC_OPCODE_FILTERXML },
{ "WEBSERVICE" , SC_OPCODE_WEBSERVICE },
@@ -1448,46 +1448,46 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_PODF[] =
// ScCompiler::IsOpCode().
const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_API[] =
{
{ "IF" , SC_OPCODE_IF },
{ "IFERROR" , SC_OPCODE_IF_ERROR },
{ "IFNA" , SC_OPCODE_IF_NA },
{ "CHOOSE" , SC_OPCODE_CHOOSE },
{ "(" , SC_OPCODE_OPEN },
{ ")" , SC_OPCODE_CLOSE },
{ "[" , SC_OPCODE_TABLE_REF_OPEN },
{ "]" , SC_OPCODE_TABLE_REF_CLOSE },
{ "#All" , SC_OPCODE_TABLE_REF_ITEM_ALL },
{ "#Headers" , SC_OPCODE_TABLE_REF_ITEM_HEADERS },
{ "#Data" , SC_OPCODE_TABLE_REF_ITEM_DATA },
{ "#Totals" , SC_OPCODE_TABLE_REF_ITEM_TOTALS },
{ "#This Row" , SC_OPCODE_TABLE_REF_ITEM_THIS_ROW },
{ "{" , SC_OPCODE_ARRAY_OPEN },
{ "}" , SC_OPCODE_ARRAY_CLOSE },
{ "|" , SC_OPCODE_ARRAY_ROW_SEP },
{ ";" , SC_OPCODE_ARRAY_COL_SEP },
{ ";" , SC_OPCODE_SEP },
{ "%" , SC_OPCODE_PERCENT_SIGN },
{ "+" , SC_OPCODE_ADD },
{ "-" , SC_OPCODE_SUB },
{ "*" , SC_OPCODE_MUL },
{ "/" , SC_OPCODE_DIV },
{ "&" , SC_OPCODE_AMPERSAND },
{ "^" , SC_OPCODE_POW },
{ "=" , SC_OPCODE_EQUAL },
{ "<>" , SC_OPCODE_NOT_EQUAL },
{ "<" , SC_OPCODE_LESS },
{ ">" , SC_OPCODE_GREATER },
{ "<=" , SC_OPCODE_LESS_EQUAL },
{ ">=" , SC_OPCODE_GREATER_EQUAL },
{ "AND" , SC_OPCODE_AND },
{ "OR" , SC_OPCODE_OR },
{ "XOR" , SC_OPCODE_XOR },
{ "!" , SC_OPCODE_INTERSECT },
{ "~" , SC_OPCODE_UNION },
{ ":" , SC_OPCODE_RANGE },
{ "IF" , ocIf },
{ "IFERROR" , ocIfError },
{ "IFNA" , ocIfNA },
{ "CHOOSE" , ocChoose },
{ "(" , ocOpen },
{ ")" , ocClose },
{ "[" , ocTableRefOpen },
{ "]" , ocTableRefClose },
{ "#All" , ocTableRefItemAll },
{ "#Headers" , ocTableRefItemHeaders },
{ "#Data" , ocTableRefItemData },
{ "#Totals" , ocTableRefItemTotals },
{ "#This Row" , ocTableRefItemThisRow },
{ "{" , ocArrayOpen },
{ "}" , ocArrayClose },
{ "|" , ocArrayRowSep },
{ ";" , ocArrayColSep },
{ ";" , ocSep },
{ "%" , ocPercentSign },
{ "+" , ocAdd },
{ "-" , ocSub },
{ "*" , ocMul },
{ "/" , ocDiv },
{ "&" , ocAmpersand },
{ "^" , ocPow },
{ "=" , ocEqual },
{ "<>" , ocNotEqual },
{ "<" , ocLess },
{ ">" , ocGreater },
{ "<=" , ocLessEqual },
{ ">=" , ocGreaterEqual },
{ "AND" , ocAnd },
{ "OR" , ocOr },
{ "XOR" , ocXor },
{ "!" , ocIntersect },
{ "~" , ocUnion },
{ ":" , ocRange },
{ "NOT" , SC_OPCODE_NOT },
{ "NEG" , SC_OPCODE_NEG },
{ "-" , SC_OPCODE_NEG_SUB },
{ "-" , ocNegSub },
{ "PI" , SC_OPCODE_PI },
{ "RAND" , SC_OPCODE_RANDOM },
{ "TRUE" , SC_OPCODE_TRUE },
@@ -1593,7 +1593,7 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_API[] =
{ "ROUNDDOWN" , SC_OPCODE_ROUND_DOWN },
{ "TRUNC" , SC_OPCODE_TRUNC },
{ "LOG" , SC_OPCODE_LOG },
{ "POWER" , SC_OPCODE_POWER },
{ "POWER" , ocPowER },
{ "GCD" , SC_OPCODE_GCD },
{ "LCM" , SC_OPCODE_LCM },
{ "MOD" , SC_OPCODE_MOD },
@@ -1670,7 +1670,7 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_API[] =
{ "CUMPRINC" , SC_OPCODE_CUM_PRINC },
{ "EFFECTIVE" , SC_OPCODE_EFFECT },
{ "NOMINAL" , SC_OPCODE_NOMINAL },
{ "SUBTOTAL" , SC_OPCODE_SUB_TOTAL },
{ "SUBTOTAL" , ocSub_TOTAL },
{ "DSUM" , SC_OPCODE_DB_SUM },
{ "DCOUNT" , SC_OPCODE_DB_COUNT },
{ "DCOUNTA" , SC_OPCODE_DB_COUNT_2 },
@@ -1684,7 +1684,7 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_API[] =
{ "DVAR" , SC_OPCODE_DB_VAR },
{ "DVARP" , SC_OPCODE_DB_VAR_P },
{ "INDIRECT" , SC_OPCODE_INDIRECT },
{ "ADDRESS" , SC_OPCODE_ADDRESS },
{ "ADDRESS" , ocAddRESS },
{ "MATCH" , SC_OPCODE_MATCH },
{ "XMATCH" , SC_OPCODE_X_MATCH },
{ "COUNTBLANK" , SC_OPCODE_COUNT_EMPTY_CELLS },
@@ -1714,10 +1714,10 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_API[] =
{ "TOCOL" , SC_OPCODE_TOCOL },
{ "TOROW" , SC_OPCODE_TOROW },
{ "UNIQUE" , SC_OPCODE_UNIQUE },
{ "LET" , SC_OPCODE_LET },
{ "LET" , ocLet },
{ "WRAPCOLS" , SC_OPCODE_WRAPCOLS },
{ "WRAPROWS" , SC_OPCODE_WRAPROWS },
{ "MULTIRANGE" , SC_OPCODE_MULTI_AREA }, // legacy for range list (union)
{ "MULTIRANGE" , ocMulTI_AREA }, // legacy for range list (union)
{ "OFFSET" , SC_OPCODE_OFFSET },
{ "INDEX" , SC_OPCODE_INDEX }, // ?? first character = I ??
{ "AREAS" , SC_OPCODE_AREAS },
@@ -1738,7 +1738,7 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_API[] =
{ "SEARCHB" , SC_OPCODE_SEARCHB },
{ "MIDB" , SC_OPCODE_MIDB },
{ "TEXT" , SC_OPCODE_TEXT },
{ "SUBSTITUTE" , SC_OPCODE_SUBSTITUTE },
{ "SUBSTITUTE" , ocSubSTITUTE },
{ "REPT" , SC_OPCODE_REPT },
{ "CONCATENATE" , SC_OPCODE_CONCAT },
{ "CONCAT" , SC_OPCODE_CONCAT_MS },
@@ -1890,13 +1890,13 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_API[] =
{ "BITXOR" , SC_OPCODE_BITXOR },
{ "BITRSHIFT" , SC_OPCODE_BITRSHIFT },
{ "BITLSHIFT" , SC_OPCODE_BITLSHIFT },
{ "#NULL!" , SC_OPCODE_ERROR_NULL },
{ "#DIV/0!" , SC_OPCODE_ERROR_DIVZERO },
{ "#VALUE!" , SC_OPCODE_ERROR_VALUE },
{ "#REF!" , SC_OPCODE_ERROR_REF },
{ "#NAME?" , SC_OPCODE_ERROR_NAME },
{ "#NUM!" , SC_OPCODE_ERROR_NUM },
{ "#N/A" , SC_OPCODE_ERROR_NA },
{ "#NULL!" , ocErrNull },
{ "#DIV/0!" , ocErrDivZero },
{ "#VALUE!" , ocErrValue },
{ "#REF!" , ocErrRef },
{ "#NAME?" , ocErrName },
{ "#NUM!" , ocErrNum },
{ "#N/A" , ocErrNA },
/* END defined ERROR.TYPE() values. */
{ "FILTERXML" , SC_OPCODE_FILTERXML },
{ "WEBSERVICE" , SC_OPCODE_WEBSERVICE },
@@ -1920,46 +1920,46 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_API[] =
// at the same time.
const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH[] =
{
{ "IF" , SC_OPCODE_IF },
{ "IFERROR" , SC_OPCODE_IF_ERROR },
{ "IFNA" , SC_OPCODE_IF_NA },
{ "CHOOSE" , SC_OPCODE_CHOOSE },
{ "(" , SC_OPCODE_OPEN },
{ ")" , SC_OPCODE_CLOSE },
{ "[" , SC_OPCODE_TABLE_REF_OPEN },
{ "]" , SC_OPCODE_TABLE_REF_CLOSE },
{ "#All" , SC_OPCODE_TABLE_REF_ITEM_ALL },
{ "#Headers" , SC_OPCODE_TABLE_REF_ITEM_HEADERS },
{ "#Data" , SC_OPCODE_TABLE_REF_ITEM_DATA },
{ "#Totals" , SC_OPCODE_TABLE_REF_ITEM_TOTALS },
{ "#This Row" , SC_OPCODE_TABLE_REF_ITEM_THIS_ROW },
{ "{" , SC_OPCODE_ARRAY_OPEN },
{ "}" , SC_OPCODE_ARRAY_CLOSE },
{ "|" , SC_OPCODE_ARRAY_ROW_SEP },
{ ";" , SC_OPCODE_ARRAY_COL_SEP },
{ ";" , SC_OPCODE_SEP },
{ "%" , SC_OPCODE_PERCENT_SIGN },
{ "+" , SC_OPCODE_ADD },
{ "-" , SC_OPCODE_SUB },
{ "*" , SC_OPCODE_MUL },
{ "/" , SC_OPCODE_DIV },
{ "&" , SC_OPCODE_AMPERSAND },
{ "^" , SC_OPCODE_POW },
{ "=" , SC_OPCODE_EQUAL },
{ "<>" , SC_OPCODE_NOT_EQUAL },
{ "<" , SC_OPCODE_LESS },
{ ">" , SC_OPCODE_GREATER },
{ "<=" , SC_OPCODE_LESS_EQUAL },
{ ">=" , SC_OPCODE_GREATER_EQUAL },
{ "AND" , SC_OPCODE_AND },
{ "OR" , SC_OPCODE_OR },
{ "XOR" , SC_OPCODE_XOR },
{ "!" , SC_OPCODE_INTERSECT },
{ "~" , SC_OPCODE_UNION },
{ ":" , SC_OPCODE_RANGE },
{ "IF" , ocIf },
{ "IFERROR" , ocIfError },
{ "IFNA" , ocIfNA },
{ "CHOOSE" , ocChoose },
{ "(" , ocOpen },
{ ")" , ocClose },
{ "[" , ocTableRefOpen },
{ "]" , ocTableRefClose },
{ "#All" , ocTableRefItemAll },
{ "#Headers" , ocTableRefItemHeaders },
{ "#Data" , ocTableRefItemData },
{ "#Totals" , ocTableRefItemTotals },
{ "#This Row" , ocTableRefItemThisRow },
{ "{" , ocArrayOpen },
{ "}" , ocArrayClose },
{ "|" , ocArrayRowSep },
{ ";" , ocArrayColSep },
{ ";" , ocSep },
{ "%" , ocPercentSign },
{ "+" , ocAdd },
{ "-" , ocSub },
{ "*" , ocMul },
{ "/" , ocDiv },
{ "&" , ocAmpersand },
{ "^" , ocPow },
{ "=" , ocEqual },
{ "<>" , ocNotEqual },
{ "<" , ocLess },
{ ">" , ocGreater },
{ "<=" , ocLessEqual },
{ ">=" , ocGreaterEqual },
{ "AND" , ocAnd },
{ "OR" , ocOr },
{ "XOR" , ocXor },
{ "!" , ocIntersect },
{ "~" , ocUnion },
{ ":" , ocRange },
{ "NOT" , SC_OPCODE_NOT },
{ "NEG" , SC_OPCODE_NEG },
{ "-" , SC_OPCODE_NEG_SUB },
{ "-" , ocNegSub },
{ "PI" , SC_OPCODE_PI },
{ "RAND" , SC_OPCODE_RANDOM },
{ "TRUE" , SC_OPCODE_TRUE },
@@ -2065,7 +2065,7 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH[] =
{ "ROUNDDOWN" , SC_OPCODE_ROUND_DOWN },
{ "TRUNC" , SC_OPCODE_TRUNC },
{ "LOG" , SC_OPCODE_LOG },
{ "POWER" , SC_OPCODE_POWER },
{ "POWER" , ocPowER },
{ "GCD" , SC_OPCODE_GCD },
{ "LCM" , SC_OPCODE_LCM },
{ "MOD" , SC_OPCODE_MOD },
@@ -2142,7 +2142,7 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH[] =
{ "CUMPRINC" , SC_OPCODE_CUM_PRINC },
{ "EFFECT" , SC_OPCODE_EFFECT },
{ "NOMINAL" , SC_OPCODE_NOMINAL },
{ "SUBTOTAL" , SC_OPCODE_SUB_TOTAL },
{ "SUBTOTAL" , ocSub_TOTAL },
{ "DSUM" , SC_OPCODE_DB_SUM },
{ "DCOUNT" , SC_OPCODE_DB_COUNT },
{ "DCOUNTA" , SC_OPCODE_DB_COUNT_2 },
@@ -2156,7 +2156,7 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH[] =
{ "DVAR" , SC_OPCODE_DB_VAR },
{ "DVARP" , SC_OPCODE_DB_VAR_P },
{ "INDIRECT" , SC_OPCODE_INDIRECT },
{ "ADDRESS" , SC_OPCODE_ADDRESS },
{ "ADDRESS" , ocAddRESS },
{ "MATCH" , SC_OPCODE_MATCH },
{ "XMATCH" , SC_OPCODE_X_MATCH },
{ "COUNTBLANK" , SC_OPCODE_COUNT_EMPTY_CELLS },
@@ -2186,10 +2186,10 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH[] =
{ "TOCOL" , SC_OPCODE_TOCOL },
{ "TOROW" , SC_OPCODE_TOROW },
{ "UNIQUE" , SC_OPCODE_UNIQUE },
{ "LET" , SC_OPCODE_LET },
{ "LET" , ocLet },
{ "WRAPCOLS" , SC_OPCODE_WRAPCOLS },
{ "WRAPROWS" , SC_OPCODE_WRAPROWS },
{ "MULTIRANGE" , SC_OPCODE_MULTI_AREA },
{ "MULTIRANGE" , ocMulTI_AREA },
{ "OFFSET" , SC_OPCODE_OFFSET },
{ "INDEX" , SC_OPCODE_INDEX },
{ "AREAS" , SC_OPCODE_AREAS },
@@ -2210,7 +2210,7 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH[] =
{ "SEARCHB" , SC_OPCODE_SEARCHB },
{ "MIDB" , SC_OPCODE_MIDB },
{ "TEXT" , SC_OPCODE_TEXT },
{ "SUBSTITUTE" , SC_OPCODE_SUBSTITUTE },
{ "SUBSTITUTE" , ocSubSTITUTE },
{ "REPT" , SC_OPCODE_REPT },
{ "CONCATENATE" , SC_OPCODE_CONCAT },
{ "CONCAT" , SC_OPCODE_CONCAT_MS },
@@ -2362,13 +2362,13 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH[] =
{ "BITXOR" , SC_OPCODE_BITXOR },
{ "BITRSHIFT" , SC_OPCODE_BITRSHIFT },
{ "BITLSHIFT" , SC_OPCODE_BITLSHIFT },
{ "#NULL!" , SC_OPCODE_ERROR_NULL },
{ "#DIV/0!" , SC_OPCODE_ERROR_DIVZERO },
{ "#VALUE!" , SC_OPCODE_ERROR_VALUE },
{ "#REF!" , SC_OPCODE_ERROR_REF },
{ "#NAME?" , SC_OPCODE_ERROR_NAME },
{ "#NUM!" , SC_OPCODE_ERROR_NUM },
{ "#N/A" , SC_OPCODE_ERROR_NA },
{ "#NULL!" , ocErrNull },
{ "#DIV/0!" , ocErrDivZero },
{ "#VALUE!" , ocErrValue },
{ "#REF!" , ocErrRef },
{ "#NAME?" , ocErrName },
{ "#NUM!" , ocErrNum },
{ "#N/A" , ocErrNA },
/* END defined ERROR.TYPE() values. */
{ "FILTERXML" , SC_OPCODE_FILTERXML },
{ "WEBSERVICE" , SC_OPCODE_WEBSERVICE },
@@ -2393,23 +2393,23 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH[] =
*/
const std::pair<TranslateId, int> RID_STRLIST_FUNCTION_NAMES[] =
{
{ NC_("RID_STRLIST_FUNCTION_NAMES", "IF") , SC_OPCODE_IF },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "IFERROR") , SC_OPCODE_IF_ERROR },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "IFNA") , SC_OPCODE_IF_NA },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "CHOOSE") , SC_OPCODE_CHOOSE },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "IF") , ocIf },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "IFERROR") , ocIfError },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "IFNA") , ocIfNA },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "CHOOSE") , ocChoose },
/* L10n: preserve the leading '#' hash character in translations. */
{ NC_("RID_STRLIST_FUNCTION_NAMES", "#All") , SC_OPCODE_TABLE_REF_ITEM_ALL },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "#All") , ocTableRefItemAll },
/* L10n: preserve the leading '#' hash character in translations. */
{ NC_("RID_STRLIST_FUNCTION_NAMES", "#Headers") , SC_OPCODE_TABLE_REF_ITEM_HEADERS },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "#Headers") , ocTableRefItemHeaders },
/* L10n: preserve the leading '#' hash character in translations. */
{ NC_("RID_STRLIST_FUNCTION_NAMES", "#Data") , SC_OPCODE_TABLE_REF_ITEM_DATA },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "#Data") , ocTableRefItemData },
/* L10n: preserve the leading '#' hash character in translations. */
{ NC_("RID_STRLIST_FUNCTION_NAMES", "#Totals") , SC_OPCODE_TABLE_REF_ITEM_TOTALS },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "#Totals") , ocTableRefItemTotals },
/* L10n: preserve the leading '#' hash character in translations. */
{ NC_("RID_STRLIST_FUNCTION_NAMES", "#This Row") , SC_OPCODE_TABLE_REF_ITEM_THIS_ROW },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "AND") , SC_OPCODE_AND },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "OR") , SC_OPCODE_OR },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "XOR") , SC_OPCODE_XOR },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "#This Row") , ocTableRefItemThisRow },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "AND") , ocAnd },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "OR") , ocOr },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "XOR") , ocXor },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "NOT") , SC_OPCODE_NOT },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "NEG") , SC_OPCODE_NEG },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "PI") , SC_OPCODE_PI }, // ???
@@ -2518,7 +2518,7 @@ const std::pair<TranslateId, int> RID_STRLIST_FUNCTION_NAMES[] =
{ NC_("RID_STRLIST_FUNCTION_NAMES", "ROUNDDOWN") , SC_OPCODE_ROUND_DOWN },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "TRUNC") , SC_OPCODE_TRUNC },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "LOG") , SC_OPCODE_LOG },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "POWER") , SC_OPCODE_POWER },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "POWER") , ocPowER },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "GCD") , SC_OPCODE_GCD },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "LCM") , SC_OPCODE_LCM },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "MOD") , SC_OPCODE_MOD },
@@ -2595,7 +2595,7 @@ const std::pair<TranslateId, int> RID_STRLIST_FUNCTION_NAMES[] =
{ NC_("RID_STRLIST_FUNCTION_NAMES", "CUMPRINC") , SC_OPCODE_CUM_PRINC },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "EFFECT") , SC_OPCODE_EFFECT },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "NOMINAL") , SC_OPCODE_NOMINAL },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "SUBTOTAL") , SC_OPCODE_SUB_TOTAL },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "SUBTOTAL") , ocSub_TOTAL },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "DSUM") , SC_OPCODE_DB_SUM },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "DCOUNT") , SC_OPCODE_DB_COUNT },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "DCOUNTA") , SC_OPCODE_DB_COUNT_2 },
@@ -2609,7 +2609,7 @@ const std::pair<TranslateId, int> RID_STRLIST_FUNCTION_NAMES[] =
{ NC_("RID_STRLIST_FUNCTION_NAMES", "DVAR") , SC_OPCODE_DB_VAR },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "DVARP") , SC_OPCODE_DB_VAR_P },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "INDIRECT") , SC_OPCODE_INDIRECT },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "ADDRESS") , SC_OPCODE_ADDRESS },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "ADDRESS") , ocAddRESS },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "MATCH") , SC_OPCODE_MATCH },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "XMATCH") , SC_OPCODE_X_MATCH },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "COUNTBLANK") , SC_OPCODE_COUNT_EMPTY_CELLS },
@@ -2639,10 +2639,10 @@ const std::pair<TranslateId, int> RID_STRLIST_FUNCTION_NAMES[] =
{ NC_("RID_STRLIST_FUNCTION_NAMES", "TOCOL") , SC_OPCODE_TOCOL },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "TOROW") , SC_OPCODE_TOROW },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "UNIQUE") , SC_OPCODE_UNIQUE },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "LET") , SC_OPCODE_LET },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "LET") , ocLet },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "WRAPCOLS") , SC_OPCODE_WRAPCOLS },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "WRAPROWS") , SC_OPCODE_WRAPROWS },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "MULTIRANGE") , SC_OPCODE_MULTI_AREA }, // legacy for range list (union)
{ NC_("RID_STRLIST_FUNCTION_NAMES", "MULTIRANGE") , ocMulTI_AREA }, // legacy for range list (union)
{ NC_("RID_STRLIST_FUNCTION_NAMES", "OFFSET") , SC_OPCODE_OFFSET },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "INDEX") , SC_OPCODE_INDEX }, // ?? first character = I ??
{ NC_("RID_STRLIST_FUNCTION_NAMES", "AREAS") , SC_OPCODE_AREAS },
@@ -2661,7 +2661,7 @@ const std::pair<TranslateId, int> RID_STRLIST_FUNCTION_NAMES[] =
{ NC_("RID_STRLIST_FUNCTION_NAMES", "REPLACEB") , SC_OPCODE_REPLACEB },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "MIDB") , SC_OPCODE_MIDB },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "TEXT") , SC_OPCODE_TEXT },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "SUBSTITUTE") , SC_OPCODE_SUBSTITUTE },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "SUBSTITUTE") , ocSubSTITUTE },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "REPT") , SC_OPCODE_REPT },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "CONCATENATE") , SC_OPCODE_CONCAT },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "CONCAT") , SC_OPCODE_CONCAT_MS },
@@ -2816,25 +2816,25 @@ const std::pair<TranslateId, int> RID_STRLIST_FUNCTION_NAMES[] =
/* BEGIN defined ERROR.TYPE() values. */
/* ERROR.TYPE( #NULL! ) == 1 */
/* L10n: preserve the leading '#' hash character in translations. */
{ NC_("RID_STRLIST_FUNCTION_NAMES", "#NULL!") , SC_OPCODE_ERROR_NULL },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "#NULL!") , ocErrNull },
/* ERROR.TYPE( #DIV/0! ) == 2 */
/* L10n: preserve the leading '#' hash character in translations. */
{ NC_("RID_STRLIST_FUNCTION_NAMES", "#DIV/0!") , SC_OPCODE_ERROR_DIVZERO },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "#DIV/0!") , ocErrDivZero },
/* ERROR.TYPE( #VALUE! ) == 3 */
/* L10n: preserve the leading '#' hash character in translations. */
{ NC_("RID_STRLIST_FUNCTION_NAMES", "#VALUE!") , SC_OPCODE_ERROR_VALUE },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "#VALUE!") , ocErrValue },
/* ERROR.TYPE( #REF! ) == 4 */
/* L10n: preserve the leading '#' hash character in translations. */
{ NC_("RID_STRLIST_FUNCTION_NAMES", "#REF!") , SC_OPCODE_ERROR_REF },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "#REF!") , ocErrRef },
/* ERROR.TYPE( #NAME! ) == 5 */
/* L10n: preserve the leading '#' hash character in translations. */
{ NC_("RID_STRLIST_FUNCTION_NAMES", "#NAME?") , SC_OPCODE_ERROR_NAME },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "#NAME?") , ocErrName },
/* ERROR.TYPE( #NUM! ) == 6 */
/* L10n: preserve the leading '#' hash character in translations. */
{ NC_("RID_STRLIST_FUNCTION_NAMES", "#NUM!") , SC_OPCODE_ERROR_NUM },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "#NUM!") , ocErrNum },
/* ERROR.TYPE( #N/A ) == 7 */
/* L10n: preserve the leading '#' hash character in translations. */
{ NC_("RID_STRLIST_FUNCTION_NAMES", "#N/A") , SC_OPCODE_ERROR_NA },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "#N/A") , ocErrNA },
/* END defined ERROR.TYPE() values. */
{ NC_("RID_STRLIST_FUNCTION_NAMES", "FILTERXML") , SC_OPCODE_FILTERXML },
@@ -2858,32 +2858,32 @@ const std::pair<TranslateId, int> RID_STRLIST_FUNCTION_NAMES[] =
const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_SYMBOLS[] =
{
{ "(" , SC_OPCODE_OPEN },
{ ")" , SC_OPCODE_CLOSE },
{ "[" , SC_OPCODE_TABLE_REF_OPEN },
{ "]" , SC_OPCODE_TABLE_REF_CLOSE },
{ "{" , SC_OPCODE_ARRAY_OPEN },
{ "}" , SC_OPCODE_ARRAY_CLOSE },
{ "|" , SC_OPCODE_ARRAY_ROW_SEP },
{ ";" , SC_OPCODE_ARRAY_COL_SEP },
{ ";" , SC_OPCODE_SEP },
{ "%" , SC_OPCODE_PERCENT_SIGN },
{ "+" , SC_OPCODE_ADD },
{ "-" , SC_OPCODE_SUB },
{ "*" , SC_OPCODE_MUL },
{ "/" , SC_OPCODE_DIV },
{ "&" , SC_OPCODE_AMPERSAND },
{ "^" , SC_OPCODE_POW },
{ "=" , SC_OPCODE_EQUAL },
{ "<>" , SC_OPCODE_NOT_EQUAL },
{ "<" , SC_OPCODE_LESS },
{ ">" , SC_OPCODE_GREATER },
{ "<=" , SC_OPCODE_LESS_EQUAL },
{ ">=" , SC_OPCODE_GREATER_EQUAL },
{ "!" , SC_OPCODE_INTERSECT },
{ "~" , SC_OPCODE_UNION },
{ ":" , SC_OPCODE_RANGE },
{ "-" , SC_OPCODE_NEG_SUB },
{ "(" , ocOpen },
{ ")" , ocClose },
{ "[" , ocTableRefOpen },
{ "]" , ocTableRefClose },
{ "{" , ocArrayOpen },
{ "}" , ocArrayClose },
{ "|" , ocArrayRowSep },
{ ";" , ocArrayColSep },
{ ";" , ocSep },
{ "%" , ocPercentSign },
{ "+" , ocAdd },
{ "-" , ocSub },
{ "*" , ocMul },
{ "/" , ocDiv },
{ "&" , ocAmpersand },
{ "^" , ocPow },
{ "=" , ocEqual },
{ "<>" , ocNotEqual },
{ "<" , ocLess },
{ ">" , ocGreater },
{ "<=" , ocLessEqual },
{ ">=" , ocGreaterEqual },
{ "!" , ocIntersect },
{ "~" , ocUnion },
{ ":" , ocRange },
{ "-" , ocNegSub },
{ nullptr, -1 }
};
+29 -29
View File
@@ -231,7 +231,7 @@ bool OpCodeList::getOpCodeString( OUString& rStr, sal_uInt16 nOp )
{
switch (nOp)
{
case SC_OPCODE_SEP:
case ocSep:
{
if (meSepType == FormulaCompiler::SeparatorType::SEMICOLON_BASE)
{
@@ -240,7 +240,7 @@ bool OpCodeList::getOpCodeString( OUString& rStr, sal_uInt16 nOp )
}
}
break;
case SC_OPCODE_ARRAY_COL_SEP:
case ocArrayColSep:
{
if (meSepType == FormulaCompiler::SeparatorType::SEMICOLON_BASE)
{
@@ -249,7 +249,7 @@ bool OpCodeList::getOpCodeString( OUString& rStr, sal_uInt16 nOp )
}
}
break;
case SC_OPCODE_ARRAY_ROW_SEP:
case ocArrayRowSep:
{
if (meSepType == FormulaCompiler::SeparatorType::SEMICOLON_BASE)
{
@@ -565,19 +565,19 @@ uno::Sequence< sheet::FormulaOpCodeMapEntry > FormulaCompiler::OpCodeMap::create
if ((nGroups & FormulaMapGroup::SEPARATORS) != 0)
{
static const sal_uInt16 aOpCodes[] = {
SC_OPCODE_OPEN,
SC_OPCODE_CLOSE,
SC_OPCODE_SEP,
ocOpen,
ocClose,
ocSep,
};
lclPushOpCodeMapEntries( aVec, mpTable.get(), aOpCodes, std::size(aOpCodes) );
}
if ((nGroups & FormulaMapGroup::ARRAY_SEPARATORS) != 0)
{
static const sal_uInt16 aOpCodes[] = {
SC_OPCODE_ARRAY_OPEN,
SC_OPCODE_ARRAY_CLOSE,
SC_OPCODE_ARRAY_ROW_SEP,
SC_OPCODE_ARRAY_COL_SEP
ocArrayOpen,
ocArrayClose,
ocArrayRowSep,
ocArrayColSep
};
lclPushOpCodeMapEntries( aVec, mpTable.get(), aOpCodes, std::size(aOpCodes) );
}
@@ -590,21 +590,21 @@ uno::Sequence< sheet::FormulaOpCodeMapEntry > FormulaCompiler::OpCodeMap::create
if ((nGroups & FormulaMapGroup::BINARY_OPERATORS) == 0)
lclPushOpCodeMapEntry( aVec, mpTable.get(), ocAdd );
// regular unary operators
for (sal_uInt16 nOp = SC_OPCODE_START_UN_OP; nOp < SC_OPCODE_STOP_UN_OP && nOp < mnSymbols; ++nOp)
for (sal_uInt16 nOp = ocStartUnaryOp; nOp < ocStopUnaryOp && nOp < mnSymbols; ++nOp)
{
lclPushOpCodeMapEntry( aVec, mpTable.get(), nOp );
}
}
if ((nGroups & FormulaMapGroup::BINARY_OPERATORS) != 0)
{
for (sal_uInt16 nOp = SC_OPCODE_START_BIN_OP; nOp < SC_OPCODE_STOP_BIN_OP && nOp < mnSymbols; ++nOp)
for (sal_uInt16 nOp = ocStartBinOp; nOp < ocStopBinOp && nOp < mnSymbols; ++nOp)
{
switch (nOp)
{
// AND and OR in fact are functions but for legacy reasons
// are sorted into binary operators for compiler interna.
case SC_OPCODE_AND :
case SC_OPCODE_OR :
case ocAnd :
case ocOr :
break; // nothing,
default:
lclPushOpCodeMapEntry( aVec, mpTable.get(), nOp );
@@ -621,13 +621,13 @@ uno::Sequence< sheet::FormulaOpCodeMapEntry > FormulaCompiler::OpCodeMap::create
::std::min< sal_uInt16 >( SC_OPCODE_STOP_1_PAR, mnSymbols ) );
// Additional functions not within range of functions.
static const sal_uInt16 aOpCodes[] = {
SC_OPCODE_IF,
SC_OPCODE_IF_ERROR,
SC_OPCODE_IF_NA,
SC_OPCODE_CHOOSE,
SC_OPCODE_LET,
SC_OPCODE_AND,
SC_OPCODE_OR
ocIf,
ocIfError,
ocIfNA,
ocChoose,
ocLet,
ocAnd,
ocOr
};
lclPushOpCodeMapEntries( aVec, mpTable.get(), aOpCodes, std::size(aOpCodes) );
// functions with 2 or more parameters.
@@ -2194,8 +2194,8 @@ void FormulaCompiler::UnaryLine()
{
if( mpToken->GetOpCode() == ocAdd )
GetToken();
else if (SC_OPCODE_START_UN_OP <= mpToken->GetOpCode() &&
mpToken->GetOpCode() < SC_OPCODE_STOP_UN_OP)
else if (ocStartUnaryOp <= mpToken->GetOpCode() &&
mpToken->GetOpCode() < ocStopUnaryOp)
{
FormulaTokenRef p = mpToken;
NextToken();
@@ -2862,11 +2862,11 @@ OpCode FormulaCompiler::NextToken()
// There must be an operator before a push
if ( (eOp == ocPush || eOp == ocColRowNameAuto) &&
!( (eLastOp == ocOpen) || (eLastOp == ocSep) ||
(SC_OPCODE_START_BIN_OP <= eLastOp && eLastOp < SC_OPCODE_STOP_UN_OP)) )
(ocStartBinOp <= eLastOp && eLastOp < ocStopUnaryOp)) )
SetError( FormulaError::OperatorExpected);
// Operator and Plus => operator
if (eOp == ocAdd && (eLastOp == ocOpen || eLastOp == ocSep ||
(SC_OPCODE_START_BIN_OP <= eLastOp && eLastOp < SC_OPCODE_STOP_UN_OP)))
(ocStartBinOp <= eLastOp && eLastOp < ocStopUnaryOp)))
{
FormulaCompilerRecursionGuard aRecursionGuard( nRecursion );
eOp = NextToken();
@@ -2876,9 +2876,9 @@ OpCode FormulaCompiler::NextToken()
// Before an operator there must not be another operator, with the
// exception of AND and OR.
if ( eOp != ocAnd && eOp != ocOr &&
(SC_OPCODE_START_BIN_OP <= eOp && eOp < SC_OPCODE_STOP_BIN_OP )
(ocStartBinOp <= eOp && eOp < ocStopBinOp )
&& (eLastOp == ocOpen || eLastOp == ocSep ||
(SC_OPCODE_START_BIN_OP <= eLastOp && eLastOp < SC_OPCODE_STOP_UN_OP)))
(ocStartBinOp <= eLastOp && eLastOp < ocStopUnaryOp)))
{
SetError( FormulaError::VariableExpected);
if ( bAutoCorrect && !pStack )
@@ -3121,7 +3121,7 @@ void FormulaCompiler::ForceArrayOperator( FormulaTokenRef const & rCurr )
// below.
rCurr->SetInForceArray( ParamClass::ForceArray);
}
else if (pc >= 2 && SC_OPCODE_START_BIN_OP <= eOp && eOp < SC_OPCODE_STOP_BIN_OP)
else if (pc >= 2 && ocStartBinOp <= eOp && eOp < ocStopBinOp)
{
// Binary operators are not functions followed by arguments
// and need some peeking into RPN to inspect their operands.
@@ -3148,7 +3148,7 @@ void FormulaCompiler::ForceArrayOperator( FormulaTokenRef const & rCurr )
rCurr->SetInForceArray( eArrayReturn);
}
}
else if (pc >= 1 && SC_OPCODE_START_UN_OP <= eOp && eOp < SC_OPCODE_STOP_UN_OP)
else if (pc >= 1 && ocStartUnaryOp <= eOp && eOp < ocStopUnaryOp)
{
// Similar for unary operators.
if (pCode[-1]->GetInForceArray() != ParamClass::Unknown || IsMatrixFunction(pCode[-1]->GetOpCode()))
+6 -6
View File
@@ -88,7 +88,7 @@ bool FormulaToken::IsFunction() const
sal_uInt8 FormulaToken::GetParamCount() const
{
if ( eOp < SC_OPCODE_STOP_DIV && eOp != ocExternal && eOp != ocMacro &&
if ( eOp < ocStopDiv && eOp != ocExternal && eOp != ocMacro &&
!FormulaCompiler::IsOpCodeJumpCommand( eOp ) &&
eOp != ocPercentSign )
return 0; // parameters and specials
@@ -96,9 +96,9 @@ sal_uInt8 FormulaToken::GetParamCount() const
//2do: bool parameter whether FAP or not?
else if (GetByte())
return GetByte(); // all functions, also ocExternal and ocMacro
else if (SC_OPCODE_START_BIN_OP <= eOp && eOp < SC_OPCODE_STOP_BIN_OP && eOp != ocAnd && eOp != ocOr)
else if (ocStartBinOp <= eOp && eOp < ocStopBinOp && eOp != ocAnd && eOp != ocOr)
return 2; // binary operators, compiler checked; OR and AND legacy but are functions
else if ((SC_OPCODE_START_UN_OP <= eOp && eOp < SC_OPCODE_STOP_UN_OP) || eOp == ocPercentSign)
else if ((ocStartUnaryOp <= eOp && eOp < ocStopUnaryOp) || eOp == ocPercentSign)
return 1; // unary operators, compiler checked
else if (SC_OPCODE_START_NO_PAR <= eOp && eOp < SC_OPCODE_STOP_NO_PAR)
return 0; // no parameter
@@ -1624,9 +1624,9 @@ bool FormulaTokenArray::MayReferenceFollow()
if (i > 0 || !isWhitespace( pCode[i]->GetOpCode()))
{
OpCode eOp = pCode[i]->GetOpCode();
if ( (SC_OPCODE_START_BIN_OP <= eOp && eOp < SC_OPCODE_STOP_BIN_OP ) ||
(SC_OPCODE_START_UN_OP <= eOp && eOp < SC_OPCODE_STOP_UN_OP ) ||
eOp == SC_OPCODE_OPEN || eOp == SC_OPCODE_SEP )
if ( (ocStartBinOp <= eOp && eOp < ocStopBinOp ) ||
(ocStartUnaryOp <= eOp && eOp < ocStopUnaryOp ) ||
eOp == ocOpen || eOp == ocSep )
{
return true;
}
+2 -2
View File
@@ -630,8 +630,8 @@ void FormulaDlg_Impl::MakeTree(StructPage* _pTree, weld::TreeIter* pParent, cons
{
_pTree->InsertEntry(aResult, pParent, StructType::Error, 0, _pToken, *xEntry);
}
else if (!((SC_OPCODE_START_BIN_OP <= eOp && eOp < SC_OPCODE_STOP_BIN_OP) ||
(SC_OPCODE_START_UN_OP <= eOp && eOp < SC_OPCODE_STOP_UN_OP)))
else if (!((ocStartBinOp <= eOp && eOp < ocStopBinOp) ||
(ocStartUnaryOp <= eOp && eOp < ocStopUnaryOp)))
{
// Not a binary or unary operator.
bCalcSubformula = true;
+5 -89
View File
@@ -19,89 +19,6 @@
#pragma once
/* Central definition of OpCodes for spreadsheet functions */
/*** Special commands ***/
#define SC_OPCODE_PUSH 0 /* internal commands */
// used to be SC_OPCODE_CALL
#define SC_OPCODE_STOP 2
#define SC_OPCODE_EXTERNAL 3
#define SC_OPCODE_NAME 4
#define SC_OPCODE_EXTERNAL_REF 5
#define SC_OPCODE_IF 6 /* jump commands */
#define SC_OPCODE_IF_ERROR 7
#define SC_OPCODE_IF_NA 8
#define SC_OPCODE_CHOOSE 9
#define SC_OPCODE_OPEN 10 /* parentheses and separators */
#define SC_OPCODE_CLOSE 11
#define SC_OPCODE_SEP 12
#define SC_OPCODE_MISSING 13 /* special OpCodes */
#define SC_OPCODE_BAD 14
#define SC_OPCODE_STRINGXML 15
#define SC_OPCODE_SPACES 16
#define SC_OPCODE_WHITESPACE 17
#define SC_OPCODE_MAT_REF 18
#define SC_OPCODE_DB_AREA 19 /* additional access operators */
#define SC_OPCODE_TABLE_REF 20
#define SC_OPCODE_MACRO 21
#define SC_OPCODE_COL_ROW_NAME 22
#define SC_OPCODE_COL_ROW_NAME_AUTO 23
#define SC_OPCODE_PERCENT_SIGN 24 /* operator _follows_ value */
#define SC_OPCODE_ARRAY_OPEN 25
#define SC_OPCODE_ARRAY_CLOSE 26
#define SC_OPCODE_ARRAY_ROW_SEP 27
#define SC_OPCODE_ARRAY_COL_SEP 28 /* some convs use sep != col_sep */
#define SC_OPCODE_TABLE_REF_OPEN 29
#define SC_OPCODE_TABLE_REF_CLOSE 30
#define SC_OPCODE_TABLE_REF_ITEM_ALL 31
#define SC_OPCODE_TABLE_REF_ITEM_HEADERS 32
#define SC_OPCODE_TABLE_REF_ITEM_DATA 33
#define SC_OPCODE_TABLE_REF_ITEM_TOTALS 34
#define SC_OPCODE_TABLE_REF_ITEM_THIS_ROW 35
#define SC_OPCODE_STOP_DIV 36
#define SC_OPCODE_SKIP 37 /* used to skip raw tokens during string compilation */
#define SC_OPCODE_STRINGNAME 38 /* special OpCode for lambda function names */
#define SC_OPCODE_LET 39
/*** error constants #... ***/
#define SC_OPCODE_START_ERRORS 40
#define SC_OPCODE_ERROR_NULL 40
#define SC_OPCODE_ERROR_DIVZERO 41
#define SC_OPCODE_ERROR_VALUE 42
#define SC_OPCODE_ERROR_REF 43
#define SC_OPCODE_ERROR_NAME 44
#define SC_OPCODE_ERROR_NUM 45
#define SC_OPCODE_ERROR_NA 46
#define SC_OPCODE_STOP_ERRORS 47
/*** Binary operators ***/
#define SC_OPCODE_START_BIN_OP 50
#define SC_OPCODE_ADD 50
#define SC_OPCODE_SUB 51
#define SC_OPCODE_MUL 52
#define SC_OPCODE_DIV 53
#define SC_OPCODE_AMPERSAND 54
#define SC_OPCODE_POW 55
#define SC_OPCODE_EQUAL 56
#define SC_OPCODE_NOT_EQUAL 57
#define SC_OPCODE_LESS 58
#define SC_OPCODE_GREATER 59
#define SC_OPCODE_LESS_EQUAL 60
#define SC_OPCODE_GREATER_EQUAL 61
#define SC_OPCODE_AND 62
#define SC_OPCODE_OR 63
#define SC_OPCODE_INTERSECT 64
#define SC_OPCODE_UNION 65
#define SC_OPCODE_RANGE 66
#define SC_OPCODE_STOP_BIN_OP 67
/* NOTE: binary and unary operators must be in sequence for compiler! */
/*** Unary operators ***/
#define SC_OPCODE_START_UN_OP 70
#define SC_OPCODE_NEG_SUB 70
#define SC_OPCODE_STOP_UN_OP 71
#define SC_OPCODE_START_FUNCTION 75
/*** Functions without parameters ***/
@@ -220,7 +137,7 @@
#define SC_OPCODE_ROUND_DOWN 206
#define SC_OPCODE_TRUNC 207
#define SC_OPCODE_LOG 208
#define SC_OPCODE_POWER 209
#define ocPowER 209
#define SC_OPCODE_GCD 210
#define SC_OPCODE_LCM 211
#define SC_OPCODE_MOD 212
@@ -277,7 +194,7 @@
#define SC_OPCODE_CUM_PRINC 263
#define SC_OPCODE_EFFECT 264
#define SC_OPCODE_NOMINAL 265
#define SC_OPCODE_SUB_TOTAL 266
#define ocSub_TOTAL 266
#define SC_OPCODE_DB_SUM 267 /* database functions */
#define SC_OPCODE_DB_COUNT 268
#define SC_OPCODE_DB_COUNT_2 269
@@ -291,7 +208,7 @@
#define SC_OPCODE_DB_VAR 277
#define SC_OPCODE_DB_VAR_P 278
#define SC_OPCODE_INDIRECT 279 /* management functions */
#define SC_OPCODE_ADDRESS 280
#define ocAddRESS 280
#define SC_OPCODE_MATCH 281
#define SC_OPCODE_COUNT_EMPTY_CELLS 282
#define SC_OPCODE_COUNT_IF 283
@@ -299,7 +216,7 @@
#define SC_OPCODE_LOOKUP 285
#define SC_OPCODE_V_LOOKUP 286
#define SC_OPCODE_H_LOOKUP 287
#define SC_OPCODE_MULTI_AREA 288
#define ocMulTI_AREA 288
#define SC_OPCODE_OFFSET 289
#define SC_OPCODE_INDEX 290
#define SC_OPCODE_AREAS 291
@@ -313,7 +230,7 @@
#define SC_OPCODE_SEARCH 299
#define SC_OPCODE_MID 300
#define SC_OPCODE_TEXT 301
#define SC_OPCODE_SUBSTITUTE 302
#define ocSubSTITUTE 302
#define SC_OPCODE_REPT 303
#define SC_OPCODE_CONCAT 304
#define SC_OPCODE_MAT_VALUE 305 /* matrix functions */
@@ -412,7 +329,6 @@
#define SC_OPCODE_BITRSHIFT 398
#define SC_OPCODE_BITLSHIFT 399
#define SC_OPCODE_GET_DATEDIF 400
#define SC_OPCODE_XOR 401
#define SC_OPCODE_AVERAGE_IF 402
#define SC_OPCODE_SUM_IFS 403
#define SC_OPCODE_AVERAGE_IFS 404
+80 -68
View File
@@ -24,80 +24,90 @@
#include <formula/compiler.hxx>
#include <sal/types.h>
/* Central definition of OpCodes for spreadsheet functions */
enum OpCode : sal_uInt16
{
// Special commands
ocPush = SC_OPCODE_PUSH,
ocStop = SC_OPCODE_STOP,
ocExternal = SC_OPCODE_EXTERNAL,
ocName = SC_OPCODE_NAME,
ocPush = 0,
// 1 used to be ocCall
ocStop = 2,
ocExternal = 3,
ocName = 4,
// 5 is externalRef
// Jump commands
ocIf = SC_OPCODE_IF,
ocIfError = SC_OPCODE_IF_ERROR,
ocIfNA = SC_OPCODE_IF_NA,
ocChoose = SC_OPCODE_CHOOSE,
ocLet = SC_OPCODE_LET,
ocIf = 6,
ocIfError = 7,
ocIfNA = 8,
ocChoose = 9,
ocLet = 39,
// Parentheses and separators
ocOpen = SC_OPCODE_OPEN,
ocClose = SC_OPCODE_CLOSE,
ocTableRefOpen = SC_OPCODE_TABLE_REF_OPEN,
ocTableRefClose = SC_OPCODE_TABLE_REF_CLOSE,
ocSep = SC_OPCODE_SEP,
ocArrayOpen = SC_OPCODE_ARRAY_OPEN,
ocArrayClose = SC_OPCODE_ARRAY_CLOSE,
ocArrayRowSep = SC_OPCODE_ARRAY_ROW_SEP,
ocArrayColSep = SC_OPCODE_ARRAY_COL_SEP,
ocOpen = 10,
ocClose = 11,
ocTableRefOpen = 29,
ocTableRefClose = 30,
ocSep = 12,
ocArrayOpen = 25,
ocArrayClose = 26,
ocArrayRowSep = 27,
ocArrayColSep = 28, /* some convs use sep != col_sep */
// Special OpCodes
ocMissing = SC_OPCODE_MISSING,
ocBad = SC_OPCODE_BAD,
ocStringXML = SC_OPCODE_STRINGXML,
ocSpaces = SC_OPCODE_SPACES,
ocWhitespace = SC_OPCODE_WHITESPACE,
ocMatRef = SC_OPCODE_MAT_REF,
ocTableRefItemAll = SC_OPCODE_TABLE_REF_ITEM_ALL,
ocTableRefItemHeaders = SC_OPCODE_TABLE_REF_ITEM_HEADERS,
ocTableRefItemData = SC_OPCODE_TABLE_REF_ITEM_DATA,
ocTableRefItemTotals = SC_OPCODE_TABLE_REF_ITEM_TOTALS,
ocTableRefItemThisRow = SC_OPCODE_TABLE_REF_ITEM_THIS_ROW,
ocSkip = SC_OPCODE_SKIP,
ocStringName = SC_OPCODE_STRINGNAME,
ocMissing = 13,
ocBad = 14,
ocStringXML = 15,
ocSpaces = 16,
ocWhitespace = 17,
ocMatRef = 18,
ocTableRefItemAll = 31,
ocTableRefItemHeaders = 32,
ocTableRefItemData = 33,
ocTableRefItemTotals = 34,
ocTableRefItemThisRow = 35,
ocStopDiv = 36,
ocSkip = 37, /* used to skip raw tokens during string compilation */
ocStringName = 38, /* special OpCode for lambda function names */
// Access commands
ocDBArea = SC_OPCODE_DB_AREA,
ocTableRef = SC_OPCODE_TABLE_REF,
ocMacro = SC_OPCODE_MACRO,
ocColRowName = SC_OPCODE_COL_ROW_NAME,
ocColRowNameAuto = SC_OPCODE_COL_ROW_NAME_AUTO,
ocDBArea = 19,
ocTableRef = 20,
ocMacro = 21,
ocColRowName = 22,
ocColRowNameAuto = 23,
// Percent operator _follows_ value
ocPercentSign = SC_OPCODE_PERCENT_SIGN,
ocPercentSign = 24,
// Error constants
ocErrNull = SC_OPCODE_ERROR_NULL,
ocErrDivZero = SC_OPCODE_ERROR_DIVZERO,
ocErrValue = SC_OPCODE_ERROR_VALUE,
ocErrRef = SC_OPCODE_ERROR_REF,
ocErrName = SC_OPCODE_ERROR_NAME,
ocErrNum = SC_OPCODE_ERROR_NUM,
ocErrNA = SC_OPCODE_ERROR_NA,
ocErrNull = 40,
ocErrDivZero = 41,
ocErrValue = 42,
ocErrRef = 43,
ocErrName = 44,
ocErrNum = 45,
ocErrNA = 46,
/* NOTE: binary and unary operators must be in sequence for compiler! */
// Binary operators
ocAdd = SC_OPCODE_ADD,
ocSub = SC_OPCODE_SUB,
ocMul = SC_OPCODE_MUL,
ocDiv = SC_OPCODE_DIV,
ocAmpersand = SC_OPCODE_AMPERSAND,
ocPow = SC_OPCODE_POW,
ocEqual = SC_OPCODE_EQUAL,
ocNotEqual = SC_OPCODE_NOT_EQUAL,
ocLess = SC_OPCODE_LESS,
ocGreater = SC_OPCODE_GREATER,
ocLessEqual = SC_OPCODE_LESS_EQUAL,
ocGreaterEqual = SC_OPCODE_GREATER_EQUAL,
ocAnd = SC_OPCODE_AND,
ocOr = SC_OPCODE_OR,
ocXor = SC_OPCODE_XOR,
ocIntersect = SC_OPCODE_INTERSECT,
ocUnion = SC_OPCODE_UNION,
ocRange = SC_OPCODE_RANGE,
ocStartBinOp = 50,
ocAdd = 50,
ocSub = 51,
ocMul = 52,
ocDiv = 53,
ocAmpersand = 54,
ocPow = 55,
ocEqual = 56,
ocNotEqual = 57,
ocLess = 58,
ocGreater = 59,
ocLessEqual = 60,
ocGreaterEqual = 61,
ocAnd = 62,
ocOr = 63,
ocXor = 401,
ocIntersect = 64,
ocUnion = 65,
ocRange = 66,
ocStopBinOp = 67,
// Unary operators
ocNegSub = SC_OPCODE_NEG_SUB,
ocStartUnaryOp = 70,
ocNegSub = 70,
ocStopUnaryOp = 71,
// Functions with no parameters
ocPi = SC_OPCODE_PI,
ocRandom = SC_OPCODE_RANDOM,
@@ -214,7 +224,7 @@ enum OpCode : sal_uInt16
ocRoundDown = SC_OPCODE_ROUND_DOWN,
ocTrunc = SC_OPCODE_TRUNC,
ocLog = SC_OPCODE_LOG,
ocPower = SC_OPCODE_POWER,
ocPower = ocPowER,
ocGCD = SC_OPCODE_GCD,
ocLCM = SC_OPCODE_LCM,
ocMod = SC_OPCODE_MOD,
@@ -283,7 +293,7 @@ enum OpCode : sal_uInt16
ocCumPrinc = SC_OPCODE_CUM_PRINC,
ocEffect = SC_OPCODE_EFFECT,
ocNominal = SC_OPCODE_NOMINAL,
ocSubTotal = SC_OPCODE_SUB_TOTAL,
ocSubTotal = ocSub_TOTAL,
ocRawSubtract = SC_OPCODE_RAWSUBTRACT,
ocIfs_MS = SC_OPCODE_IFS_MS,
ocSwitch_MS = SC_OPCODE_SWITCH_MS,
@@ -305,7 +315,7 @@ enum OpCode : sal_uInt16
ocDBVarP = SC_OPCODE_DB_VAR_P,
// Management functions
ocIndirect = SC_OPCODE_INDIRECT,
ocAddress = SC_OPCODE_ADDRESS,
ocAddress = ocAddRESS,
ocMatch = SC_OPCODE_MATCH,
ocXMatch = SC_OPCODE_X_MATCH,
ocCountEmptyCells = SC_OPCODE_COUNT_EMPTY_CELLS,
@@ -319,7 +329,7 @@ enum OpCode : sal_uInt16
ocVLookup = SC_OPCODE_V_LOOKUP,
ocXLookup = SC_OPCODE_X_LOOKUP,
ocHLookup = SC_OPCODE_H_LOOKUP,
ocMultiArea = SC_OPCODE_MULTI_AREA,
ocMultiArea = ocMulTI_AREA,
ocOffset = SC_OPCODE_OFFSET,
ocIndex = SC_OPCODE_INDEX,
ocAreas = SC_OPCODE_AREAS,
@@ -334,7 +344,7 @@ enum OpCode : sal_uInt16
ocSearch = SC_OPCODE_SEARCH,
ocMid = SC_OPCODE_MID,
ocText = SC_OPCODE_TEXT,
ocSubstitute = SC_OPCODE_SUBSTITUTE,
ocSubstitute = ocSubSTITUTE,
ocRept = SC_OPCODE_REPT,
ocConcat = SC_OPCODE_CONCAT,
ocConcat_MS = SC_OPCODE_CONCAT_MS,
@@ -575,6 +585,7 @@ inline std::string OpCodeEnumToString(OpCode eCode)
case ocTableRefItemData: return "TableRefItemData";
case ocTableRefItemTotals: return "TableRefItemTotals";
case ocTableRefItemThisRow: return "TableRefItemThisRow";
case ocStopDiv: return "StopDiv";
case ocSkip: return "Skip";
case ocDBArea: return "DBArea";
case ocTableRef: return "TableRef";
@@ -1029,6 +1040,7 @@ inline std::string OpCodeEnumToString(OpCode eCode)
case ocDebugVar: return "DebugVar";
case ocDataToken1: return "DataToken1";
case ocNone: return "None";
default: break;
}
std::ostringstream os;
os << static_cast<int>(eCode);
+46 -46
View File
@@ -898,27 +898,27 @@ const TranslateId SC_OPCODE_IF_NA_ARY[] =
};
// -=*# Resource for function OR #*=-
const TranslateId SC_OPCODE_OR_ARY[] =
const TranslateId ocOr_ARY[] =
{
NC_("SC_OPCODE_OR", "Returns TRUE if an argument is TRUE."),
NC_("SC_OPCODE_OR", "Logical value "),
NC_("SC_OPCODE_OR", "Logical value 1, logical value 2,... are conditions to be tested and which return either TRUE or FALSE.")
NC_("ocOr", "Returns TRUE if an argument is TRUE."),
NC_("ocOr", "Logical value "),
NC_("ocOr", "Logical value 1, logical value 2,... are conditions to be tested and which return either TRUE or FALSE.")
};
// -=*# Resource for function XOR #*=-
const TranslateId SC_OPCODE_XOR_ARY[] =
const TranslateId ocXor_ARY[] =
{
NC_("SC_OPCODE_XOR", "Returns TRUE if an odd number of arguments evaluates to TRUE."),
NC_("SC_OPCODE_XOR", "Logical value "),
NC_("SC_OPCODE_XOR", "Logical value 1, logical value 2, ... are conditions to be tested and which return either TRUE or FALSE.")
NC_("ocXor", "Returns TRUE if an odd number of arguments evaluates to TRUE."),
NC_("ocXor", "Logical value "),
NC_("ocXor", "Logical value 1, logical value 2, ... are conditions to be tested and which return either TRUE or FALSE.")
};
// -=*# Resource for function AND #*=-
const TranslateId SC_OPCODE_AND_ARY[] =
const TranslateId ocAnd_ARY[] =
{
NC_("SC_OPCODE_AND", "Returns TRUE if all arguments are TRUE."),
NC_("SC_OPCODE_AND", "Logical value "),
NC_("SC_OPCODE_AND", "Logical value 1, logical value 2;...are conditions to be tested and each returns either TRUE or FALSE.")
NC_("ocAnd", "Returns TRUE if all arguments are TRUE."),
NC_("ocAnd", "Logical value "),
NC_("ocAnd", "Logical value 1, logical value 2;...are conditions to be tested and each returns either TRUE or FALSE.")
};
// -=*# Resource for function ABS #*=-
@@ -930,13 +930,13 @@ const TranslateId SC_OPCODE_ABS_ARY[] =
};
// -=*# Resource for function POWER #*=-
const TranslateId SC_OPCODE_POWER_ARY[] =
const TranslateId ocPowER_ARY[] =
{
NC_("SC_OPCODE_POWER", "Returns a^b, base a raised to the power of exponent b."),
NC_("SC_OPCODE_POWER", "Base"),
NC_("SC_OPCODE_POWER", "The base a of the power a^b."),
NC_("SC_OPCODE_POWER", "Exponent"),
NC_("SC_OPCODE_POWER", "The exponent b of the power a^b.")
NC_("ocPowER", "Returns a^b, base a raised to the power of exponent b."),
NC_("ocPowER", "Base"),
NC_("ocPowER", "The base a of the power a^b."),
NC_("ocPowER", "Exponent"),
NC_("ocPowER", "The exponent b of the power a^b.")
};
// -=*# Resource for function COUNTBLANK #*=-
@@ -1341,13 +1341,13 @@ const TranslateId SC_OPCODE_PLUS_MINUS_ARY[] =
};
// -=*# Resource for function SUBTOTAL #*=-
const TranslateId SC_OPCODE_SUB_TOTAL_ARY[] =
const TranslateId ocSub_TOTAL_ARY[] =
{
NC_("SC_OPCODE_SUB_TOTAL", "Calculates subtotals in a spreadsheet."),
NC_("SC_OPCODE_SUB_TOTAL", "Function"),
NC_("SC_OPCODE_SUB_TOTAL", "Function index. Is an index of the possible functions Total, Max, ..."),
NC_("SC_OPCODE_SUB_TOTAL", "Range"),
NC_("SC_OPCODE_SUB_TOTAL", "The cells of the range which are to be taken into account.")
NC_("ocSub_TOTAL", "Calculates subtotals in a spreadsheet."),
NC_("ocSub_TOTAL", "Function"),
NC_("ocSub_TOTAL", "Function index. Is an index of the possible functions Total, Max, ..."),
NC_("ocSub_TOTAL", "Range"),
NC_("ocSub_TOTAL", "The cells of the range which are to be taken into account.")
};
// -=*# Resource for function AGGREGATE #*=-
@@ -3268,19 +3268,19 @@ const TranslateId SC_OPCODE_FORECAST_LIN_ARY[] =
};
// -=*# Resource for function ADDRESS #*=-
const TranslateId SC_OPCODE_ADDRESS_ARY[] =
const TranslateId ocAddRESS_ARY[] =
{
NC_("SC_OPCODE_ADDRESS", "Returns the reference to a cell as text."),
NC_("SC_OPCODE_ADDRESS", "Row"),
NC_("SC_OPCODE_ADDRESS", "The row number of the cell."),
NC_("SC_OPCODE_ADDRESS", "Column"),
NC_("SC_OPCODE_ADDRESS", "The column number of the cell."),
NC_("SC_OPCODE_ADDRESS", "ABS"),
NC_("SC_OPCODE_ADDRESS", "Specifies whether absolute or relative referencing is to be used."),
NC_("SC_OPCODE_ADDRESS", "A1"),
NC_("SC_OPCODE_ADDRESS", "The reference style: 0 or FALSE means R1C1 style, any other value or omitted means A1 style."),
NC_("SC_OPCODE_ADDRESS", "Sheet"),
NC_("SC_OPCODE_ADDRESS", "The spreadsheet name of the cell reference.")
NC_("ocAddRESS", "Returns the reference to a cell as text."),
NC_("ocAddRESS", "Row"),
NC_("ocAddRESS", "The row number of the cell."),
NC_("ocAddRESS", "Column"),
NC_("ocAddRESS", "The column number of the cell."),
NC_("ocAddRESS", "ABS"),
NC_("ocAddRESS", "Specifies whether absolute or relative referencing is to be used."),
NC_("ocAddRESS", "A1"),
NC_("ocAddRESS", "The reference style: 0 or FALSE means R1C1 style, any other value or omitted means A1 style."),
NC_("ocAddRESS", "Sheet"),
NC_("ocAddRESS", "The spreadsheet name of the cell reference.")
};
// -=*# Resource for function AREAS #*=-
@@ -3836,17 +3836,17 @@ const TranslateId SC_OPCODE_REPT_ARY[] =
};
// -=*# Resource for function SUBSTITUTE #*=-
const TranslateId SC_OPCODE_SUBSTITUTE_ARY[] =
const TranslateId ocSubSTITUTE_ARY[] =
{
NC_("SC_OPCODE_SUBSTITUTE", "Substitutes new text for old text in a string."),
NC_("SC_OPCODE_SUBSTITUTE", "Text"),
NC_("SC_OPCODE_SUBSTITUTE", "The text in which partial words are to be replaced."),
NC_("SC_OPCODE_SUBSTITUTE", "Search text"),
NC_("SC_OPCODE_SUBSTITUTE", "The partial string to be (repeatedly) replaced."),
NC_("SC_OPCODE_SUBSTITUTE", "New text"),
NC_("SC_OPCODE_SUBSTITUTE", "The text which is to replace the text string."),
NC_("SC_OPCODE_SUBSTITUTE", "Occurrence"),
NC_("SC_OPCODE_SUBSTITUTE", "Which occurrence of the old text is to be replaced.")
NC_("ocSubSTITUTE", "Substitutes new text for old text in a string."),
NC_("ocSubSTITUTE", "Text"),
NC_("ocSubSTITUTE", "The text in which partial words are to be replaced."),
NC_("ocSubSTITUTE", "Search text"),
NC_("ocSubSTITUTE", "The partial string to be (repeatedly) replaced."),
NC_("ocSubSTITUTE", "New text"),
NC_("ocSubSTITUTE", "The text which is to replace the text string."),
NC_("ocSubSTITUTE", "Occurrence"),
NC_("ocSubSTITUTE", "Which occurrence of the old text is to be replaced.")
};
// -=*# Resource for function REGEX #*=-
+12 -12
View File
@@ -390,13 +390,13 @@ ScFunctionList::ScFunctionList( bool bEnglishFunctionNames )
// which will concept check that the list is sorted on first use to ensure this holds
static const ScFuncDescCore aDescs[] =
{
{ SC_OPCODE_IF, ENTRY(SC_OPCODE_IF_ARY), 0, ID_FUNCTION_GRP_LOGIC, HID_FUNC_WENN, 3, { 0, 1, 1 }, 0 },
{ SC_OPCODE_IF_ERROR, ENTRY(SC_OPCODE_IF_ERROR_ARY), 0, ID_FUNCTION_GRP_LOGIC, HID_FUNC_IFERROR, 2, { 0, 0 }, 0 },
{ SC_OPCODE_IF_NA, ENTRY(SC_OPCODE_IF_NA_ARY), 0, ID_FUNCTION_GRP_LOGIC, HID_FUNC_IFNA, 2, { 0, 0 }, 0 },
{ SC_OPCODE_CHOOSE, ENTRY(SC_OPCODE_CHOOSE_ARY), 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_WAHL, VAR_ARGS+1, { 0, 0 }, 31 },
{ SC_OPCODE_LET, ENTRY(SC_OPCODE_LET_ARY), 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_LET_MS, PAIRED_VAR_ARGS + 1, { 0, 0, 0 }, 0 },
{ SC_OPCODE_AND, ENTRY(SC_OPCODE_AND_ARY), 0, ID_FUNCTION_GRP_LOGIC, HID_FUNC_UND, VAR_ARGS, { 0 }, 0 },
{ SC_OPCODE_OR, ENTRY(SC_OPCODE_OR_ARY), 0, ID_FUNCTION_GRP_LOGIC, HID_FUNC_ODER, VAR_ARGS, { 0 }, 0 },
{ ocIf, ENTRY(SC_OPCODE_IF_ARY), 0, ID_FUNCTION_GRP_LOGIC, HID_FUNC_WENN, 3, { 0, 1, 1 }, 0 },
{ ocIfError, ENTRY(SC_OPCODE_IF_ERROR_ARY), 0, ID_FUNCTION_GRP_LOGIC, HID_FUNC_IFERROR, 2, { 0, 0 }, 0 },
{ ocIfNA, ENTRY(SC_OPCODE_IF_NA_ARY), 0, ID_FUNCTION_GRP_LOGIC, HID_FUNC_IFNA, 2, { 0, 0 }, 0 },
{ ocChoose, ENTRY(SC_OPCODE_CHOOSE_ARY), 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_WAHL, VAR_ARGS+1, { 0, 0 }, 31 },
{ ocLet, ENTRY(SC_OPCODE_LET_ARY), 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_LET_MS, PAIRED_VAR_ARGS + 1, { 0, 0, 0 }, 0 },
{ ocAnd, ENTRY(ocAnd_ARY), 0, ID_FUNCTION_GRP_LOGIC, HID_FUNC_UND, VAR_ARGS, { 0 }, 0 },
{ ocOr, ENTRY(ocOr_ARY), 0, ID_FUNCTION_GRP_LOGIC, HID_FUNC_ODER, VAR_ARGS, { 0 }, 0 },
{ SC_OPCODE_PI, ENTRY(SC_OPCODE_PI_ARY), 0, ID_FUNCTION_GRP_MATH, HID_FUNC_PI, 0, { }, 0 },
{ SC_OPCODE_RANDOM, ENTRY(SC_OPCODE_RANDOM_ARY), 0, ID_FUNCTION_GRP_MATH, HID_FUNC_ZUFALLSZAHL, 0, { }, 0 },
{ SC_OPCODE_TRUE, ENTRY(SC_OPCODE_TRUE_ARY), 0, ID_FUNCTION_GRP_LOGIC, HID_FUNC_WAHR, 0, { }, 0 },
@@ -502,7 +502,7 @@ ScFunctionList::ScFunctionList( bool bEnglishFunctionNames )
{ SC_OPCODE_ROUND_DOWN, ENTRY(SC_OPCODE_ROUND_DOWN_ARY), 0, ID_FUNCTION_GRP_MATH, HID_FUNC_ABRUNDEN, 2, { 0, 1 }, 0 },
{ SC_OPCODE_TRUNC, ENTRY(SC_OPCODE_TRUNC_ARY), 0, ID_FUNCTION_GRP_MATH, HID_FUNC_KUERZEN, 2, { 0, 0 }, 0 },
{ SC_OPCODE_LOG, ENTRY(SC_OPCODE_LOG_ARY), 0, ID_FUNCTION_GRP_MATH, HID_FUNC_LOG, 2, { 0, 1 }, 0 },
{ SC_OPCODE_POWER, ENTRY(SC_OPCODE_POWER_ARY), 0, ID_FUNCTION_GRP_MATH, HID_FUNC_POTENZ, 2, { 0, 0 }, 0 },
{ ocPowER, ENTRY(ocPowER_ARY), 0, ID_FUNCTION_GRP_MATH, HID_FUNC_POTENZ, 2, { 0, 0 }, 0 },
{ SC_OPCODE_GCD, ENTRY(SC_OPCODE_GCD_ARY), 0, ID_FUNCTION_GRP_MATH, HID_FUNC_GGT, VAR_ARGS, { 0 }, 0 },
{ SC_OPCODE_LCM, ENTRY(SC_OPCODE_LCM_ARY), 0, ID_FUNCTION_GRP_MATH, HID_FUNC_KGV, VAR_ARGS, { 0 }, 0 },
{ SC_OPCODE_MOD, ENTRY(SC_OPCODE_MOD_ARY), 0, ID_FUNCTION_GRP_MATH, HID_FUNC_REST, 2, { 0, 0 }, 0 },
@@ -559,7 +559,7 @@ ScFunctionList::ScFunctionList( bool bEnglishFunctionNames )
{ SC_OPCODE_CUM_PRINC, ENTRY(SC_OPCODE_CUM_PRINC_ARY), 0, ID_FUNCTION_GRP_FINANCIAL, HID_FUNC_KUMKAPITAL, 6, { 0, 0, 0, 0, 0, 0 }, 0 },
{ SC_OPCODE_EFFECT, ENTRY(SC_OPCODE_EFFECT_ARY), 0, ID_FUNCTION_GRP_FINANCIAL, HID_FUNC_EFFEKTIV, 2, { 0, 0 }, 0 },
{ SC_OPCODE_NOMINAL, ENTRY(SC_OPCODE_NOMINAL_ARY), 0, ID_FUNCTION_GRP_FINANCIAL, HID_FUNC_NOMINAL, 2, { 0, 0 }, 0 },
{ SC_OPCODE_SUB_TOTAL, ENTRY(SC_OPCODE_SUB_TOTAL_ARY), 0, ID_FUNCTION_GRP_MATH, HID_FUNC_TEILERGEBNIS, 2, { 0, 0 }, 0 },
{ ocSub_TOTAL, ENTRY(ocSub_TOTAL_ARY), 0, ID_FUNCTION_GRP_MATH, HID_FUNC_TEILERGEBNIS, 2, { 0, 0 }, 0 },
{ SC_OPCODE_DB_SUM, ENTRY(SC_OPCODE_DB_SUM_ARY), 0, ID_FUNCTION_GRP_DATABASE, HID_FUNC_DBSUMME, 3, { 0, 0, 0 }, 0 },
{ SC_OPCODE_DB_COUNT, ENTRY(SC_OPCODE_DB_COUNT_ARY), 0, ID_FUNCTION_GRP_DATABASE, HID_FUNC_DBANZAHL, 3, { 0, 1, 0 }, 0 },
{ SC_OPCODE_DB_COUNT_2, ENTRY(SC_OPCODE_DB_COUNT_2_ARY), 0, ID_FUNCTION_GRP_DATABASE, HID_FUNC_DBANZAHL2, 3, { 0, 1, 0 }, 0 },
@@ -573,7 +573,7 @@ ScFunctionList::ScFunctionList( bool bEnglishFunctionNames )
{ SC_OPCODE_DB_VAR, ENTRY(SC_OPCODE_DB_VAR_ARY), 0, ID_FUNCTION_GRP_DATABASE, HID_FUNC_DBVARIANZ, 3, { 0, 0, 0 }, 0 },
{ SC_OPCODE_DB_VAR_P, ENTRY(SC_OPCODE_DB_VAR_P_ARY), 0, ID_FUNCTION_GRP_DATABASE, HID_FUNC_DBVARIANZEN, 3, { 0, 0, 0 }, 0 },
{ SC_OPCODE_INDIRECT, ENTRY(SC_OPCODE_INDIRECT_ARY), 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_INDIREKT, 2, { 0, 1 }, 0 },
{ SC_OPCODE_ADDRESS, ENTRY(SC_OPCODE_ADDRESS_ARY), 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_ADRESSE, 5, { 0, 0, 1, 1, 1 }, 0 },
{ ocAddRESS, ENTRY(ocAddRESS_ARY), 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_ADRESSE, 5, { 0, 0, 1, 1, 1 }, 0 },
{ SC_OPCODE_MATCH, ENTRY(SC_OPCODE_MATCH_ARY), 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_VERGLEICH, 3, { 0, 0, 1 }, 0 },
{ SC_OPCODE_COUNT_EMPTY_CELLS, ENTRY(SC_OPCODE_COUNT_EMPTY_CELLS_ARY), 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_ANZAHLLEEREZELLEN, 1, { 0 }, 0 },
{ SC_OPCODE_COUNT_IF, ENTRY(SC_OPCODE_COUNT_IF_ARY), 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_ZAEHLENWENN, 2, { 0, 0 }, 0 },
@@ -594,7 +594,7 @@ ScFunctionList::ScFunctionList( bool bEnglishFunctionNames )
{ SC_OPCODE_SEARCH, ENTRY(SC_OPCODE_SEARCH_ARY), 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_SUCHEN, 3, { 0, 0, 1 }, 0 },
{ SC_OPCODE_MID, ENTRY(SC_OPCODE_MID_ARY), 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_TEIL, 3, { 0, 0, 0 }, 0 },
{ SC_OPCODE_TEXT, ENTRY(SC_OPCODE_TEXT_ARY), 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_TEXT, 2, { 0, 0 }, 0 },
{ SC_OPCODE_SUBSTITUTE, ENTRY(SC_OPCODE_SUBSTITUTE_ARY), 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_WECHSELN, 4, { 0, 0, 0, 1 }, 0 },
{ ocSubSTITUTE, ENTRY(ocSubSTITUTE_ARY), 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_WECHSELN, 4, { 0, 0, 0, 1 }, 0 },
{ SC_OPCODE_REPT, ENTRY(SC_OPCODE_REPT_ARY), 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_WIEDERHOLEN, 2, { 0, 0 }, 0 },
{ SC_OPCODE_CONCAT, ENTRY(SC_OPCODE_CONCAT_ARY), 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_VERKETTEN, VAR_ARGS, { 0 }, 0 },
{ SC_OPCODE_MAT_DET, ENTRY(SC_OPCODE_MAT_DET_ARY), 0, ID_FUNCTION_GRP_MATRIX, HID_FUNC_MDET, 1, { 0 }, 0 },
@@ -689,7 +689,7 @@ ScFunctionList::ScFunctionList( bool bEnglishFunctionNames )
{ SC_OPCODE_BITRSHIFT, ENTRY(SC_OPCODE_BITRSHIFT_ARY), 0, ID_FUNCTION_GRP_MATH, HID_FUNC_BITRSHIFT, 2, { 0, 0 }, 0 },
{ SC_OPCODE_BITLSHIFT, ENTRY(SC_OPCODE_BITLSHIFT_ARY), 0, ID_FUNCTION_GRP_MATH, HID_FUNC_BITLSHIFT, 2, { 0, 0 }, 0 },
{ SC_OPCODE_GET_DATEDIF, ENTRY(SC_OPCODE_GET_DATEDIF_ARY), 0, ID_FUNCTION_GRP_DATETIME, HID_FUNC_DATEDIF, 3, { 0, 0, 0 }, 0 },
{ SC_OPCODE_XOR, ENTRY(SC_OPCODE_XOR_ARY), 0, ID_FUNCTION_GRP_LOGIC, HID_FUNC_XOR, VAR_ARGS, { 0 }, 0 },
{ ocXor, ENTRY(ocXor_ARY), 0, ID_FUNCTION_GRP_LOGIC, HID_FUNC_XOR, VAR_ARGS, { 0 }, 0 },
{ SC_OPCODE_AVERAGE_IF, ENTRY(SC_OPCODE_AVERAGE_IF_ARY), 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_AVERAGEIF, 3, { 0, 0, 1 }, 0 },
{ SC_OPCODE_SUM_IFS, ENTRY(SC_OPCODE_SUM_IFS_ARY), 0, ID_FUNCTION_GRP_MATH, HID_FUNC_SUMIFS, PAIRED_VAR_ARGS+1, { 0, 0, 0 }, 0 },
{ SC_OPCODE_AVERAGE_IFS, ENTRY(SC_OPCODE_AVERAGE_IFS_ARY), 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_AVERAGEIFS, PAIRED_VAR_ARGS+1, { 0, 0, 0 }, 0 },
+2 -1
View File
@@ -23,6 +23,7 @@
#include <global.hxx>
#include <userlist.hxx>
#include <formula/compiler.hxx>
#include <formula/opcode.hxx>
#include <miscuno.hxx>
#include <vector>
#include <osl/diagnose.h>
@@ -66,7 +67,7 @@ void ScAppOptions::SetDefaults()
pLRUList[1] = SC_OPCODE_AVERAGE;
pLRUList[2] = SC_OPCODE_MIN;
pLRUList[3] = SC_OPCODE_MAX;
pLRUList[4] = SC_OPCODE_IF;
pLRUList[4] = ocIf;
nLRUFuncCount = 5;
nTrackContentColor = COL_TRANSPARENT;
+5 -5
View File
@@ -3212,7 +3212,7 @@ bool ScCompiler::ParseOpCode( const OUString& rName, bool bInArray )
{
bool bShouldBeNegSub =
(eLastOp == ocOpen || eLastOp == ocSep || eLastOp == ocNegSub ||
(SC_OPCODE_START_BIN_OP <= eLastOp && eLastOp < SC_OPCODE_STOP_BIN_OP) ||
(ocStartBinOp <= eLastOp && eLastOp < ocStopBinOp) ||
eLastOp == ocArrayOpen ||
eLastOp == ocArrayColSep || eLastOp == ocArrayRowSep);
if (bShouldBeNegSub && eOp == ocSub)
@@ -5757,8 +5757,8 @@ bool ScCompiler::GetRefColRowNames(const FormulaToken* pToken, ScComplexRefData&
if (eOp1 != ocColRowName && eOp1 != ocIntersect && eOp2 != ocColRowName
&& eOp2 != ocIntersect)
{
if ((SC_OPCODE_START_BIN_OP <= eOp1 && eOp1 < SC_OPCODE_STOP_BIN_OP)
|| (SC_OPCODE_START_BIN_OP <= eOp2 && eOp2 < SC_OPCODE_STOP_BIN_OP))
if ((ocStartBinOp <= eOp1 && eOp1 < ocStopBinOp)
|| (ocStartBinOp <= eOp2 && eOp2 < ocStopBinOp))
bSingle = true;
}
if (bSingle)
@@ -6524,7 +6524,7 @@ bool ScCompiler::HandleIIOpCodeInternal(FormulaToken* token, FormulaToken*** ppp
mPendingImplicitIntersectionOptimizations.emplace_back( pppToken[0], token );
return true;
}
else if ((nOpCode >= SC_OPCODE_START_BIN_OP && nOpCode < SC_OPCODE_STOP_BIN_OP
else if ((nOpCode >= ocStartBinOp && nOpCode < ocStopBinOp
&& nOpCode != ocAnd && nOpCode != ocOr)
|| nOpCode == ocRound || nOpCode == ocRoundUp || nOpCode == ocRoundDown)
{
@@ -6543,7 +6543,7 @@ bool ScCompiler::HandleIIOpCodeInternal(FormulaToken* token, FormulaToken*** ppp
mPendingImplicitIntersectionOptimizations.emplace_back( pppToken[1], token );
return true;
}
else if ((nOpCode >= SC_OPCODE_START_UN_OP && nOpCode < SC_OPCODE_STOP_UN_OP)
else if ((nOpCode >= ocStartUnaryOp && nOpCode < ocStopUnaryOp)
|| nOpCode == ocPercentSign)
{
if (nNumParams != 1)
+2 -2
View File
@@ -604,7 +604,7 @@ void ScParameterClassification::GenerateDocumentation()
bAddParentheses = false;
aToken.SetByte(0);
}
else if ( eOp < SC_OPCODE_STOP_BIN_OP )
else if ( eOp < ocStopBinOp )
{
switch ( eOp )
{
@@ -616,7 +616,7 @@ void ScParameterClassification::GenerateDocumentation()
aToken.SetByte(2);
}
}
else if ( eOp < SC_OPCODE_STOP_UN_OP )
else if ( eOp < ocStopUnaryOp )
aToken.SetByte(1);
else if ( eOp < SC_OPCODE_STOP_NO_PAR )
aToken.SetByte(0);
+1 -1
View File
@@ -1655,7 +1655,7 @@ void ScTokenArray::CheckToken( const FormulaToken& r )
;
}
}
else if (SC_OPCODE_START_BIN_OP <= eOp && eOp < SC_OPCODE_STOP_UN_OP)
else if (ocStartBinOp <= eOp && eOp < ocStopUnaryOp)
{
if (ScInterpreter::GetGlobalConfig().mbOpenCLSubsetOnly &&
ScInterpreter::GetGlobalConfig().mpOpenCLSubsetOpCodes->find(eOp) == ScInterpreter::GetGlobalConfig().mpOpenCLSubsetOpCodes->end())