[bug_15184] overload and error management fixed 40/19340/1
Cedric Delamarre [Thu, 13 Jul 2017 14:47:33 +0000 (16:47 +0200)]
  test_run overloading bug_15184
  test_run overloading bug_15184 mode_nwni_profiling

Change-Id: Idd63c0c54122d2bcee71e9d4c02d949c84bf8c12

scilab/CHANGES.md
scilab/modules/ast/src/cpp/ast/run_OpExp.hpp
scilab/modules/overloading/macros/%s_1_s.sci
scilab/modules/overloading/tests/nonreg_tests/bug_15184.dia.ref [new file with mode: 0644]
scilab/modules/overloading/tests/nonreg_tests/bug_15184.tst [new file with mode: 0644]

index 30b6b22..c166aea 100644 (file)
@@ -384,6 +384,7 @@ the [development mailing list](dev@lists.scilab.org) for a particular toolbox.
 * [#15138](http://bugzilla.scilab.org/show_bug.cgi?id=15138): Scilab crashes at start on Windows
 * [#15139](http://bugzilla.scilab.org/show_bug.cgi?id=15139): Fix return in try/catch expression
 * [#15144](http://bugzilla.scilab.org/show_bug.cgi?id=15144): `mean` and `stdev` could not be overloaded.
+* [#15184](http://bugzilla.scilab.org/show_bug.cgi?id=15184): error management when calling operator overload fixed.
 * [#15185](http://bugzilla.scilab.org/show_bug.cgi?id=15185): "Region to Superblock" did not restore broken links.
 * [#15188](http://bugzilla.scilab.org/show_bug.cgi?id=15188): Failed to load hdf5_is_file function.
 * [#15199](http://bugzilla.scilab.org/show_bug.cgi?id=15199): Scilab crash when using fsolve for functions containing other functions.
index 0a711ba..8d6674b 100644 (file)
@@ -436,7 +436,11 @@ types::InternalType* RunVisitorT<T>::callOverloadOpExp(OpExp::Oper _oper, types:
         in.push_back(_paramR);
         try
         {
-            Overload::generateNameAndCall(Overload::getNameFromOper(_oper), in, 1, out, true);
+            types::Callable::ReturnValue ret = Overload::generateNameAndCall(Overload::getNameFromOper(_oper), in, 1, out, true);
+            if(ret == types::Function::Error)
+            {
+                throw ast::InternalError(ConfigVariable::getLastErrorMessage());
+            }
         }
         catch (const ast::InternalError& e)
         {
@@ -455,7 +459,11 @@ types::InternalType* RunVisitorT<T>::callOverloadOpExp(OpExp::Oper _oper, types:
 
     try
     {
-        Overload::generateNameAndCall(Overload::getNameFromOper(_oper), in, 1, out, true);
+        types::Callable::ReturnValue ret = Overload::generateNameAndCall(Overload::getNameFromOper(_oper), in, 1, out, true);
+        if(ret == types::Function::Error)
+        {
+            throw ast::InternalError(ConfigVariable::getLastErrorMessage());
+        }
     }
     catch (const ast::InternalError& e)
     {
@@ -466,6 +474,7 @@ types::InternalType* RunVisitorT<T>::callOverloadOpExp(OpExp::Oper _oper, types:
 
     _paramL->DecreaseRef();
     _paramR->DecreaseRef();
+
     return out[0];
 }
 
index 69d8c2b..c2b5f5a 100644 (file)
@@ -1,4 +1,6 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) INRIA
+// Copyright (C) 2012 - 2016 - Scilab Enterprises
 // Copyright (C) 2017 - Samuel GOUGEON
 //
 // This file is hereby licensed under the terms of the GNU GPL v2.0,
@@ -9,6 +11,7 @@
 // along with this program.
 
 function TF = %s_1_s(A, B)
+    TF=%f
     // Possible case: all components of both A and B have both strictly null
     // imaginary parts
     if isreal(A, 0) & isreal(B,0) then
diff --git a/scilab/modules/overloading/tests/nonreg_tests/bug_15184.dia.ref b/scilab/modules/overloading/tests/nonreg_tests/bug_15184.dia.ref
new file mode 100644 (file)
index 0000000..c47610c
--- /dev/null
@@ -0,0 +1,17 @@
+//<-- CLI SHELL MODE -->
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2017 - Scilab Enterprises - Cedric Delamarre
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- Non-regression test for bug 15184 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=15184
+//
+// <-- Short Description -->
+// comparisons of complex numbers: a = 1 + %i;  a<2  crashes Scilab
+a = 1 + %i;
+assert_checkequal(a < 2, %f);
diff --git a/scilab/modules/overloading/tests/nonreg_tests/bug_15184.tst b/scilab/modules/overloading/tests/nonreg_tests/bug_15184.tst
new file mode 100644 (file)
index 0000000..b005079
--- /dev/null
@@ -0,0 +1,18 @@
+//<-- CLI SHELL MODE -->
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2017 - Scilab Enterprises - Cedric Delamarre
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- Non-regression test for bug 15184 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=15184
+//
+// <-- Short Description -->
+// comparisons of complex numbers: a = 1 + %i;  a<2  crashes Scilab
+
+a = 1 + %i;
+assert_checkequal(a < 2, %f);