[Analysis] size of extraction result fixed when variable is a row vector 81/19381/3
Cedric Delamarre [Thu, 17 Aug 2017 09:30:10 +0000 (11:30 +0200)]
  a=1:10;
  analyzerOptions(1);
  a(1:2)

Change-Id: I55c466661b953624df4ba725c3ac62be759008f0

scilab/modules/ast/src/cpp/analysis/IndexAnalyzer.cpp

index afca73e..4624474 100644 (file)
@@ -43,16 +43,26 @@ bool AnalysisVisitor::analyzeIndices(TIType & type, ast::CallExp & ce)
     argIndices.emplace(static_cast<ast::SimpleVar &>(ce.getName()), size, 1);
     if (size == 1)
     {
-        // when there is one argument, a(?) is equivalent to A(?,1)
-        // where A = matrix(a, r_a * c_a, 1)
-
-        SymbolicDimension rows(type.rows);
-        second = SymbolicDimension(getGVN(), 1);
-        if (type.cols != 1)
+        // row vector case
+        if (type.rows == 1 && type.cols != 1)
+        {
+            SymbolicDimension cols(type.cols);
+            first = SymbolicDimension(getGVN(), 1);
+            ret = getDimension(cols, *args.front(), safe, second);
+        }
+        else // scalar, col vector and matrix case
         {
-            rows *= type.cols;
+            // when there is one argument, a(?) is equivalent to A(?,1)
+            // where A = matrix(a, r_a * c_a, 1)
+
+            SymbolicDimension rows(type.rows);
+            second = SymbolicDimension(getGVN(), 1);
+            if (type.cols != 1)
+            {
+                rows *= type.cols;
+            }
+            ret = getDimension(rows, *args.front(), safe, first);
         }
-        ret = getDimension(rows, *args.front(), safe, first);
     }
     else
     {