fix bug 1412 27/16127/4
Antoine ELIAS [Tue, 10 Mar 2015 10:09:53 +0000 (11:09 +0100)]
Change-Id: I5b9b6ce18fabdde5ff74c362a6f9030b936ff7b7

scilab/modules/ast/includes/types/polynom.hxx
scilab/modules/ast/src/cpp/types/polynom.cpp
scilab/modules/output_stream/tests/nonreg_tests/bug_1412.dia.ref
scilab/modules/output_stream/tests/nonreg_tests/bug_1412.tst

index 5df3d9b..31a09af 100644 (file)
@@ -61,7 +61,7 @@ public :
     {
         return isScalar() ? isComplex() ? IdScalarPolynomComplex
                : IdScalarPolynom
-       : isComplex() ? IdPolynomComplex
+               : isComplex() ? IdPolynomComplex
                : IdPolynom;
     }
 
@@ -85,6 +85,7 @@ public :
     Double*                 extractCoef(int _iRank);
     bool                    insertCoef(int _iRank, Double* _pCoef);
     void                    setZeros();
+    InternalType*           insert(typed_list* _pArgs, InternalType* _pSource);
 
     bool                    set(int _iPos, SinglePoly* _pS);
     bool                    set(int _iRows, int _iCols, SinglePoly* _pS);
index 0b07007..9d802b0 100644 (file)
@@ -860,6 +860,7 @@ Double* Polynom::extractCoef(int _iRank)
 
     return pdbl;
 }
+
 bool Polynom::insertCoef(int _iRank, Double* _pCoef)
 {
     double *pReal = _pCoef->getReal();
@@ -976,5 +977,22 @@ void Polynom::deleteData(SinglePoly* data)
         data->killMe();
     }
 }
+
+//overload to check variable name and call arrayof<>::insert after
+InternalType* Polynom::insert(typed_list* _pArgs, InternalType* _pSource)
+{
+    Polynom* p = _pSource->getAs<Polynom>();
+    if (p->getVariableName() != getVariableName())
+    {
+        char szError[512];
+        os_sprintf(szError, _("Input arguments should have the same formal variable name.\n"));
+        wchar_t* pwstError = to_wide_string(szError);
+        std::wstring wstError(pwstError);
+        FREE(pwstError);
+        throw ast::ScilabError(wstError, 999, *new Location());
+    }
+    return ArrayOf<SinglePoly*>::insert(_pArgs, _pSource);
+}
+
 }
 
index dad38af..8121892 100644 (file)
@@ -13,5 +13,5 @@
 // Causes scilab to hang, using 95% of CPU.
 // and display a incorrect error
 A(3,3)=%s;
-ierr = execstr('A(:)=%z;','errcatch');
-if ierr <> 278 then bugmes();quit;end
+ierr = execstr("A(:)=%z;","errcatch");
+assert_checktrue(ierr <> 0);
index d1c8538..a9a8bdf 100644 (file)
@@ -16,5 +16,5 @@
 // and display a incorrect error
 
 A(3,3)=%s;
-ierr = execstr('A(:)=%z;','errcatch');
-if ierr <> 278 then pause,end
\ No newline at end of file
+ierr = execstr("A(:)=%z;","errcatch");
+assert_checktrue(ierr <> 0);