* Bug 15741 fixed: now +-* of polynomial with distinct var call overload 00/20500/2
St├ęphane Mottelet [Mon, 17 Sep 2018 09:48:59 +0000 (11:48 +0200)]
http://bugzilla.scilab.org/show_bug.cgi?id=15741

Change-Id: I62f24c1243b5d524913955ba7fb59659c8a4ac6b

scilab/CHANGES.md
scilab/modules/ast/src/cpp/operations/types_addition.cpp
scilab/modules/ast/src/cpp/operations/types_multiplication.cpp
scilab/modules/ast/src/cpp/operations/types_subtraction.cpp
scilab/modules/ast/tests/nonreg_tests/bug_15741.tst [new file with mode: 0644]

index 0fedeac..37e4c4a 100644 (file)
@@ -607,6 +607,7 @@ Known issues
 * [#15733](http://bugzilla.scilab.org/show_bug.cgi?id=15733): Some fixes after `deg(0*%s)` => `-%inf`.
 * [#15735](http://bugzilla.scilab.org/show_bug.cgi?id=15735): `interp1` yielded some []+n warnings.
 * [#15736](http://bugzilla.scilab.org/show_bug.cgi?id=15736): `unique` failed with complex numbers.
+* [#15741](http://bugzilla.scilab.org/show_bug.cgi?id=15741):  Operations between 2 polynomials with distinct variables no longer called the corresponding overloads (Regression)
 * [#15746](http://bugzilla.scilab.org/show_bug.cgi?id=15746): `1/[1 2 3]` and `[1 2 3]'\1` did not raise an error
 * [#15747](http://bugzilla.scilab.org/show_bug.cgi?id=15747): no output in overloaded operator crashed Scilab
 * [#15753](http://bugzilla.scilab.org/show_bug.cgi?id=15753): `issparse()` returned 0 instead of 1 for sparse booleans.
index 7448181..b019810 100644 (file)
@@ -1808,12 +1808,13 @@ template<> InternalType* add_M_M<Polynom, Polynom, Polynom>(Polynom* _pL, Polyno
     Polynom* pRSave = _pR;
 
     Polynom* pOut = NULL;
+
+
+    //check varname
     if (_pL->getVariableName() != _pR->getVariableName())
     {
-        std::wostringstream os;
-        os << _W("variables don't have the same formal variable");
-        //os << ((Location)e.right_get().getLocation()).getLocationString() << std::endl;
-        throw ast::InternalError(os.str());
+        //call overload
+        return NULL;
     }
 
     if (_pR->isIdentity())
index 5778ea5..b67c4f6 100644 (file)
@@ -110,6 +110,14 @@ InternalType *GenericTimes(InternalType *_pLeftOperand, InternalType *_pRightOpe
         Polynom *pL          = _pLeftOperand->getAs<types::Polynom>();
         Polynom *pR          = _pRightOperand->getAs<types::Polynom>();
 
+
+        //check varname
+        if (pL->getVariableName() != pR->getVariableName())
+        {
+            //call overload
+            return NULL;
+        }
+
         int iResult = MultiplyPolyByPoly(pL, pR, (Polynom**)&pResult);
         if (iResult)
         {
index 17cf841..c7aad4c 100644 (file)
@@ -1560,6 +1560,14 @@ template<class T, class U, class O> types::InternalType* sub_E_IC(T * /*_pL*/, U
 template<> InternalType* sub_M_M<Polynom, Polynom, Polynom>(Polynom* _pL, Polynom* _pR)
 {
     Polynom* pOut = NULL;
+
+    //check varname
+    if (_pL->getVariableName() != _pR->getVariableName())
+    {
+        //call overload
+        return NULL;
+    }
+
     if (_pL->isScalar())
     {
         SinglePoly* p1Coef  = _pL->get(0);
diff --git a/scilab/modules/ast/tests/nonreg_tests/bug_15741.tst b/scilab/modules/ast/tests/nonreg_tests/bug_15741.tst
new file mode 100644 (file)
index 0000000..6ca4099
--- /dev/null
@@ -0,0 +1,22 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2018 - St├ęphane Mottelet
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+// <-- ENGLISH IMPOSED -->
+// <-- NO CHECK REF -->
+//
+// <-- Non-regression test for bug 15741 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=15741
+//
+// <-- Short Description -->
+// Operations between 2 polynomials with distinct variables no longer call the corresponding overloads (Regression)
+
+assert_checkerror("%s+%z",["Undefined operation for the given operands.";"check or define function %p_a_p for overloading."])
+assert_checkerror("%s-%z",["Undefined operation for the given operands.";"check or define function %p_s_p for overloading."])
+assert_checkerror("%s*%z",["Undefined operation for the given operands.";"check or define function %p_m_p for overloading."])