extract with ImplicitList fixed 12/17412/3
Cedric Delamarre [Thu, 29 Oct 2015 15:15:55 +0000 (16:15 +0100)]
test_run ast implicitlist

Change-Id: I26046e47279376bbcf572bc528cf18e8f0a9bbbb

scilab/modules/ast/src/cpp/ast/runvisitor.cpp
scilab/modules/ast/src/cpp/types/arrayof.cpp
scilab/modules/ast/tests/unit_tests/implicitlist.dia.ref
scilab/modules/ast/tests/unit_tests/implicitlist.tst

index e99c516..67491db 100644 (file)
@@ -1367,7 +1367,6 @@ void RunVisitorT<T>::visitprivate(const SeqExp  &e)
                         if (p)
                         {
                             setResult(p);
-                            pIL->killMe();
                         }
                     }
                 }
index 3e35362..39a3ad5 100644 (file)
@@ -1054,12 +1054,18 @@ InternalType* ArrayOf<T>::extract(typed_list* _pArgs)
 
         //std::cout << start << ":" << step << ":" << end << std::endl;
         int size = static_cast<int>((end - start) / step + 1);
-        if (size <= 0 || getSize() == 0)
+        if (size <= 0 || m_iSize == 0)
         {
             return createEmpty();
         }
 
-        bool isRowVector = getRows() == 1;
+        if (step > 0 && (size - 1) * step + start > m_iSize ||
+                step < 0 && start > m_iSize)
+        {
+            return NULL;
+        }
+
+        bool isRowVector = m_iRows == 1;
         isRowVector = isRowVector && !isForceColVector;
         int dims[2] = {isRowVector ? 1 : size, isRowVector ? size : 1};
         pOut = createEmpty(2, dims, isComplex());
index c94e234..da4f7b5 100644 (file)
@@ -101,3 +101,6 @@ checkCallOverload("t:2:8");
 checkCallOverload("1:t:%t");
 checkCallOverload("1:t:8");
 assert_checkerror("1:2:t", [], 10000);
+// extraction
+assert_checkerror("vect=1:3;vect(1:4)", gettext("Invalid index."));
+assert_checkerror("vect=1:3;vect(4:-1:1)", gettext("Invalid index."));
index 294d513..5d76a3c 100644 (file)
@@ -119,7 +119,8 @@ checkCallOverload("1:t:%t");
 checkCallOverload("1:t:8");
 assert_checkerror("1:2:t", [], 10000);
 
-
-
+// extraction
+assert_checkerror("vect=1:3;vect(1:4)", gettext("Invalid index."));
+assert_checkerror("vect=1:3;vect(4:-1:1)", gettext("Invalid index."));