[Libreoffice-commits] core.git: 2 commits - sc/source

Eike Rathke erack at redhat.com
Fri Jun 2 21:08:13 UTC 2017


 sc/source/core/tool/parclass.cxx |  100 ++++++++++++++++++++++++++-------------
 1 file changed, 67 insertions(+), 33 deletions(-)

New commits:
commit edea6e1ea5fc172e1177a7d2fe727bc11481af71
Author: Eike Rathke <erack at redhat.com>
Date:   Fri Jun 2 23:07:17 2017 +0200

    Output return type and use Bounds for OpCodes without return
    
    Could be further refined to use Array for functions that are capable to return
    one, and even ForceArray if always an array is returned, which then could be
    used by FormulaCompiler::IsMatrixFunction() instead of the switch cases.
    
    Change-Id: I099f9632dd0f206f3e5c07799b1ad73a67dee44f

diff --git a/sc/source/core/tool/parclass.cxx b/sc/source/core/tool/parclass.cxx
index 8da7305aa7cc..d4b425a905f1 100644
--- a/sc/source/core/tool/parclass.cxx
+++ b/sc/source/core/tool/parclass.cxx
@@ -59,40 +59,40 @@ const ScParameterClassification::RawData ScParameterClassification::pRawData[] =
     { ocIfNA,            {{ Array, Reference                                     }, 0, Value }},
     { ocChoose,          {{ Array, Reference                                     }, 1, Value }},
     // Other specials.
-    { ocArrayClose,      {{ Bounds                                               }, 0, Value }},
-    { ocArrayColSep,     {{ Bounds                                               }, 0, Value }},
-    { ocArrayOpen,       {{ Bounds                                               }, 0, Value }},
-    { ocArrayRowSep,     {{ Bounds                                               }, 0, Value }},
-    { ocBad,             {{ Bounds                                               }, 0, Value }},
-    { ocClose,           {{ Bounds                                               }, 0, Value }},
-    { ocColRowName,      {{ Bounds                                               }, 0, Value }},
-    { ocColRowNameAuto,  {{ Bounds                                               }, 0, Value }},
-    { ocDBArea,          {{ Bounds                                               }, 0, Value }},
+    { ocArrayClose,      {{ Bounds                                               }, 0, Bounds }},
+    { ocArrayColSep,     {{ Bounds                                               }, 0, Bounds }},
+    { ocArrayOpen,       {{ Bounds                                               }, 0, Bounds }},
+    { ocArrayRowSep,     {{ Bounds                                               }, 0, Bounds }},
+    { ocBad,             {{ Bounds                                               }, 0, Bounds }},
+    { ocClose,           {{ Bounds                                               }, 0, Bounds }},
+    { ocColRowName,      {{ Bounds                                               }, 0, Value }},    // or Reference?
+    { ocColRowNameAuto,  {{ Bounds                                               }, 0, Value }},    // or Reference?
+    { ocDBArea,          {{ Bounds                                               }, 0, Value }},    // or Reference?
     { ocMatRef,          {{ Bounds                                               }, 0, Value }},
     { ocMissing,         {{ Bounds                                               }, 0, Value }},
-    { ocNoName,          {{ Bounds                                               }, 0, Value }},
-    { ocOpen,            {{ Bounds                                               }, 0, Value }},
-    { ocSep,             {{ Bounds                                               }, 0, Value }},
-    { ocSkip,            {{ Bounds                                               }, 0, Value }},
-    { ocSpaces,          {{ Bounds                                               }, 0, Value }},
-    { ocStop,            {{ Bounds                                               }, 0, Value }},
-    { ocStringXML,       {{ Bounds                                               }, 0, Value }},
-    { ocTableRef,        {{ Bounds                                               }, 0, Value }},
-    { ocTableRefClose,   {{ Bounds                                               }, 0, Value }},
-    { ocTableRefItemAll,     {{ Bounds                                           }, 0, Value }},
-    { ocTableRefItemData,    {{ Bounds                                           }, 0, Value }},
-    { ocTableRefItemHeaders, {{ Bounds                                           }, 0, Value }},
-    { ocTableRefItemThisRow, {{ Bounds                                           }, 0, Value }},
-    { ocTableRefItemTotals,  {{ Bounds                                           }, 0, Value }},
-    { ocTableRefOpen,    {{ Bounds                                               }, 0, Value }},
+    { ocNoName,          {{ Bounds                                               }, 0, Bounds }},
+    { ocOpen,            {{ Bounds                                               }, 0, Bounds }},
+    { ocSep,             {{ Bounds                                               }, 0, Bounds }},
+    { ocSkip,            {{ Bounds                                               }, 0, Bounds }},
+    { ocSpaces,          {{ Bounds                                               }, 0, Bounds }},
+    { ocStop,            {{ Bounds                                               }, 0, Bounds }},
+    { ocStringXML,       {{ Bounds                                               }, 0, Bounds }},
+    { ocTableRef,        {{ Bounds                                               }, 0, Value }},    // or Reference?
+    { ocTableRefClose,   {{ Bounds                                               }, 0, Bounds }},
+    { ocTableRefItemAll,     {{ Bounds                                           }, 0, Bounds }},
+    { ocTableRefItemData,    {{ Bounds                                           }, 0, Bounds }},
+    { ocTableRefItemHeaders, {{ Bounds                                           }, 0, Bounds }},
+    { ocTableRefItemThisRow, {{ Bounds                                           }, 0, Bounds }},
+    { ocTableRefItemTotals,  {{ Bounds                                           }, 0, Bounds }},
+    { ocTableRefOpen,    {{ Bounds                                               }, 0, Bounds }},
     // Error constants.
-    { ocErrDivZero,      {{ Bounds                                               }, 0, Value }},
-    { ocErrNA,           {{ Bounds                                               }, 0, Value }},
-    { ocErrName,         {{ Bounds                                               }, 0, Value }},
-    { ocErrNull,         {{ Bounds                                               }, 0, Value }},
-    { ocErrNum,          {{ Bounds                                               }, 0, Value }},
-    { ocErrRef,          {{ Bounds                                               }, 0, Value }},
-    { ocErrValue,        {{ Bounds                                               }, 0, Value }},
+    { ocErrDivZero,      {{ Bounds                                               }, 0, Bounds }},
+    { ocErrNA,           {{ Bounds                                               }, 0, Bounds }},
+    { ocErrName,         {{ Bounds                                               }, 0, Bounds }},
+    { ocErrNull,         {{ Bounds                                               }, 0, Bounds }},
+    { ocErrNum,          {{ Bounds                                               }, 0, Bounds }},
+    { ocErrRef,          {{ Bounds                                               }, 0, Bounds }},
+    { ocErrValue,        {{ Bounds                                               }, 0, Bounds }},
     // Functions with Value parameters only but not in resource.
     { ocBackSolver,      {{ Value, Value, Value                                  }, 0, Value }},
     { ocTableOp,         {{ Value, Value, Value, Value, Value                    }, 0, Value }},
@@ -654,6 +654,31 @@ void ScParameterClassification::GenerateDocumentation()
                 break;
                 default:;
             }
+            // Return type.
+            formula::ParamClass eType = GetParameterType( &aToken, SAL_MAX_UINT16);
+            switch ( eType )
+            {
+                case Value :
+                    aStr.append(" -> Value");
+                break;
+                case Reference :
+                    aStr.append(" -> Reference");
+                break;
+                case Array :
+                    aStr.append(" -> Array");
+                break;
+                case ForceArray :
+                    aStr.append(" -> ForceArray");
+                break;
+                case ReferenceOrForceArray :
+                    aStr.append(" -> ReferenceOrForceArray");
+                break;
+                case Bounds :
+                    ;   // nothing
+                break;
+                default:
+                    aStr.append(" (-> ???, classification error?)");
+            }
             /* We could add yet another log domain for this, if we wanted.. but
              * as it more seldom than rarely used it's not actually necessary,
              * just grep output. */
commit e3c73fea1a65d42744f60df3f95b047459cf01e0
Author: Eike Rathke <erack at redhat.com>
Date:   Fri Jun 2 22:42:05 2017 +0200

    Add parentheses only for functions and operators
    
    Change-Id: Ifdd3b0644c54b93f32e93b9448a4364475027a00

diff --git a/sc/source/core/tool/parclass.cxx b/sc/source/core/tool/parclass.cxx
index f53a91895ee7..8da7305aa7cc 100644
--- a/sc/source/core/tool/parclass.cxx
+++ b/sc/source/core/tool/parclass.cxx
@@ -539,13 +539,14 @@ void ScParameterClassification::GenerateDocumentation()
         if ( !xMap->getSymbol(eOp).isEmpty() )
         {
             OUStringBuffer aStr(xMap->getSymbol(eOp));
-            aStr.append('(');
             formula::FormulaByteToken aToken( eOp);
             sal_uInt8 nParams = GetMinimumParameters( eOp);
             // preset parameter count according to opcode value, with some
             // special handling
+            bool bAddParentheses = true;
             if ( eOp < SC_OPCODE_STOP_DIV )
             {
+                bAddParentheses = false;    // will be overridden below if parameters
                 switch ( eOp )
                 {
                     case ocIf:
@@ -563,7 +564,10 @@ void ScParameterClassification::GenerateDocumentation()
                 }
             }
             else if ( eOp < SC_OPCODE_STOP_ERRORS )
+            {
+                bAddParentheses = false;
                 aToken.SetByte(0);
+            }
             else if ( eOp < SC_OPCODE_STOP_BIN_OP )
             {
                 switch ( eOp )
@@ -592,6 +596,10 @@ void ScParameterClassification::GenerateDocumentation()
             aToken.SetByte( nParams);
             if ( nParams != aToken.GetParamCount() )
                 SAL_WARN("sc.core", "(parameter count differs, token ParamCount: " << (int)aToken.GetParamCount() << " classification: " << (int)nParams << ") ");
+            if (aToken.GetByte())
+                bAddParentheses = true;
+            if (bAddParentheses)
+                aStr.append('(');
             for ( sal_uInt16 j=0; j < nParams; ++j )
             {
                 if ( j > 0 )
@@ -625,7 +633,8 @@ void ScParameterClassification::GenerateDocumentation()
                 aStr.append(", ...");
             if ( nParams )
                 aStr.append(' ');
-            aStr.append(')');
+            if (bAddParentheses)
+                aStr.append(')');
             switch ( eOp )
             {
                 case ocRRI:


More information about the Libreoffice-commits mailing list