jdeff(): invoke_lu() deletes/corrupts the called java method when an error occurs
Reported by Samuel GOUGEON (@sgougeon)
BUG DESCRIPTION:
----------------
After using jdeff() to create a Scilab macro -- say test() -- mapping a Java method, and after test() has been used with a bad argin yielding an error, it is no longer possible to use successfully test().
Example taken from the jdeff() page:
-->jdeff("java.lang.Double", "parseDouble", "str2number");
-->PI = str2number("3.14"); // OK
-->PI = str2number(3.14) // We wrongly pass a double instead of a string
!--error 999 // OK
invoke_lu : Une erreur s'est produite : Exception when calling Java method : No method parseDouble in the class double or bad arguments type.
at org.scilab.modules.external_objects_java.ScilabJavaMethod.call(Unknown Source)
at org.scilab.modules.external_objects_java.ScilabJavaMethod.invoke(Unknown Source)
at org.scilab.modules.external_objects_java.ScilabJavaObject.invoke(Unknown Source)
No method parseDouble in the class double or bad arguments type.
at org.scilab.modules.external_objects_java.ScilabJavaMethod.call(Unknown Source)
at org.scilab.modules.external_objects_java.ScilabJavaMethod.invoke(Unknown Source)
at org.scilab.modules.external_objects_java.ScilabJavaObject.invoke(Unknown Source)
at line 2 of function str2number called by :
PI = str2number(3.14)
-->PI = str2number("3.14"); // Now we want to use correctly str2number()
!--error 999 // NOK: It is no longer possible to use it
invoke_lu : Une erreur s'est produite : Exception when calling Java method : No method parseDouble in the class java.lang.String or bad arguments type.
at org.scilab.modules.external_objects_java.ScilabJavaMethod.call(Unknown Source)
at org.scilab.modules.external_objects_java.ScilabJavaMethod.invoke(Unknown Source)
at org.scilab.modules.external_objects_java.ScilabJavaObject.invoke(Unknown Source)
No method parseDouble in the class java.lang.String or bad arguments type.
at org.scilab.modules.external_objects_java.ScilabJavaMethod.call(Unknown Source)
at org.scilab.modules.external_objects_java.ScilabJavaMethod.invoke(Unknown Source)
at org.scilab.modules.external_objects_java.ScilabJavaObject.invoke(Unknown Source)
at line 2 of function str2number called by :
PI = str2number("3.14");
Then, the only way to recover str2number() is to redefine it with jdeff()!
ERROR LOG:
----------
See hereabove
HOW TO REPRODUCE THE BUG:
-------------------------
jdeff("java.lang.Double", "parseDouble", "str2number");
PI = str2number("3.14");
PI = str2number(3.14);
PI = str2number("3.14");
OTHER INFORMATION:
------------------
Same behavior with Scilab 6.0.0-b2+