fix test_run after https://codereview.scilab.org/#/c/16893/ 95/16895/1
Antoine ELIAS [Mon, 27 Jul 2015 08:18:37 +0000 (10:18 +0200)]
The check of extraction from empty variable ( [], {} or struct() )
must be done in extract function and not in checkIndexesArguments
to avoid disturbing insertion behaviour on empty variable.

Change-Id: I237a2f98f11fb27146b0773165c70ac5549cb558

scilab/modules/ast/src/cpp/types/arrayof.cpp
scilab/modules/ast/src/cpp/types/types_tools.cpp

index e1887d9..16b03e7 100644 (file)
@@ -1115,6 +1115,16 @@ InternalType* ArrayOf<T>::extract(typed_list* _pArgs)
         return NULL;
     }
 
+    //a = {};a(1:2, 1:2) -> {}
+    if (getSize() == 0)
+    {
+        delete[] piMaxDim;
+        delete[] piCountDim;
+        //free pArg content
+        cleanIndexesArguments(_pArgs, &pArg);
+        return createEmpty();
+    }
+
     if (iDims < m_iDims)
     {
         for (int i = 0; i < iDims; i++)
index 2e2291d..b3dd90a 100644 (file)
@@ -640,9 +640,7 @@ int checkIndexesArguments(InternalType* _pRef, typed_list* _pArgsIn, typed_list*
 
     //return 0 to force extract to create an empty matrix
     if (_pRef &&
-            (_pRef->isDouble() && _pRef->getAs<Double>()->isEmpty() ||
-             _pRef->isCell() && _pRef->getAs<Cell>()->isEmpty() ||
-             _pRef->isStruct() && _pRef->getAs<Struct>()->isEmpty()))
+            (_pRef->isDouble() && _pRef->getAs<Double>()->isEmpty()))
     {
         return 0;
     }