* Bug 14209 fixed - display of ImplicitList fixed. 57/17357/3
Cedric Delamarre [Wed, 21 Oct 2015 08:32:05 +0000 (10:32 +0200)]
// infinit loop
1:245

Change-Id: Ie9f6342329147698cb34077c7414f51ecdd52c23

scilab/CHANGES_6.0.X
scilab/modules/ast/src/cpp/ast/runvisitor.cpp
scilab/modules/ast/src/cpp/types/double.cpp
scilab/modules/ast/src/cpp/types/implicitlist.cpp
scilab/modules/ast/tests/nonreg_tests/bug_14209.dia.ref [new file with mode: 0644]
scilab/modules/ast/tests/nonreg_tests/bug_14209.tst [new file with mode: 0644]

index 2206315..fcc12da 100644 (file)
@@ -23,15 +23,6 @@ Scilab Bug Fixes
 
 * Bug #12928 fixed - int functions with %nan and %inf return wrong values.
 
-* Bug #14059 fixed - Lack of performance on deletion of matrix elements.
-
-* Bug #14055 fixed - overload on matrix concatenation did not called with [].
-
-* Bug #14028 fixed - force flag of genlib did not rebuild bin file.
-
-* Bug #14024 fixed - Print of macrofile display a debug message
-                     instead of macro prototype.
-
 * Bug #13709 fixed - unique function sometimes returned wrong index values.
 
 * Bug #13750 fixed - Calling ss2ss function with flag = 2 returned an error.
@@ -74,8 +65,13 @@ Scilab Bug Fixes
 
 * Bug #14023 fixed - It was not possible to concatenate cells.
 
+* Bug #14024 fixed - Print of macrofile display a debug message
+                     instead of macro prototype.
+
 * Bug #14025 fixed - head_comments did not take into account compiled functions.
 
+* Bug #14028 fixed - force flag of genlib did not rebuild bin file.
+
 * Bug #14036 fixed - tag and user_data properties were not displayed and not documented for light entity.
 
 * Bug #14038 fixed - Encoded integers were no longer accepted for list extraction.
@@ -86,10 +82,14 @@ Scilab Bug Fixes
 
 * Bug #14049 fixed - genlib hangs if an unexpected endfunction occurs.
 
+* Bug #14055 fixed - overload on matrix concatenation did not called with [].
+
 * Bug #14057 fixed - grand(m,n) returned a wrong error and grand(m,n,p) called an overloading function instead of returning an error.
 
 * Bug #14058 fixed - Scilab crashed with 'file("close", file())' instruction
 
+* Bug #14059 fixed - Lack of performance on deletion of matrix elements.
+
 * Bug #14082 fixed - m=1; m()=1; made Scilab crash.
 
 * Bug #14093 fixed - atanh returns NaN for values with an absolute value greater than 1
@@ -122,6 +122,8 @@ Scilab Bug Fixes
 
 * Bug #14205 fixed - Console crash when assigning uint32 numbers to double matrix.
 
+* Bug #14209 fixed - 1:245 created infinite loop.
+
 
             Changes between version 5.5.2 and 6.0.0-alpha-1 of Scilab
             =========================================================
index 50b34be..547f989 100644 (file)
@@ -1003,6 +1003,20 @@ void RunVisitorT<T>::visitprivate(const SeqExp  &e)
                         throw ie;
                     }
                 }
+                else if (pIT->isImplicitList())
+                {
+                    //expand implicit when possible
+                    types::ImplicitList* pIL = pIT->getAs<types::ImplicitList>();
+                    if (pIL->isComputable())
+                    {
+                        types::InternalType* p = pIL->extractFullMatrix();
+                        if (p)
+                        {
+                            setResult(p);
+                            pIL->killMe();
+                        }
+                    }
+                }
 
                 //don't output Simplevar and empty result
                 if (getResult() != NULL && (!exp->isSimpleVar() || bImplicitCall))
index 748e072..94400f4 100644 (file)
@@ -477,7 +477,6 @@ bool Double::subMatrixToString(std::wostringstream& ostr, int* _piDims, int /*_i
                     if ((iMaxLines == 0 && iCurrentLine >= MAX_LINES) || (iMaxLines != 0 && iCurrentLine >= iMaxLines))
                     {
                         m_iCols1PrintState = iLastVal;
-                        ostr << std::endl << std::endl;
                         return false;
                     }
 
index 8a8b6ce..b9f0bee 100644 (file)
@@ -333,55 +333,45 @@ bool ImplicitList::isComputable()
 
 bool ImplicitList::toString(std::wostringstream& ostr)
 {
-    if (isComputable())
+    ostr << L" ";
+    if (m_eStartType == ScilabDouble)
     {
-        types::InternalType* pIT = extractFullMatrix();
-        bool ret = pIT->toString(ostr);
-        delete pIT;
-        return ret;
+        Double *pD = m_poStart->getAs<Double>();
+        ostr << printDouble(pD);
     }
-    else
+    else //Polynom
     {
-        ostr << L" ";
-        if (m_eStartType == ScilabDouble)
-        {
-            Double *pD = m_poStart->getAs<Double>();
-            ostr << printDouble(pD);
-        }
-        else //Polynom
-        {
-            Polynom* pMP = m_poStart->getAs<types::Polynom>();
-            ostr << printInLinePoly(pMP->get(0), pMP->getVariableName());
-        }
+        Polynom* pMP = m_poStart->getAs<types::Polynom>();
+        ostr << printInLinePoly(pMP->get(0), pMP->getVariableName());
+    }
 
-        ostr << L":";
+    ostr << L":";
 
-        if (m_eStepType == ScilabDouble)
-        {
-            Double *pD = m_poStep->getAs<Double>();
-            ostr << printDouble(pD);
-        }
-        else //Polynom
-        {
-            Polynom* pMP = m_poStep->getAs<types::Polynom>();
-            ostr << printInLinePoly(pMP->get(0), pMP->getVariableName());
-        }
+    if (m_eStepType == ScilabDouble)
+    {
+        Double *pD = m_poStep->getAs<Double>();
+        ostr << printDouble(pD);
+    }
+    else //Polynom
+    {
+        Polynom* pMP = m_poStep->getAs<types::Polynom>();
+        ostr << printInLinePoly(pMP->get(0), pMP->getVariableName());
+    }
 
-        ostr << L":";
+    ostr << L":";
 
-        if (m_eEndType == ScilabDouble)
-        {
-            Double *pD = m_poEnd->getAs<Double>();
-            ostr << printDouble(pD);
-        }
-        else //Polynom
-        {
-            Polynom* pMP = m_poEnd->getAs<types::Polynom>();
-            ostr << printInLinePoly(pMP->get(0), pMP->getVariableName());
-        }
-        ostr << std::endl;
-        return true;
+    if (m_eEndType == ScilabDouble)
+    {
+        Double *pD = m_poEnd->getAs<Double>();
+        ostr << printDouble(pD);
     }
+    else //Polynom
+    {
+        Polynom* pMP = m_poEnd->getAs<types::Polynom>();
+        ostr << printInLinePoly(pMP->get(0), pMP->getVariableName());
+    }
+    ostr << std::endl;
+    return true;
 }
 
 InternalType::ScilabType ImplicitList::getOutputType()
diff --git a/scilab/modules/ast/tests/nonreg_tests/bug_14209.dia.ref b/scilab/modules/ast/tests/nonreg_tests/bug_14209.dia.ref
new file mode 100644 (file)
index 0000000..db96b55
--- /dev/null
@@ -0,0 +1,75 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2015 - Scilab Enterprises - Charlotte HECQUET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 14209 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/14209
+//
+// <-- Short Description -->
+// 1:245 creates infinite loop
+1:245
+ ans  =
+         column 1 to 11
+    1.    2.    3.    4.    5.    6.    7.    8.    9.    10.    11.
+         column 12 to 21
+    12.    13.    14.    15.    16.    17.    18.    19.    20.    21.
+         column 22 to 31
+    22.    23.    24.    25.    26.    27.    28.    29.    30.    31.
+         column 32 to 41
+    32.    33.    34.    35.    36.    37.    38.    39.    40.    41.
+         column 42 to 51
+    42.    43.    44.    45.    46.    47.    48.    49.    50.    51.
+         column 52 to 61
+    52.    53.    54.    55.    56.    57.    58.    59.    60.    61.
+         column 62 to 71
+    62.    63.    64.    65.    66.    67.    68.    69.    70.    71.
+         column 72 to 81
+    72.    73.    74.    75.    76.    77.    78.    79.    80.    81.
+         column 82 to 91
+    82.    83.    84.    85.    86.    87.    88.    89.    90.    91.
+         column 92 to 100
+    92.    93.    94.    95.    96.    97.    98.    99.    100.
+         column 101 to 108
+    101.    102.    103.    104.    105.    106.    107.    108.
+         column 109 to 116
+    109.    110.    111.    112.    113.    114.    115.    116.
+         column 117 to 124
+    117.    118.    119.    120.    121.    122.    123.    124.
+         column 125 to 132
+    125.    126.    127.    128.    129.    130.    131.    132.
+         column 133 to 140
+    133.    134.    135.    136.    137.    138.    139.    140.
+         column 141 to 148
+    141.    142.    143.    144.    145.    146.    147.    148.
+         column 149 to 156
+    149.    150.    151.    152.    153.    154.    155.    156.
+         column 157 to 164
+    157.    158.    159.    160.    161.    162.    163.    164.
+         column 165 to 172
+    165.    166.    167.    168.    169.    170.    171.    172.
+         column 173 to 180
+    173.    174.    175.    176.    177.    178.    179.    180.
+         column 181 to 188
+    181.    182.    183.    184.    185.    186.    187.    188.
+         column 189 to 196
+    189.    190.    191.    192.    193.    194.    195.    196.
+         column 197 to 204
+    197.    198.    199.    200.    201.    202.    203.    204.
+         column 205 to 212
+    205.    206.    207.    208.    209.    210.    211.    212.
+         column 213 to 220
+    213.    214.    215.    216.    217.    218.    219.    220.
+         column 221 to 228
+    221.    222.    223.    224.    225.    226.    227.    228.
+         column 229 to 236
+    229.    230.    231.    232.    233.    234.    235.    236.
+         column 237 to 244
+    237.    238.    239.    240.    241.    242.    243.    244.
+         column 245
+    245.
diff --git a/scilab/modules/ast/tests/nonreg_tests/bug_14209.tst b/scilab/modules/ast/tests/nonreg_tests/bug_14209.tst
new file mode 100644 (file)
index 0000000..e59c992
--- /dev/null
@@ -0,0 +1,17 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2015 - Scilab Enterprises - Charlotte HECQUET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 14209 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/14209
+//
+// <-- Short Description -->
+// 1:245 creates infinite loop
+
+1:245