ScilabException management and bug fixed 59/16959/2
Cedric Delamarre [Mon, 27 Jul 2015 15:43:56 +0000 (17:43 +0200)]
    * ScilabError and ScilabMessage removed
    * InternalError added
    * mlist print fixed when an error occured :
test_run data_structures list

Change-Id: Ie39647a3b606198d0e7ae87e68be0addea9a7eca

84 files changed:
scilab/modules/api_scilab/src/cpp/api_double.cpp
scilab/modules/api_scilab/src/cpp/api_list.cpp
scilab/modules/api_scilab/src/cpp/api_pointer.cpp
scilab/modules/ast/includes/ast/runvisitor.hxx
scilab/modules/ast/includes/ast/scilabexception.hxx
scilab/modules/ast/includes/ast/visitor_common.hxx
scilab/modules/ast/includes/exps/location.hxx
scilab/modules/ast/includes/types/arrayof.hxx
scilab/modules/ast/includes/types/inspector.hxx
scilab/modules/ast/includes/types/internal.hxx
scilab/modules/ast/includes/types/sparse.hxx
scilab/modules/ast/includes/types/user.hxx
scilab/modules/ast/src/cpp/ast/run_AssignExp.hpp
scilab/modules/ast/src/cpp/ast/run_CallExp.hpp
scilab/modules/ast/src/cpp/ast/run_MatrixExp.hpp
scilab/modules/ast/src/cpp/ast/run_OpExp.hpp
scilab/modules/ast/src/cpp/ast/runvisitor.cpp
scilab/modules/ast/src/cpp/ast/visitor_common.cpp
scilab/modules/ast/src/cpp/operations/types_addition.cpp
scilab/modules/ast/src/cpp/operations/types_and.cpp
scilab/modules/ast/src/cpp/operations/types_comparison_eq.cpp
scilab/modules/ast/src/cpp/operations/types_comparison_lt_le_gt_ge.cpp
scilab/modules/ast/src/cpp/operations/types_comparison_ne.cpp
scilab/modules/ast/src/cpp/operations/types_divide.cpp
scilab/modules/ast/src/cpp/operations/types_dotdivide.cpp
scilab/modules/ast/src/cpp/operations/types_dotmultiplication.cpp
scilab/modules/ast/src/cpp/operations/types_kronecker.cpp
scilab/modules/ast/src/cpp/operations/types_ldivide.cpp
scilab/modules/ast/src/cpp/operations/types_multiplication.cpp
scilab/modules/ast/src/cpp/operations/types_or.cpp
scilab/modules/ast/src/cpp/operations/types_power.cpp
scilab/modules/ast/src/cpp/operations/types_subtraction.cpp
scilab/modules/ast/src/cpp/parse/parser.cpp
scilab/modules/ast/src/cpp/system_env/configvariable.cpp
scilab/modules/ast/src/cpp/types/arrayof.cpp
scilab/modules/ast/src/cpp/types/callable.cpp
scilab/modules/ast/src/cpp/types/double.cpp
scilab/modules/ast/src/cpp/types/function.cpp
scilab/modules/ast/src/cpp/types/graphichandle.cpp
scilab/modules/ast/src/cpp/types/implicitlist.cpp
scilab/modules/ast/src/cpp/types/list.cpp
scilab/modules/ast/src/cpp/types/macro.cpp
scilab/modules/ast/src/cpp/types/mlist.cpp
scilab/modules/ast/src/cpp/types/overload.cpp
scilab/modules/ast/src/cpp/types/polynom.cpp
scilab/modules/ast/src/cpp/types/singlepoly.cpp
scilab/modules/ast/src/cpp/types/singlestruct.cpp
scilab/modules/ast/src/cpp/types/string.cpp
scilab/modules/ast/src/cpp/types/struct.cpp
scilab/modules/ast/src/cpp/types/tlist.cpp
scilab/modules/ast/src/cpp/types/types.cpp
scilab/modules/ast/src/cpp/types/types_tools.cpp
scilab/modules/core/sci_gateway/cpp/sci_pause.cpp
scilab/modules/data_structures/tests/unit_tests/list.dia.ref
scilab/modules/data_structures/tests/unit_tests/list.tst
scilab/modules/differential_equations/sci_gateway/cpp/sci_bvode.cpp
scilab/modules/differential_equations/sci_gateway/cpp/sci_daskr.cpp
scilab/modules/differential_equations/sci_gateway/cpp/sci_dasrt.cpp
scilab/modules/differential_equations/sci_gateway/cpp/sci_dassl.cpp
scilab/modules/differential_equations/sci_gateway/cpp/sci_feval.cpp
scilab/modules/differential_equations/sci_gateway/cpp/sci_impl.cpp
scilab/modules/differential_equations/sci_gateway/cpp/sci_int2d.cpp
scilab/modules/differential_equations/sci_gateway/cpp/sci_int3d.cpp
scilab/modules/differential_equations/sci_gateway/cpp/sci_intg.cpp
scilab/modules/differential_equations/sci_gateway/cpp/sci_ode.cpp
scilab/modules/differential_equations/sci_gateway/cpp/sci_odedc.cpp
scilab/modules/differential_equations/src/cpp/differentialequationfunctions.cpp
scilab/modules/differential_equations/src/cpp/scifunctions.cpp
scilab/modules/functions/sci_gateway/cpp/sci_exec.cpp
scilab/modules/functions/sci_gateway/cpp/sci_execstr.cpp
scilab/modules/functions/sci_gateway/cpp/sci_testAnalysis.cpp
scilab/modules/functions/sci_gateway/cpp/sci_testGVN.cpp
scilab/modules/functions_manager/src/cpp/funcmanager.cpp
scilab/modules/hdf5/sci_gateway/cpp/sci_hdf5_save.cpp
scilab/modules/mexlib/src/cpp/mexlib.cpp
scilab/modules/optimization/sci_gateway/cpp/sci_fsolve.cpp
scilab/modules/optimization/sci_gateway/cpp/sci_lsqrsolve.cpp
scilab/modules/optimization/sci_gateway/cpp/sci_optim.cpp
scilab/modules/optimization/src/cpp/optimizationfunctions.cpp
scilab/modules/optimization/src/cpp/scioptimfunctions.cpp
scilab/modules/scicos/src/cpp/sciblk2.cpp
scilab/modules/scicos/src/cpp/sciblk4.cpp
scilab/modules/scicos/src/cpp/view_scilab/BaseAdapter.hxx
scilab/modules/signal_processing/src/cpp/signalprocessingfunctions.cpp

index 2cec68d..a42ab6e 100644 (file)
@@ -249,9 +249,9 @@ SciErr allocCommonMatrixOfDouble(void* _pvCtx, int _iVar, char _cType, int _iCom
             }
         }
     }
-    catch (const ast::ScilabError& se)
+    catch (const ast::InternalError& ie)
     {
-        addErrorMessage(&sciErr, API_ERROR_NO_MORE_MEMORY, _("%s: %ls"), _iComplex ? "allocComplexMatrixOfDouble" : "allocMatrixOfDouble", se.GetErrorMessage().c_str());
+        addErrorMessage(&sciErr, API_ERROR_NO_MORE_MEMORY, _("%s: %ls"), _iComplex ? "allocComplexMatrixOfDouble" : "allocMatrixOfDouble", ie.GetErrorMessage().c_str());
         return sciErr;
     }
 
index 78189f0..b2e657e 100644 (file)
@@ -243,9 +243,9 @@ static SciErr createCommonNamedList(void* _pvCtx, const char* _pstName, int _iLi
             return sciErr;
         }
     }
-    catch (const ast::ScilabError& se)
+    catch (const ast::InternalError& ie)
     {
-        addErrorMessage(&sciErr, API_ERROR_NO_MORE_MEMORY, _("%s: %ls"), "createNamedList", se.GetErrorMessage().c_str());
+        addErrorMessage(&sciErr, API_ERROR_NO_MORE_MEMORY, _("%s: %ls"), "createNamedList", ie.GetErrorMessage().c_str());
         return sciErr;
     }
 
@@ -309,9 +309,9 @@ static SciErr createCommonList(void* _pvCtx, int _iVar, int _iListType, int _iNb
             return sciErr;
         }
     }
-    catch (const ast::ScilabError& se)
+    catch (const ast::InternalError& ie)
     {
-        addErrorMessage(&sciErr, API_ERROR_NO_MORE_MEMORY, _("%s: %ls"), "createList", se.GetErrorMessage().c_str());
+        addErrorMessage(&sciErr, API_ERROR_NO_MORE_MEMORY, _("%s: %ls"), "createList", ie.GetErrorMessage().c_str());
         return sciErr;
     }
 
@@ -519,9 +519,9 @@ static SciErr createCommonListInList(void* _pvCtx, const char* _pstName, int* _p
             return sciErr;
         }
     }
-    catch (const ast::ScilabError& se)
+    catch (const ast::InternalError& ie)
     {
-        addErrorMessage(&sciErr, API_ERROR_NO_MORE_MEMORY, _("%s: %ls"), funcName, se.GetErrorMessage().c_str());
+        addErrorMessage(&sciErr, API_ERROR_NO_MORE_MEMORY, _("%s: %ls"), funcName, ie.GetErrorMessage().c_str());
         return sciErr;
     }
 
@@ -657,9 +657,9 @@ static SciErr allocCommonMatrixOfDoubleInList(void* _pvCtx, int _iVar, int* _piP
     {
         pDbl = new Double(_iRows, _iCols, _iComplex == 1);
     }
-    catch (const ast::ScilabError& se)
+    catch (const ast::InternalError& ie)
     {
-        addErrorMessage(&sciErr, API_ERROR_NO_MORE_MEMORY, _("%s: %ls"), _iComplex ? "allocComplexMatrixOfDoubleInList" : "allocMatrixOfDoubleInList", se.GetErrorMessage().c_str());
+        addErrorMessage(&sciErr, API_ERROR_NO_MORE_MEMORY, _("%s: %ls"), _iComplex ? "allocComplexMatrixOfDoubleInList" : "allocMatrixOfDoubleInList", ie.GetErrorMessage().c_str());
         return sciErr;
     }
 
@@ -942,9 +942,9 @@ SciErr createCommonMatrixOfStringInList(void* _pvCtx, const char* _pstName, int*
     {
         pS = new String(_iRows, _iCols);
     }
-    catch (const ast::ScilabError& se)
+    catch (const ast::InternalError& ie)
     {
-        addErrorMessage(&sciErr, API_ERROR_NO_MORE_MEMORY, _("%s: %ls"), funcName, se.GetErrorMessage().c_str());
+        addErrorMessage(&sciErr, API_ERROR_NO_MORE_MEMORY, _("%s: %ls"), funcName, ie.GetErrorMessage().c_str());
         return sciErr;
     }
 
@@ -1078,9 +1078,9 @@ SciErr allocMatrixOfBooleanInList(void* _pvCtx, int _iVar, int* _piParent, int _
     {
         pBool = new Bool(_iRows, _iCols);
     }
-    catch (const ast::ScilabError& se)
+    catch (const ast::InternalError& ie)
     {
-        addErrorMessage(&sciErr, API_ERROR_NO_MORE_MEMORY, _("%s: %ls"), "allocMatrixOfBooleanInList", se.GetErrorMessage().c_str());
+        addErrorMessage(&sciErr, API_ERROR_NO_MORE_MEMORY, _("%s: %ls"), "allocMatrixOfBooleanInList", ie.GetErrorMessage().c_str());
         return sciErr;
     }
 
@@ -1431,9 +1431,9 @@ static SciErr allocCommonMatrixOfIntegerInList(void* _pvCtx, int _iVar, const ch
             break;
         }
     }
-    catch (const ast::ScilabError& se)
+    catch (const ast::InternalError& ie)
     {
-        addErrorMessage(&sciErr, API_ERROR_NO_MORE_MEMORY, _("%s: %ls"), "allocMatrixOfIntegerInList", se.GetErrorMessage().c_str());
+        addErrorMessage(&sciErr, API_ERROR_NO_MORE_MEMORY, _("%s: %ls"), "allocMatrixOfIntegerInList", ie.GetErrorMessage().c_str());
         return sciErr;
     }
 
@@ -1837,9 +1837,9 @@ static SciErr createCommonSparseMatrixInList(void* _pvCtx, int _iVar, const char
     {
         pSparse = new Sparse(_iRows, _iCols, _iComplex == 1);
     }
-    catch (const ast::ScilabError& se)
+    catch (const ast::InternalError& ie)
     {
-        addErrorMessage(&sciErr, API_ERROR_NO_MORE_MEMORY, _("%s: %ls"), funcName, se.GetErrorMessage().c_str());
+        addErrorMessage(&sciErr, API_ERROR_NO_MORE_MEMORY, _("%s: %ls"), funcName, ie.GetErrorMessage().c_str());
         return sciErr;
     }
 
@@ -2037,9 +2037,9 @@ SciErr createCommonBooleanSparseMatrixInList(void* _pvCtx, const char* _pstName,
     {
         pSparse = new SparseBool(_iRows, _iCols);
     }
-    catch (const ast::ScilabError& se)
+    catch (const ast::InternalError& ie)
     {
-        addErrorMessage(&sciErr, API_ERROR_NO_MORE_MEMORY, _("%s: %ls"), funcName, se.GetErrorMessage().c_str());
+        addErrorMessage(&sciErr, API_ERROR_NO_MORE_MEMORY, _("%s: %ls"), funcName, ie.GetErrorMessage().c_str());
         return sciErr;
     }
 
@@ -2212,9 +2212,9 @@ SciErr createCommonPointerInList(void* _pvCtx, const char* _pstName, int* _piPar
             return sciErr;
         }
     }
-    catch (ast::ScilabError se)
+    catch (const ast::InternalError& ie)
     {
-        addErrorMessage(&sciErr, API_ERROR_NO_MORE_MEMORY, _("%s: %ls"), "createPointerInList", se.GetErrorMessage().c_str());
+        addErrorMessage(&sciErr, API_ERROR_NO_MORE_MEMORY, _("%s: %ls"), "createPointerInList", ie.GetErrorMessage().c_str());
         return sciErr;
     }
 
index 8e896e6..dd30513 100644 (file)
@@ -16,7 +16,6 @@
 #include "gatewaystruct.hxx"
 #include "pointer.hxx"
 #include "context.hxx"
-#include "scilabexception.hxx"
 
 extern "C"
 {
@@ -79,9 +78,9 @@ SciErr createPointer(void* _pvCtx, int _iVar, void* _pvPtr)
             return sciErr;
         }
     }
-    catch (ast::ScilabError se)
+    catch (const ast::InternalError& ie)
     {
-        addErrorMessage(&sciErr, API_ERROR_NO_MORE_MEMORY, _("%s: %ls"), "createPointer", se.GetErrorMessage().c_str());
+        addErrorMessage(&sciErr, API_ERROR_NO_MORE_MEMORY, _("%s: %ls"), "createPointer", ie.GetErrorMessage().c_str());
         return sciErr;
     }
 
index 7210fc2..a94580d 100644 (file)
@@ -444,7 +444,7 @@ public :
             FREE(strErr);
             std::wstring wstError(pwstError);
             FREE(pwstError);
-            throw ScilabError(wstError, 999, e.getLocation());
+            throw InternalError(wstError, 999, e.getLocation());
             //Err, SimpleVar doesn't exist in Scilab scopes.
         }
     }
@@ -474,7 +474,7 @@ public :
             //restore previous prompt mode
             ConfigVariable::setSilentError(oldVal);
         }
-        catch (ScilabMessage sm)
+        catch (const InternalError& /* ie */)
         {
             //restore previous prompt mode
             ConfigVariable::setSilentError(oldVal);
@@ -525,7 +525,7 @@ public :
             e.getInit().accept(*this);
             getResult()->IncreaseRef();
         }
-        catch (ScilabError error)
+        catch (const InternalError& error)
         {
             throw error;
         }
index 7aa36d4..a7bdb05 100644 (file)
@@ -17,6 +17,7 @@
 #include <stdexcept>
 #include "location.hxx"
 #include "localization.hxx"
+//#include "configvariable.hxx"
 
 extern "C"
 {
@@ -32,41 +33,41 @@ extern "C"
 
 namespace ast
 {
+
+enum ExceptionType
+{
+    TYPE_ERROR,
+    TYPE_EXCEPTION
+};
+
 class ScilabException : public std::exception
 {
 public :
-    ScilabException()
-    {
-        createScilabException(L"", 0, Location());
-    }
+    ScilabException() {}
 
-    ScilabException(std::wstring _wstErrorMesssage)
+    ScilabException(const std::wstring& _wstErrorMesssage)
     {
-        setLastError(999, _wstErrorMesssage.c_str(), 0, NULL);
-        createScilabException(_wstErrorMesssage, 0, Location());
+        m_type = TYPE_EXCEPTION;
+        createScilabException(_wstErrorMesssage, 999, Location());
     }
 
-    ScilabException(std::string _stErrorMesssage)
+    ScilabException(const std::string& _stErrorMesssage)
     {
+        m_type = TYPE_EXCEPTION;
         wchar_t* pwst = to_wide_string(_stErrorMesssage.c_str());
-        setLastError(999, pwst, 0, NULL);
-        createScilabException(pwst, 0, Location());
+        createScilabException(pwst, 999, Location());
         FREE(pwst);
     }
-    ScilabException(const Location& _ErrorLocation)
-    {
-        createScilabException(L"", 0, _ErrorLocation);
-    }
 
-    ScilabException(std::wstring _wstErrorMesssage, int _iErrorNumber, const Location& _ErrorLocation)
+    ScilabException(const std::wstring& _wstErrorMesssage, int _iErrorNumber, const Location& _ErrorLocation)
     {
-        setLastError(_iErrorNumber, _wstErrorMesssage.c_str(), _ErrorLocation.first_line, NULL);
+        m_type = TYPE_EXCEPTION;
         createScilabException(_wstErrorMesssage, _iErrorNumber, _ErrorLocation);
     }
 
     virtual ~ScilabException() throw() {};
 
-    void SetErrorMessage(std::wstring _wstErrorMesssage)
+    void SetErrorMessage(const std::wstring& _wstErrorMesssage)
     {
         m_wstErrorMessage = _wstErrorMesssage;
     }
@@ -95,14 +96,25 @@ public :
     {
         return m_ErrorLocation;
     }
+
+    void SetErrorType(ExceptionType _type)
+    {
+        m_type = _type;
+    }
+
+    ExceptionType GetErrorType(void)
+    {
+        return m_type;
+    }
+
 protected :
     std::wstring m_wstErrorMessage;
-
     int m_iErrorNumber;
     Location m_ErrorLocation;
+    ExceptionType m_type;
 
 protected :
-    void createScilabException(std::wstring _wstErrorMessage, int _iErrorNumber, const Location& _ErrorLocation)
+    void createScilabException(const std::wstring& _wstErrorMessage, int _iErrorNumber, const Location& _ErrorLocation)
     {
         m_wstErrorMessage = _wstErrorMessage;
         m_iErrorNumber = _iErrorNumber;
@@ -110,44 +122,44 @@ protected :
     }
 };
 
-class ScilabError : public ScilabException
-{
-public :
-    ScilabError() : ScilabException() {}
-    ScilabError(std::wstring _wstErrorMesssage) : ScilabException(_wstErrorMesssage) {}
-    ScilabError(std::string _stErrorMesssage) : ScilabException(_stErrorMesssage) {}
-    ScilabError(const Location& _ErrorLocation) : ScilabException(_ErrorLocation) {}
-    ScilabError(std::wstring _wstErrorMesssage, int _iErrorNumber, const Location& _ErrorLocation) : ScilabException(_wstErrorMesssage, _iErrorNumber, _ErrorLocation) {}
-};
-
-class InternalAbort : public ScilabException
+class InternalError : public ScilabException
 {
 public :
-    InternalAbort() {}
-};
-
-class ScilabMessage : public ScilabException
-{
-public :
-    ScilabMessage() : ScilabException() {}
-    ScilabMessage(std::wstring _wstErrorMesssage)
+    InternalError(std::wstring _wstErrorMesssage) : ScilabException(_wstErrorMesssage)
     {
-        createScilabException(_wstErrorMesssage, 0, Location());
+        m_type = TYPE_ERROR;
+        // check on error number because error message can be empty.
+        if (getLastErrorNumber() == 0)
+        {
+            setLastError(999, _wstErrorMesssage.c_str(), 0, NULL);
+        }
     }
 
-    ScilabMessage(std::string _stErrorMesssage)
+    InternalError(std::string _stErrorMesssage) : ScilabException(_stErrorMesssage)
     {
-
-        wchar_t* pwst = to_wide_string(_stErrorMesssage.c_str());
-        createScilabException(pwst, 0, Location());
-        FREE(pwst);
+        m_type = TYPE_ERROR;
+        // check on error number because error message can be empty.
+        if (getLastErrorNumber() == 0)
+        {
+            setLastError(999, m_wstErrorMessage.c_str(), 0, NULL);
+        }
     }
 
-    ScilabMessage(const Location& _ErrorLocation) : ScilabException(_ErrorLocation) {}
-    ScilabMessage(std::wstring _wstErrorMesssage, int _iErrorNumber, const Location& _ErrorLocation)
+    InternalError(std::wstring _wstErrorMesssage, int _iErrorNumber, const Location& _ErrorLocation) : ScilabException(_wstErrorMesssage, _iErrorNumber, _ErrorLocation)
     {
-        createScilabException(_wstErrorMesssage, _iErrorNumber, _ErrorLocation);
+        m_type = TYPE_ERROR;
+        // check on error number because error message can be empty.
+        if (getLastErrorNumber() == 0)
+        {
+            setLastError(_iErrorNumber, _wstErrorMesssage.c_str(), _ErrorLocation.first_line, NULL);
+        }
     }
 };
+
+class InternalAbort : public ScilabException
+{
+public :
+    InternalAbort() {}
+};
 }
 #endif // !AST_SCILABEXCEPTION_HXX
index 696bc35..ec613b7 100644 (file)
@@ -57,9 +57,6 @@ types::InternalType* callOverload(const ast::Exp& e,
 
 types::InternalType* callOverload(std::wstring strType, types::InternalType* _paramL, types::InternalType* _paramR);
 
-
-types::List* getPropertyTree(ast::Exp* e, types::List* pList);
-
 types::InternalType* insertionCall(const ast::Exp& e, types::typed_list* _pArgs, types::InternalType* _pVar, types::InternalType* _pInsert);
 
 EXTERN_AST void callOnPrompt(void);
index 6da20f5..7a7773b 100644 (file)
@@ -31,8 +31,8 @@ public:
     /** \brief Construct a Location. */
     Location (void)
     {
-        first_line = last_line = 1;
-        first_column = last_column = 1;
+        first_line = last_line = 0;
+        first_column = last_column = 0;
     }
     /** \} */
 
index 8d1d382..d3728aa 100644 (file)
@@ -124,7 +124,7 @@ protected :
                 {
                     char message[bsiz];
                     os_sprintf(message, _("Can not allocate %.2f MB memory.\n"),  (double) ((double) m_iSize * (double) m_piDims[i] * sizeof(T)) / 1.e6);
-                    throw (ast::ScilabError(message));
+                    throw ast::InternalError(message);
                 }
 
                 m_iSize = iTmpSize;
@@ -136,9 +136,7 @@ protected :
                 m_pImgData = NULL;
                 char message[bsiz];
                 os_sprintf(message, _("Can not allocate negative size (%d).\n"), m_iSize);
-                ast::ScilabError se(message);
-                se.SetErrorNumber(999);
-                throw (se);
+                throw ast::InternalError(message);
             }
 
         }
@@ -170,9 +168,7 @@ protected :
         {
             char message[bsiz];
             os_sprintf(message, _("Can not allocate %.2f MB memory.\n"), (double)(m_iSize * sizeof(T)) / 1.e6);
-            ast::ScilabError se(message);
-            se.SetErrorNumber(999);
-            throw (se);
+            throw ast::InternalError(message);
         }
 
         m_iSizeMax = m_iSize;
@@ -407,7 +403,7 @@ public :
             {
                 std::wostringstream os;
                 os << _W("Invalid index.\n");
-                throw ast::ScilabError(os.str(), 999, e.getLocation());
+                throw ast::InternalError(os.str(), 999, e.getLocation());
             }
             out.push_back(_out);
         }
index 1aaab73..ff086af 100644 (file)
 #pragma warning (disable : 4251)
 #endif
 
-#include <vector>
+#include <list>
 #include <string>
-
-#include "internal.hxx"
+#include "dynlib_ast.h"
 
 namespace types
 {
+class InternalType;
+
 #ifndef NDEBUG
 class EXTERN_AST Inspector
 {
index cd935b6..e80f3ec 100644 (file)
@@ -30,8 +30,9 @@ extern "C"
 #include "visitor.hxx" // for invoke
 #include "callexp.hxx"
 #include "localization.hxx"
-#include "scilabexception.hxx"
-
+#ifndef NDEBUG
+#include "inspector.hxx"
+#endif
 
 #define bsiz 4096
 
index 2d0fd77..b237de0 100644 (file)
@@ -217,7 +217,7 @@ struct EXTERN_AST Sparse : GenericType
             {
                 std::wostringstream os;
                 os << _W("Invalid index.\n");
-                throw ast::ScilabError(os.str(), 999, e.getLocation());
+                throw ast::InternalError(os.str(), 999, e.getLocation());
             }
             out.push_back(_out);
         }
@@ -590,7 +590,7 @@ struct EXTERN_AST SparseBool : GenericType
             {
                 std::wostringstream os;
                 os << _W("Invalid index.\n");
-                throw ast::ScilabError(os.str(), 999, e.getLocation());
+                throw ast::InternalError(os.str(), 999, e.getLocation());
             }
             out.push_back(_out);
         }
index 0d0adf0..5ecd220 100644 (file)
@@ -127,7 +127,7 @@ public :
     //  _iRetCount  : is the number of output arguments (ie : [a,b] = myUserType(...), _iRetCount = 2)
     //  out         : after "invoke" execution, will contain results
     //  execFunc    : is used in case of macro call : Overload::call(L"A_Macro", in, _iRetCount, out, execFunc);
-    //  e           : Generally used to return the Location when thowing an error. ie : throw ast::ScilabError(L"error message", 999, e.getLocation());
+    //  e           : Generally used to return the Location when thowing an error. ie : throw ast::InternalError(L"error message", 999, e.getLocation());
     // Outputs :
     // if false, Scilab will call the macro %UserType_e,where UserType is the string return by the method getShortTypeStr()
     // if true, Scilab will set each elements of out in Scilab variables
index 0d9ab49..9a1645f 100644 (file)
@@ -42,7 +42,7 @@ namespace ast {
                         std::wostringstream os;
                         os << _W("Can not assign multiple value in a single variable") << std::endl;
                         //os << ((Location)e.getRightExp().getLocation()).getLocationString() << std::endl;
-                        throw ast::ScilabError(os.str(), 999, e.getRightExp().getLocation());
+                        throw ast::InternalError(os.str(), 999, e.getRightExp().getLocation());
                     }
 
                     pIT = getResult();
@@ -74,7 +74,7 @@ namespace ast {
                         {
                             std::wostringstream os;
                             os << _W("Redefining permanent variable.\n");
-                            throw ast::ScilabError(os.str(), 999, e.getLeftExp().getLocation());
+                            throw ast::InternalError(os.str(), 999, e.getLeftExp().getLocation());
                         }
                     }
 
@@ -107,7 +107,7 @@ namespace ast {
                     {
                         std::wostringstream os;
                         os << _W("Redefining permanent variable.\n");
-                        throw ast::ScilabError(os.str(), 999, e.getLeftExp().getLocation());
+                        throw ast::InternalError(os.str(), 999, e.getLeftExp().getLocation());
                     }
                 }
 
@@ -144,7 +144,7 @@ namespace ast {
                     // if the right hand is NULL.
                     std::wostringstream os;
                     os << _W("Unable to extract right part expression.\n");
-                    throw ast::ScilabError(os.str(), 999, e.getLeftExp().getLocation());
+                    throw ast::InternalError(os.str(), 999, e.getLeftExp().getLocation());
                 }
 
                 std::list<ExpHistory*> fields;
@@ -156,14 +156,14 @@ namespace ast {
                     }
                     std::wostringstream os;
                     os << _W("Get fields from expression failed.");
-                    throw ast::ScilabError(os.str(), 999, e.getRightExp().getLocation());
+                    throw ast::InternalError(os.str(), 999, e.getRightExp().getLocation());
                 }
 
                 try
                 {
                     pOut = evaluateFields(pCell, fields, pITR);
                 }
-                catch (ast::ScilabError error)
+                catch (const InternalError& error)
                 {
                     // catch error when call overload
                     for (std::list<ExpHistory*>::const_iterator i = fields.begin(), end = fields.end(); i != end; i++)
@@ -187,7 +187,7 @@ namespace ast {
                 {
                     std::wostringstream os;
                     os << _W("Fields evaluation failed.");
-                    throw ast::ScilabError(os.str(), 999, e.getRightExp().getLocation());
+                    throw ast::InternalError(os.str(), 999, e.getRightExp().getLocation());
                 }
 
                 if (pOut != NULL)
@@ -207,7 +207,7 @@ namespace ast {
                     //manage error
                     std::wostringstream os;
                     os << _W("Invalid Index.\n");
-                    throw ast::ScilabError(os.str(), 999, e.getRightExp().getLocation());
+                    throw ast::InternalError(os.str(), 999, e.getRightExp().getLocation());
                 }
 
                 return;
@@ -234,7 +234,7 @@ namespace ast {
                     // if the right hand is NULL.
                     std::wostringstream os;
                     os << _W("Unable to extract right part expression.\n");
-                    throw ast::ScilabError(os.str(), 999, e.getLeftExp().getLocation());
+                    throw ast::InternalError(os.str(), 999, e.getLeftExp().getLocation());
                 }
 
                 bool alreadyProcessed = false;
@@ -249,7 +249,7 @@ namespace ast {
                         {
                             std::wostringstream os;
                             os << _W("Redefining permanent variable.\n");
-                            throw ast::ScilabError(os.str(), 999, pCall->getLocation());
+                            throw ast::InternalError(os.str(), 999, pCall->getLocation());
                         }
 
                         // prevent delete after extractFullMatrix
@@ -272,7 +272,7 @@ namespace ast {
                         {
                             std::wostringstream os;
                             os << _W("Submatrix incorrectly defined.\n");
-                            throw ast::ScilabError(os.str(), 999, e.getLocation());
+                            throw ast::InternalError(os.str(), 999, e.getLocation());
                         }
 
 
@@ -298,7 +298,7 @@ namespace ast {
 
                         std::wostringstream os;
                         os << _W("Instruction left hand side: waiting for a name.");
-                        throw ast::ScilabError(os.str(), 999, e.getRightExp().getLocation());
+                        throw ast::InternalError(os.str(), 999, e.getRightExp().getLocation());
                     }
 
                     // prevent delete after extractFullMatrix
@@ -309,7 +309,7 @@ namespace ast {
                     {
                         pOut = evaluateFields(pCall, fields, pITR);
                     }
-                    catch (ast::ScilabError error)
+                    catch (const InternalError& error)
                     {
                         // catch error when call overload
                         for (std::list<ExpHistory*>::const_iterator i = fields.begin(), end = fields.end(); i != end; i++)
@@ -335,7 +335,7 @@ namespace ast {
                     {
                         std::wostringstream os;
                         os << _W("Fields evaluation failed.");
-                        throw ast::ScilabError(os.str(), 999, e.getRightExp().getLocation());
+                        throw ast::InternalError(os.str(), 999, e.getRightExp().getLocation());
                     }
                 }
 
@@ -371,7 +371,7 @@ namespace ast {
                     std::wostringstream os;
                     os << _W("Incompatible assignation: trying to assign ") << exec.getResultSize();
                     os << _W(" values in ") << iLhsCount << _W(" variables.") << std::endl;
-                    throw ast::ScilabError(os.str(), 999, e.getRightExp().getLocation());
+                    throw ast::InternalError(os.str(), 999, e.getRightExp().getLocation());
                 }
 
                 exps_t::const_reverse_iterator it;
@@ -445,7 +445,7 @@ namespace ast {
                     }
                     std::wostringstream os;
                     os << _W("Get fields from expression failed.");
-                    throw ast::ScilabError(os.str(), 999, e.getRightExp().getLocation());
+                    throw ast::InternalError(os.str(), 999, e.getRightExp().getLocation());
                 }
 
                 try
@@ -458,10 +458,10 @@ namespace ast {
                         }
                         std::wostringstream os;
                         os << _W("Fields evaluation failed.");
-                        throw ast::ScilabError(os.str(), 999, e.getRightExp().getLocation());
+                        throw ast::InternalError(os.str(), 999, e.getRightExp().getLocation());
                     }
                 }
-                catch (ScilabError error)
+                catch (const InternalError& error)
                 {
                     for (auto i : fields)
                     {
@@ -497,9 +497,9 @@ namespace ast {
             std::wostringstream os;
             os << _W("unknow script form");
             //os << ((Location)e.getRightExp().getLocation()).getLocationString() << std::endl;
-            throw ast::ScilabError(os.str(), 999, e.getRightExp().getLocation());
+            throw ast::InternalError(os.str(), 999, e.getRightExp().getLocation());
         }
-        catch (ast::ScilabError error)
+        catch (const InternalError& error)
         {
             throw error;
         }
index d1a52bb..1ce080f 100644 (file)
@@ -35,7 +35,7 @@ void RunVisitorT<T>::visitprivate(const CallExp &e)
             clearResult();
             std::wostringstream os;
             os << _W("Wrong number of output arguments.\n") << std::endl;
-            throw ast::ScilabError(os.str(), 999, e.getLocation());
+            throw ast::InternalError(os.str(), 999, e.getLocation());
         }
 
         //get function arguments
@@ -55,7 +55,7 @@ void RunVisitorT<T>::visitprivate(const CallExp &e)
 
                     std::wostringstream os;
                     os << _W("left side of optional parameter must be a variable") << std::endl;
-                    throw ast::ScilabError(os.str(), 999, e.getLocation());
+                    throw ast::InternalError(os.str(), 999, e.getLocation());
                 }
 
                 SimpleVar* pVar = pL->getAs<SimpleVar>();
@@ -174,7 +174,7 @@ void RunVisitorT<T>::visitprivate(const CallExp &e)
 
                             std::wostringstream os;
                             os << _W("Invalid index.\n");
-                            throw ast::ScilabError(os.str(), 999, e.getFirstLocation());
+                            throw ast::InternalError(os.str(), 999, e.getFirstLocation());
                         }
                     }
                     else
@@ -207,7 +207,7 @@ void RunVisitorT<T>::visitprivate(const CallExp &e)
                     {
                         std::wostringstream os;
                         os << _W("bad lhs, expected : ") << iRetCount << _W(" returned : ") << out.size() << std::endl;
-                        throw ScilabError(os.str(), 999, e.getLocation());
+                        throw InternalError(os.str(), 999, e.getLocation());
                     }
 
                     setExpectedSize(iSaveExpectedSize);
@@ -246,7 +246,7 @@ void RunVisitorT<T>::visitprivate(const CallExp &e)
                 {
                     std::wostringstream os;
                     os << _W("Invalid index.\n");
-                    throw ast::ScilabError(os.str(), 999, e.getFirstLocation());
+                    throw ast::InternalError(os.str(), 999, e.getFirstLocation());
                 }
             }
 
@@ -256,29 +256,6 @@ void RunVisitorT<T>::visitprivate(const CallExp &e)
                 pListArg->killMe();
             }
         }
-        catch (ScilabMessage & sm)
-        {
-            setExpectedSize(iSaveExpectedSize);
-            if(pIT != getResult())
-            {
-                pIT->killMe();
-            }
-
-            clearResult();
-            cleanInOut(in, out);
-            cleanOpt(opt);
-
-            if (pIT->isCallable())
-            {
-                Callable *pCall = pIT->getAs<Callable>();
-                if (ConfigVariable::getLastErrorFunction() == L"")
-                {
-                    ConfigVariable::setLastErrorFunction(pCall->getName());
-                }
-            }
-
-            throw sm;
-        }
         catch (InternalAbort & ia)
         {
             setExpectedSize(iSaveExpectedSize);
@@ -293,7 +270,7 @@ void RunVisitorT<T>::visitprivate(const CallExp &e)
 
             throw ia;
         }
-        catch (ScilabError & se)
+        catch (const InternalError& ie)
         {
             setExpectedSize(iSaveExpectedSize);
             if(pIT != getResult())
@@ -305,7 +282,7 @@ void RunVisitorT<T>::visitprivate(const CallExp &e)
             cleanInOut(in, out);
             cleanOpt(opt);
 
-            throw se;
+            throw ie;
         }
     }
 }
@@ -329,7 +306,7 @@ void RunVisitorT<T>::visitprivate(const CellCallExp &e)
 
             if (pIT->isCell() == false)
             {
-                throw ast::ScilabError(_W("[error] Cell contents reference from a non-cell array object.\n"), 999, e.getFirstLocation());
+                throw ast::InternalError(_W("[error] Cell contents reference from a non-cell array object.\n"), 999, e.getFirstLocation());
             }
             //Create list of indexes
             ast::exps_t exps = e.getArgs();
@@ -343,7 +320,7 @@ void RunVisitorT<T>::visitprivate(const CellCallExp &e)
                 std::wostringstream os;
                 os << _W("inconsistent row/column dimensions\n");
                 //os << ((*e.args_get().begin())->getLocation()).getLocationString() << std::endl;
-                throw ast::ScilabError(os.str(), 999, e.getFirstLocation());
+                throw ast::InternalError(os.str(), 999, e.getFirstLocation());
             }
 
             if (pList->getSize() == 1)
index bee3bad..e1b2739 100644 (file)
@@ -64,7 +64,7 @@ void RunVisitorT<T>::visitprivate(const MatrixExp &e)
                 {
                     (*col)->accept(*this);
                 }
-                catch (ScilabError& error)
+                catch (const InternalError& error)
                 {
                     if (poRow)
                     {
@@ -109,7 +109,7 @@ void RunVisitorT<T>::visitprivate(const MatrixExp &e)
                             {
                                 poRow = callOverloadMatrixExp(L"c", poRow, pIT);
                             }
-                            catch (ScilabError& error)
+                            catch (const InternalError& error)
                             {
                                 if (poResult)
                                 {
@@ -128,7 +128,7 @@ void RunVisitorT<T>::visitprivate(const MatrixExp &e)
                     pIT->killMe();
                     std::wostringstream os;
                     os << _W("unable to concatenate\n");
-                    throw ast::ScilabError(os.str(), 999, (*col)->getLocation());
+                    throw ast::InternalError(os.str(), 999, (*col)->getLocation());
                 }
 
                 GenericType* pGT = pIT->getAs<GenericType>();
@@ -154,7 +154,7 @@ void RunVisitorT<T>::visitprivate(const MatrixExp &e)
                     {
                         poRow = callOverloadMatrixExp(L"c", poRow, pGT);
                     }
-                    catch (ScilabError& error)
+                    catch (const InternalError& error)
                     {
                         if (poResult)
                         {
@@ -178,7 +178,7 @@ void RunVisitorT<T>::visitprivate(const MatrixExp &e)
                     }
                     std::wostringstream os;
                     os << _W("inconsistent row/column dimensions\n");
-                    throw ast::ScilabError(os.str(), 999, (*row)->getLocation());
+                    throw ast::InternalError(os.str(), 999, (*row)->getLocation());
                 }
 
                 // if we concatenate [Double Sparse], transform the Double to Sparse and perform [Sparse Sparse]
@@ -241,7 +241,7 @@ void RunVisitorT<T>::visitprivate(const MatrixExp &e)
                     {
                         poRow = callOverloadMatrixExp(L"c", pGTResult, pGT);
                     }
-                    catch (ScilabError& error)
+                    catch (const InternalError& error)
                     {
                         if (poResult)
                         {
@@ -282,7 +282,7 @@ void RunVisitorT<T>::visitprivate(const MatrixExp &e)
                 {
                     poResult = callOverloadMatrixExp(L"f", poResult, poRow);
                 }
-                catch (ScilabError& error)
+                catch (const InternalError& error)
                 {
                     throw error;
                 }
@@ -301,7 +301,7 @@ void RunVisitorT<T>::visitprivate(const MatrixExp &e)
                 {
                     poResult = callOverloadMatrixExp(L"f", pGTResult, pGT);
                 }
-                catch (ScilabError& error)
+                catch (const InternalError& error)
                 {
                     throw error;
                 }
@@ -316,7 +316,7 @@ void RunVisitorT<T>::visitprivate(const MatrixExp &e)
                 {
                     poResult = callOverloadMatrixExp(L"f", pGTResult, pGT);
                 }
-                catch (ScilabError& error)
+                catch (const InternalError& error)
                 {
                     throw error;
                 }
@@ -333,7 +333,7 @@ void RunVisitorT<T>::visitprivate(const MatrixExp &e)
                 }
                 std::wostringstream os;
                 os << _W("inconsistent row/column dimensions\n");
-                throw ast::ScilabError(os.str(), 999, (*e.getLines().begin())->getLocation());
+                throw ast::InternalError(os.str(), 999, (*e.getLines().begin())->getLocation());
             }
 
             // if we concatenate [Double Sparse], transform the Double to Sparse and perform [Sparse Sparse]
@@ -365,7 +365,7 @@ void RunVisitorT<T>::visitprivate(const MatrixExp &e)
                 {
                     poResult = callOverloadMatrixExp(L"f", pGTResult, pGT);
                 }
-                catch (ScilabError& error)
+                catch (const InternalError& error)
                 {
                     throw error;
                 }
@@ -393,7 +393,7 @@ void RunVisitorT<T>::visitprivate(const MatrixExp &e)
             setResult(Double::Empty());
         }
     }
-    catch (ast::ScilabError& error)
+    catch (const InternalError& error)
     {
         setResult(NULL);
         throw error;
@@ -424,21 +424,16 @@ types::InternalType* RunVisitorT<T>::callOverloadMatrixExp(std::wstring strType,
             Ret = Overload::call(L"%" + _paramL->getAs<List>()->getShortTypeStr() + L"_" + strType + L"_" + _paramR->getAs<List>()->getShortTypeStr(), in, 1, out, this, true);
         }
     }
-    catch (ast::ScilabError error)
+    catch (const InternalError& error)
     {
         cleanInOut(in, out);
         throw error;
     }
-    catch (ast::ScilabMessage msg)
-    {
-        cleanInOut(in, out);
-        throw ScilabError(msg.GetErrorMessage(), msg.GetErrorNumber(), msg.GetErrorLocation());
-    }
 
     if (Ret != Callable::OK)
     {
         cleanInOut(in, out);
-        throw ScilabError();
+        throw InternalError(ConfigVariable::getLastErrorMessage());
     }
 
     cleanIn(in, out);
index f541a5b..e62473d 100644 (file)
@@ -27,7 +27,7 @@ void RunVisitorT<T>::visitprivate(const OpExp &e)
             std::wostringstream os;
             os << _W("Incompatible output argument.\n");
             //os << ((Location)e.right_get().getLocation()).getLocationString() << std::endl;
-            throw ast::ScilabError(os.str(), 999, e.getRight().getLocation());
+            throw ast::InternalError(os.str(), 999, e.getRight().getLocation());
         }
         pITL = getResult();
 
@@ -39,7 +39,7 @@ void RunVisitorT<T>::visitprivate(const OpExp &e)
             std::wostringstream os;
             os << _W("Incompatible output argument.\n");
             //os << ((Location)e.right_get().getLocation()).getLocationString() << std::endl;
-            throw ast::ScilabError(os.str(), 999, e.getRight().getLocation());
+            throw ast::InternalError(os.str(), 999, e.getRight().getLocation());
         }
         pITR = getResult();
 
@@ -189,7 +189,7 @@ void RunVisitorT<T>::visitprivate(const OpExp &e)
             pITR->killMe();
         }
     }
-    catch (ast::ScilabError & error)
+    catch (ast::InternalError& error)
     {
         setResult(NULL);
         if (pResult)
@@ -230,7 +230,7 @@ void RunVisitorT<T>::visitprivate(const LogicalOpExp &e)
             std::wostringstream os;
             os << _W("Incompatible output argument.\n");
             //os << ((Location)e.right_get().getLocation()).getLocationString() << std::endl;
-            throw ast::ScilabError(os.str(), 999, e.getRight().getLocation());
+            throw ast::InternalError(os.str(), 999, e.getRight().getLocation());
         }
 
         setResult(NULL);
@@ -269,7 +269,7 @@ void RunVisitorT<T>::visitprivate(const LogicalOpExp &e)
                     std::wostringstream os;
                     os << _W("Incompatible output argument.\n");
                     //os << ((Location)e.right_get().getLocation()).getLocationString() << std::endl;
-                    throw ast::ScilabError(os.str(), 999, e.getRight().getLocation());
+                    throw ast::InternalError(os.str(), 999, e.getRight().getLocation());
                 }
 
                 if (pITR->getType() == GenericType::ScilabImplicitList)
@@ -304,7 +304,7 @@ void RunVisitorT<T>::visitprivate(const LogicalOpExp &e)
                     std::wostringstream os;
                     os << _W("Incompatible output argument.\n");
                     //os << ((Location)e.right_get().getLocation()).getLocationString() << std::endl;
-                    throw ast::ScilabError(os.str(), 999, e.getRight().getLocation());
+                    throw ast::InternalError(os.str(), 999, e.getRight().getLocation());
                 }
 
                 if (pITR->getType() == GenericType::ScilabImplicitList)
@@ -344,7 +344,7 @@ void RunVisitorT<T>::visitprivate(const LogicalOpExp &e)
         // unprotect pResult
         pResult->DecreaseRef();
     }
-    catch (ast::ScilabError error)
+    catch (ast::InternalError& error)
     {
         clearResult();
         error.SetErrorLocation(e.getLocation());
@@ -370,7 +370,7 @@ types::InternalType* RunVisitorT<T>::callOverloadOpExp(OpExp::Oper _oper, types:
         {
             Overload::generateNameAndCall(Overload::getNameFromOper(_oper), in, 1, out, this, true);
         }
-        catch (ast::ScilabError e)
+        catch (const ast::InternalError& e)
         {
             _paramR->DecreaseRef();
             throw e;
@@ -389,7 +389,7 @@ types::InternalType* RunVisitorT<T>::callOverloadOpExp(OpExp::Oper _oper, types:
     {
         Overload::generateNameAndCall(Overload::getNameFromOper(_oper), in, 1, out, this, true);
     }
-    catch (ast::ScilabError e)
+    catch (const ast::InternalError& e)
     {
         _paramL->DecreaseRef();
         _paramR->DecreaseRef();
index 9b0d8a4..325d552 100644 (file)
@@ -72,7 +72,7 @@ void RunVisitorT<T>::visitprivate(const CellExp &e)
             std::wostringstream os;
             os << _W("inconsistent row/column dimensions\n");
             //os << ((Location)(*row)->getLocation()).getLocationString() << std::endl;
-            throw ScilabError(os.str(), 999, (*row)->getLocation());
+            throw InternalError(os.str(), 999, (*row)->getLocation());
         }
     }
 
@@ -119,14 +119,14 @@ void RunVisitorT<T>::visitprivate(const FieldExp &e)
     {
         wchar_t szError[bsiz];
         os_swprintf(szError, bsiz, _W("/!\\ Unmanaged FieldExp.\n").c_str());
-        throw ScilabError(szError, 999, e.getLocation());
+        throw InternalError(szError, 999, e.getLocation());
     }
 
     try
     {
         e.getHead()->accept(*this);
     }
-    catch (const ScilabError& error)
+    catch (const InternalError& error)
     {
         throw error;
     }
@@ -135,7 +135,7 @@ void RunVisitorT<T>::visitprivate(const FieldExp &e)
     {
         wchar_t szError[bsiz];
         os_swprintf(szError, bsiz, _W("Attempt to reference field of non-structure array.\n").c_str());
-        throw ScilabError(szError, 999, e.getLocation());
+        throw InternalError(szError, 999, e.getLocation());
     }
 
     // TODO: handle case where getSize() > 1
@@ -146,7 +146,7 @@ void RunVisitorT<T>::visitprivate(const FieldExp &e)
         clearResult();
         wchar_t szError[bsiz];
         os_swprintf(szError, bsiz, _W("Not yet implemented in Scilab.\n").c_str());
-        throw ScilabError(szError, 999, e.getLocation());
+        throw InternalError(szError, 999, e.getLocation());
     }
 
     SimpleVar * psvRightMember = static_cast<SimpleVar *>(const_cast<Exp *>(e.getTail()));
@@ -165,7 +165,7 @@ void RunVisitorT<T>::visitprivate(const FieldExp &e)
     catch (std::wstring & err)
     {
         pValue->killMe();
-        throw ScilabError(err.c_str(), 999, e.getTail()->getLocation());
+        throw InternalError(err.c_str(), 999, e.getTail()->getLocation());
     }
 
     if (ok)
@@ -174,7 +174,7 @@ void RunVisitorT<T>::visitprivate(const FieldExp &e)
         {
             std::wostringstream os;
             os << _W("Invalid index.\n");
-            throw ScilabError(os.str(), 999, e.getLocation());
+            throw InternalError(os.str(), 999, e.getLocation());
         }
 
         setResult(pReturn);
@@ -217,7 +217,7 @@ void RunVisitorT<T>::visitprivate(const FieldExp &e)
         {
             Ret = Overload::call(L"%" + stType + L"_e", in, 1, out, this);
         }
-        catch (ast::ScilabError & se)
+        catch (const InternalError& ie)
         {
             try
             {
@@ -229,10 +229,10 @@ void RunVisitorT<T>::visitprivate(const FieldExp &e)
                 }
                 else
                 {
-                    throw se;
+                    throw ie;
                 }
             }
-            catch (ast::ScilabError & se)
+            catch (const InternalError& ie)
             {
                 // TList or Mlist
                 if (pValue->isList())
@@ -241,7 +241,7 @@ void RunVisitorT<T>::visitprivate(const FieldExp &e)
                 }
                 else
                 {
-                    throw se;
+                    throw ie;
                 }
             }
         }
@@ -250,7 +250,7 @@ void RunVisitorT<T>::visitprivate(const FieldExp &e)
         {
             cleanInOut(in, out);
             setResult(NULL);
-            throw ScilabError(ConfigVariable::getLastErrorMessage(), ConfigVariable::getLastErrorNumber(), e.getLocation());
+            throw InternalError(ConfigVariable::getLastErrorMessage(), ConfigVariable::getLastErrorNumber(), e.getLocation());
         }
 
         setResult(out);
@@ -261,7 +261,7 @@ void RunVisitorT<T>::visitprivate(const FieldExp &e)
         pValue->killMe();
         wchar_t szError[bsiz];
         os_swprintf(szError, bsiz, _W("Attempt to reference field of non-structure array.\n").c_str());
-        throw ScilabError(szError, 999, e.getLocation());
+        throw InternalError(szError, 999, e.getLocation());
     }
 }
 
@@ -390,7 +390,7 @@ void RunVisitorT<T>::visitprivate(const ForExp  &e)
         {
             std::wostringstream os;
             os << _W("Redefining permanent variable.\n");
-            throw ast::ScilabError(os.str(), 999, e.getVardec().getLocation());
+            throw ast::InternalError(os.str(), 999, e.getVardec().getLocation());
         }
 
         ctx->put(var, pIL);
@@ -427,7 +427,7 @@ void RunVisitorT<T>::visitprivate(const ForExp  &e)
                         {
                             std::wostringstream os;
                             os << _W("Redefining permanent variable.\n");
-                            throw ast::ScilabError(os.str(), 999, e.getVardec().getLocation());
+                            throw ast::InternalError(os.str(), 999, e.getVardec().getLocation());
                         }
 
                         ctx->put(var, pIL);
@@ -441,7 +441,7 @@ void RunVisitorT<T>::visitprivate(const ForExp  &e)
             {
                 e.getBody().accept(*this);
             }
-            catch (ScilabMessage& sm)
+            catch (const InternalError& ie)
             {
                 //unlock loop index and implicit list
                 pIL->DecreaseRef();
@@ -450,7 +450,7 @@ void RunVisitorT<T>::visitprivate(const ForExp  &e)
                 pIT->killMe();
 
                 setResult(NULL);
-                throw sm;
+                throw ie;
             }
 
             if (e.getBody().isBreak())
@@ -490,7 +490,7 @@ void RunVisitorT<T>::visitprivate(const ForExp  &e)
             {
                 std::wostringstream os;
                 os << _W("Redefining permanent variable.\n");
-                throw ast::ScilabError(os.str(), 999, e.getVardec().getLocation());
+                throw ast::InternalError(os.str(), 999, e.getVardec().getLocation());
             }
             ctx->put(var, pNew);
 
@@ -498,13 +498,13 @@ void RunVisitorT<T>::visitprivate(const ForExp  &e)
             {
                 e.getBody().accept(*this);
             }
-            catch (ScilabMessage& sm)
+            catch (const InternalError& ie)
             {
                 //implicit list
                 pIT->DecreaseRef();
                 pIT->killMe();
                 setResult(NULL);
-                throw sm;
+                throw ie;
             }
 
             if (e.getBody().isBreak())
@@ -535,7 +535,7 @@ void RunVisitorT<T>::visitprivate(const ForExp  &e)
         {
             pIT->DecreaseRef();
             pIT->killMe();
-            throw ScilabError(_W("for expression can only manage 1 or 2 dimensions variables\n"), 999, e.getVardec().getLocation());
+            throw InternalError(_W("for expression can only manage 1 or 2 dimensions variables\n"), 999, e.getVardec().getLocation());
         }
 
         symbol::Variable* var = e.getVardec().getAs<VarDec>()->getStack();
@@ -546,14 +546,14 @@ void RunVisitorT<T>::visitprivate(const ForExp  &e)
             {
                 pIT->DecreaseRef();
                 pIT->killMe();
-                throw ScilabError(_W("for expression : Wrong type for loop iterator.\n"), 999, e.getVardec().getLocation());
+                throw InternalError(_W("for expression : Wrong type for loop iterator.\n"), 999, e.getVardec().getLocation());
             }
 
             if (ctx->isprotected(var))
             {
                 std::wostringstream os;
                 os << _W("Redefining permanent variable.\n");
-                throw ast::ScilabError(os.str(), 999, e.getVardec().getLocation());
+                throw InternalError(os.str(), 999, e.getVardec().getLocation());
             }
             ctx->put(var, pNew);
 
@@ -561,13 +561,13 @@ void RunVisitorT<T>::visitprivate(const ForExp  &e)
             {
                 e.getBody().accept(*this);
             }
-            catch (ScilabMessage& sm)
+            catch (const InternalError& ie)
             {
                 //implicit list
                 pIT->DecreaseRef();
                 pIT->killMe();
                 setResult(NULL);
-                throw sm;
+                throw ie;
             }
 
             if (e.getBody().isBreak())
@@ -594,7 +594,7 @@ void RunVisitorT<T>::visitprivate(const ForExp  &e)
     {
         pIT->DecreaseRef();
         pIT->killMe();
-        throw ScilabError(_W("for expression : Wrong type for loop iterator.\n"), 999, e.getVardec().getLocation());
+        throw InternalError(_W("for expression : Wrong type for loop iterator.\n"), 999, e.getVardec().getLocation());
     }
 
     pIT->DecreaseRef();
@@ -688,10 +688,10 @@ void RunVisitorT<T>::visitprivate(const IntSelectExp &e)
     //                    //the good one
     //                    body->accept(*this);
     //                }
-    //                catch (ScilabMessage& sm)
+    //                catch (const InternalError& ie)
     //                {
     //                    pIT->killMe();
-    //                    throw sm;
+    //                    throw ie;
     //                }
 
     //                if (e.isBreakable() && body->isBreak())
@@ -765,10 +765,10 @@ void RunVisitorT<T>::visitprivate(const StringSelectExp &e)
                         //the good one
                         body->accept(*this);
                     }
-                    catch (ScilabMessage& sm)
+                    catch (const InternalError& ie)
                     {
                         pIT->killMe();
-                        throw sm;
+                        throw ie;
                     }
 
                     if (e.isBreakable() && body->isBreak())
@@ -835,11 +835,11 @@ void RunVisitorT<T>::visitprivate(const SelectExp &e)
                         //the good one
                         pCase->getBody()->accept(*this);
                     }
-                    catch (ScilabMessage& sm)
+                    catch (const InternalError& ie)
                     {
                         pIT->DecreaseRef();
                         pIT->killMe();
-                        throw sm;
+                        throw ie;
                     }
 
                     if (e.isBreakable() && pCase->getBody()->isBreak())
@@ -877,14 +877,14 @@ void RunVisitorT<T>::visitprivate(const SelectExp &e)
             //default case
             e.getDefaultCase()->accept(*this);
         }
-        catch (ScilabMessage& sm)
+        catch (const InternalError& ie)
         {
             if (pIT)
             {
                 pIT->DecreaseRef();
                 pIT->killMe();
             }
-            throw sm;
+            throw ie;
         }
 
         if (e.isBreakable() && e.getDefaultCase()->isBreak())
@@ -994,16 +994,7 @@ void RunVisitorT<T>::visitprivate(const SeqExp  &e)
 
                         bImplicitCall = true;
                     }
-                    catch (ScilabMessage& sm)
-                    {
-                        if (ConfigVariable::getLastErrorFunction() == L"")
-                        {
-                            ConfigVariable::setLastErrorFunction(pCall->getName());
-                        }
-
-                        throw sm;
-                    }
-                    catch (ast::ScilabError & se)
+                    catch (const InternalError& ie)
                     {
                         if (ConfigVariable::getLastErrorFunction() == L"")
                         {
@@ -1011,7 +1002,7 @@ void RunVisitorT<T>::visitprivate(const SeqExp  &e)
                             ConfigVariable::setLastErrorLine(e.getLocation().first_line);
                         }
 
-                        throw se;
+                        throw ie;
                     }
                 }
 
@@ -1055,24 +1046,10 @@ void RunVisitorT<T>::visitprivate(const SeqExp  &e)
                 break;
             }
         }
-        catch (ScilabMessage& sm)
+        catch (const InternalError& ie)
         {
-            ConfigVariable::fillWhereError(sm.GetErrorLocation().first_line);
-            throw sm;
-        }
-        catch (const ScilabError& se)
-        {
-            // check on error number because error message can be empty.
-            if (ConfigVariable::getLastErrorNumber() == 0)
-            {
-                ConfigVariable::setLastErrorMessage(se.GetErrorMessage());
-                ConfigVariable::setLastErrorNumber(se.GetErrorNumber());
-                ConfigVariable::setLastErrorLine(se.GetErrorLocation().first_line);
-                ConfigVariable::setLastErrorFunction(wstring(L""));
-            }
-
-            ConfigVariable::fillWhereError(se.GetErrorLocation().first_line);
-            throw ScilabMessage(se.GetErrorMessage(), se.GetErrorNumber(), se.GetErrorLocation());
+            ConfigVariable::fillWhereError(ie.GetErrorLocation().first_line);
+            throw ie;
         }
 
         // If something other than NULL is given to setResult, then that would imply
@@ -1114,7 +1091,7 @@ void RunVisitorT<T>::visitprivate(const NotExp &e)
         if (Ret != Callable::OK)
         {
             cleanInOut(in, out);
-            throw ScilabError(ConfigVariable::getLastErrorMessage(), ConfigVariable::getLastErrorNumber(), e.getLocation());
+            throw InternalError(ConfigVariable::getLastErrorMessage(), ConfigVariable::getLastErrorNumber(), e.getLocation());
         }
 
         setResult(out);
@@ -1132,7 +1109,7 @@ void RunVisitorT<T>::visitprivate(const TransposeExp &e)
         clearResult();
         wchar_t szError[bsiz];
         os_swprintf(szError, bsiz, _W("%ls: Can not transpose multiple elements.\n").c_str(), L"Transpose");
-        throw ScilabError(szError, 999, e.getLocation());
+        throw InternalError(szError, 999, e.getLocation());
     }
 
     InternalType * pValue = getResult();
@@ -1172,7 +1149,7 @@ void RunVisitorT<T>::visitprivate(const TransposeExp &e)
         if (Ret != Callable::OK)
         {
             cleanInOut(in, out);
-            throw ScilabError(ConfigVariable::getLastErrorMessage(), ConfigVariable::getLastErrorNumber(), e.getLocation());
+            throw InternalError(ConfigVariable::getLastErrorMessage(), ConfigVariable::getLastErrorNumber(), e.getLocation());
         }
 
         setResult(out);
@@ -1256,7 +1233,7 @@ void RunVisitorT<T>::visitprivate(const FunctionDec & e)
         FREE(pstFuncName);
         FREE(pwstError);
         delete pMacro;
-        throw ScilabError(wstError, 999, e.getLocation());
+        throw InternalError(wstError, 999, e.getLocation());
     }
 
 
@@ -1265,7 +1242,7 @@ void RunVisitorT<T>::visitprivate(const FunctionDec & e)
         delete pMacro;
         std::wostringstream os;
         os << _W("Redefining permanent variable.\n");
-        throw ScilabError(os.str(), 999, e.getLocation());
+        throw InternalError(os.str(), 999, e.getLocation());
     }
 
     ctx->addMacro(pMacro);
@@ -1283,7 +1260,7 @@ void RunVisitorT<T>::visitprivate(const ListExp &e)
         pITStart->killMe();
         wchar_t szError[bsiz];
         os_swprintf(szError, bsiz, _W("%ls: Wrong type for argument %d: Real scalar expected.\n").c_str(), L"':'", 1);
-        throw ScilabError(szError, 999, e.getLocation());
+        throw InternalError(szError, 999, e.getLocation());
     }
     InternalType * piStart = pITStart;
 
@@ -1296,7 +1273,7 @@ void RunVisitorT<T>::visitprivate(const ListExp &e)
         pITStep->killMe();
         wchar_t szError[bsiz];
         os_swprintf(szError, bsiz, _W("%ls: Wrong type for argument %d: Real scalar expected.\n").c_str(), L"':'", 2);
-        throw ScilabError(szError, 999, e.getLocation());
+        throw InternalError(szError, 999, e.getLocation());
     }
     InternalType* piStep = pITStep;
 
@@ -1310,7 +1287,7 @@ void RunVisitorT<T>::visitprivate(const ListExp &e)
         pITEnd->killMe();
         wchar_t szError[bsiz];
         os_swprintf(szError, bsiz, _W("%ls: Wrong type for argument %d: Real scalar expected.\n").c_str(), L"':'", 3);
-        throw ScilabError(szError, 999, e.getLocation());
+        throw InternalError(szError, 999, e.getLocation());
     }
     InternalType* piEnd = pITEnd;
 
@@ -1385,21 +1362,16 @@ void RunVisitorT<T>::visitprivate(const ListExp &e)
             Ret = Overload::call(L"%" + piStart->getShortTypeStr() + L"_b_" + piEnd->getShortTypeStr(), in, 1, out, this, true);
         }
     }
-    catch (ScilabError& error)
+    catch (const InternalError& error)
     {
         cleanInOut(in, out);
         throw error;
     }
-    catch (ast::ScilabMessage msg)
-    {
-        cleanInOut(in, out);
-        throw msg;
-    }
 
     if (Ret != Callable::OK)
     {
         cleanInOut(in, out);
-        throw ScilabError(ConfigVariable::getLastErrorMessage(), ConfigVariable::getLastErrorNumber(), e.getLocation());
+        throw InternalError(ConfigVariable::getLastErrorMessage(), ConfigVariable::getLastErrorNumber(), e.getLocation());
     }
 
     setResult(out);
index 829cc33..4b3c9a5 100644 (file)
@@ -547,7 +547,7 @@ const std::wstring* getStructNameFromExp(const ast::Exp* _pExp)
         std::wostringstream os;
         os << _W("Unknow expression");
         //os << ((Location)e.getRightExp().getLocation()).getLocationString() << std::endl;
-        throw ast::ScilabError(os.str(), 999, _pExp->getLocation());
+        throw ast::InternalError(os.str(), 999, _pExp->getLocation());
     }
     return NULL;
 }
@@ -595,17 +595,17 @@ InternalType* callOverload(const ast::Exp& e, std::wstring _strType, typed_list*
     if ((_dest  && _dest->isTList() && pFunc == NULL) == false || _source->isListDelete())
     {
         bool bThrow = false;
-        ast::ScilabError se;
+        const ast::InternalError* ie;
         ast::ExecVisitor exec;
 
         try
         {
             ret = Overload::call(function_name, in, 1, out, &exec);
         }
-        catch (ast::ScilabError error)
+        catch (const ast::InternalError& error)
         {
             bThrow = true;
-            se = error;
+            ie = &error;
         }
 
         // unprotect variables
@@ -624,13 +624,13 @@ InternalType* callOverload(const ast::Exp& e, std::wstring _strType, typed_list*
         {
             if (bThrow)
             {
-                throw se;
+                throw *ie;
             }
 
             //manage error
             std::wostringstream os;
             os << _W("Error in overload function: ") << function_name << std::endl;
-            throw ast::ScilabError(os.str(), 999, e.getLocation());
+            throw ast::InternalError(os.str(), 999, e.getLocation());
         }
     }
 
@@ -801,7 +801,7 @@ InternalType* evaluateFields(const ast::Exp* _pExp, std::list<ExpHistory*>& fiel
         {
             std::wostringstream os;
             os << _W("Redefining permanent variable.\n");
-            throw ast::ScilabError(os.str(), 999, _pExp->getLocation());
+            throw ast::InternalError(os.str(), 999, _pExp->getLocation());
         }
 
         InternalType* pIT = ctx->getCurrentLevel(pFirstField->getExp()->getSymbol());
@@ -814,7 +814,7 @@ InternalType* evaluateFields(const ast::Exp* _pExp, std::list<ExpHistory*>& fiel
             {
                 std::wostringstream os;
                 os << _W("Unexpected redefinition of Scilab function or variable.");
-                throw ast::ScilabError(os.str(), 999, _pExp->getLocation());
+                throw ast::InternalError(os.str(), 999, _pExp->getLocation());
             }
 
             if (pFirstField->isCellExp())
@@ -870,7 +870,7 @@ InternalType* evaluateFields(const ast::Exp* _pExp, std::list<ExpHistory*>& fiel
             {
                 std::wostringstream os;
                 os << _W("Wrong insertion : use extraction with {} only on a Cell.");
-                throw ast::ScilabError(os.str(), 999, _pExp->getLocation());
+                throw ast::InternalError(os.str(), 999, _pExp->getLocation());
             }
 
             if (pITCurrent->isStruct())
@@ -884,7 +884,7 @@ InternalType* evaluateFields(const ast::Exp* _pExp, std::list<ExpHistory*>& fiel
                     {
                         std::wostringstream os;
                         os << _W("Invalid index.");
-                        throw ast::ScilabError(os.str(), 999, _pExp->getLocation());
+                        throw ast::InternalError(os.str(), 999, _pExp->getLocation());
                     }
 
                     // resize current struct
@@ -931,7 +931,7 @@ InternalType* evaluateFields(const ast::Exp* _pExp, std::list<ExpHistory*>& fiel
                         {
                             std::wostringstream os;
                             os << _W("Unable to insert multiple item in a Struct.");
-                            throw ast::ScilabError(os.str(), 999, _pExp->getLocation());
+                            throw ast::InternalError(os.str(), 999, _pExp->getLocation());
                         }
 
                         // extract field x and append it to elements for next recursion.
@@ -1006,7 +1006,7 @@ InternalType* evaluateFields(const ast::Exp* _pExp, std::list<ExpHistory*>& fiel
                             pList->killMe();
                             std::wostringstream os;
                             os << _W("Unable to insert multiple item in a List.");
-                            throw ast::ScilabError(os.str(), 999, _pExp->getLocation());
+                            throw ast::InternalError(os.str(), 999, _pExp->getLocation());
                         }
 
                         double* pdblArgs = (*pArgs)[0]->getAs<Double>()->get();
@@ -1106,7 +1106,7 @@ InternalType* evaluateFields(const ast::Exp* _pExp, std::list<ExpHistory*>& fiel
                 {
                     std::wostringstream os;
                     os << _W("Wrong insertion.");
-                    throw ast::ScilabError(os.str(), 999, _pExp->getLocation());
+                    throw ast::InternalError(os.str(), 999, _pExp->getLocation());
 
                     //                    // pITCurrent is an extraction of other Type
                     //                    for (int iLoop = 0; iLoop < pL->getSize(); iLoop++)
@@ -1326,7 +1326,7 @@ InternalType* evaluateFields(const ast::Exp* _pExp, std::list<ExpHistory*>& fiel
                                 {
                                     std::wostringstream os;
                                     os << _W("Invalid index.");
-                                    throw ast::ScilabError(os.str(), 999, _pExp->getLocation());
+                                    throw ast::InternalError(os.str(), 999, _pExp->getLocation());
                                 }
 
                                 // resize current Cell
@@ -1349,7 +1349,7 @@ InternalType* evaluateFields(const ast::Exp* _pExp, std::list<ExpHistory*>& fiel
                                 {
                                     std::wostringstream os;
                                     os << _W("Invalid index.");
-                                    throw ast::ScilabError(os.str(), 999, _pExp->getLocation());
+                                    throw ast::InternalError(os.str(), 999, _pExp->getLocation());
                                 }
 
                                 // resize current Cell
@@ -1365,7 +1365,7 @@ InternalType* evaluateFields(const ast::Exp* _pExp, std::list<ExpHistory*>& fiel
                             // only a(x)
                             std::wostringstream os;
                             os << _W("Wrong insertion in a Cell.");
-                            throw ast::ScilabError(os.str(), 999, _pExp->getLocation());
+                            throw ast::InternalError(os.str(), 999, _pExp->getLocation());
                         }
                     }
                 }
@@ -1373,7 +1373,7 @@ InternalType* evaluateFields(const ast::Exp* _pExp, std::list<ExpHistory*>& fiel
                 {
                     std::wostringstream os;
                     os << _W("Wrong insertion in a Cell.");
-                    throw ast::ScilabError(os.str(), 999, _pExp->getLocation());
+                    throw ast::InternalError(os.str(), 999, _pExp->getLocation());
                 }
             }
             else if (pITCurrent->isUserType()) // not a Scilab defined datatype, access field after field
@@ -1448,7 +1448,7 @@ InternalType* evaluateFields(const ast::Exp* _pExp, std::list<ExpHistory*>& fiel
             {
                 std::wostringstream os;
                 os << _W("Wrong insertion : function or macro are not expected.");
-                throw ast::ScilabError(os.str(), 999, _pExp->getLocation());
+                throw ast::InternalError(os.str(), 999, _pExp->getLocation());
             }
             else
             {
@@ -1482,7 +1482,7 @@ InternalType* evaluateFields(const ast::Exp* _pExp, std::list<ExpHistory*>& fiel
             {
                 std::wostringstream os;
                 os << _W("evaluateFields : Cannot insert without arguments.");
-                throw ast::ScilabError(os.str(), 999, _pExp->getLocation());
+                throw ast::InternalError(os.str(), 999, _pExp->getLocation());
             }
 
             if (pEH->isCellExp())
@@ -1493,7 +1493,7 @@ InternalType* evaluateFields(const ast::Exp* _pExp, std::list<ExpHistory*>& fiel
                 {
                     std::wostringstream os;
                     os << _W("Wrong insertion in a Cell.");
-                    throw ast::ScilabError(os.str(), 999, _pExp->getLocation());
+                    throw ast::InternalError(os.str(), 999, _pExp->getLocation());
                 }
 
                 pCell->insertCell(pArgs, _pAssignValue);
@@ -1506,7 +1506,7 @@ InternalType* evaluateFields(const ast::Exp* _pExp, std::list<ExpHistory*>& fiel
                 {
                     std::wostringstream os;
                     os << _W("Submatrix incorrectly defined.\n");
-                    throw ast::ScilabError(os.str(), 999, _pExp->getLocation());
+                    throw ast::InternalError(os.str(), 999, _pExp->getLocation());
                 }
 
                 if (pEH->setCurrent(pIT))
@@ -1614,7 +1614,7 @@ InternalType* evaluateFields(const ast::Exp* _pExp, std::list<ExpHistory*>& fiel
                 {
                     std::wostringstream os;
                     os << _W("Submatrix incorrectly defined.\n");
-                    throw ast::ScilabError(os.str(), 999, _pExp->getLocation());
+                    throw ast::InternalError(os.str(), 999, _pExp->getLocation());
                 }
 
                 if (pEHParent->setCurrent(pIT))
@@ -1647,7 +1647,7 @@ InternalType* evaluateFields(const ast::Exp* _pExp, std::list<ExpHistory*>& fiel
 
         return ctx->getCurrentLevel(pFirstField->getExp()->getSymbol());
     }
-    catch (ast::ScilabError error)
+    catch (const ast::InternalError error)
     {
         for (std::list<ExpHistory*>::reverse_iterator i = workFields.rbegin(); i != workFields.rend(); ++i)
         {
@@ -1843,7 +1843,7 @@ InternalType* insertionCall(const ast::Exp& e, typed_list* _pArgs, InternalType*
                 //manage error
                 std::wostringstream os;
                 os << _W("Invalid Index.\n");
-                throw ast::ScilabError(os.str(), 999, e.getLocation());
+                throw ast::InternalError(os.str(), 999, e.getLocation());
             }
 
             pStr->addField(pS->get(0));
@@ -2083,7 +2083,7 @@ InternalType* insertionCall(const ast::Exp& e, typed_list* _pArgs, InternalType*
                     //manage error
                     std::wostringstream os;
                     os << _W("Invalid Index.\n");
-                    throw ast::ScilabError(os.str(), 999, e.getLocation());
+                    throw ast::InternalError(os.str(), 999, e.getLocation());
                 }
 
                 if (_pInsert->isListDelete())
@@ -2191,7 +2191,7 @@ InternalType* insertionCall(const ast::Exp& e, typed_list* _pArgs, InternalType*
                         //manage error
                         std::wostringstream os;
                         os << _W("Invalid Index.\n");
-                        throw ast::ScilabError(os.str(), 999, e.getLocation());
+                        throw ast::InternalError(os.str(), 999, e.getLocation());
                     }
 
                     if (_pInsert->isListDelete())
@@ -2330,7 +2330,7 @@ InternalType* insertionCall(const ast::Exp& e, typed_list* _pArgs, InternalType*
                     }
                     else
                     {
-                        throw ast::ScilabMessage();
+                        throw ast::InternalError(ConfigVariable::getLastErrorMessage(), ConfigVariable::getLastErrorNumber(), e.getLocation());
                     }
                 }
             }
@@ -2368,7 +2368,7 @@ InternalType* insertionCall(const ast::Exp& e, typed_list* _pArgs, InternalType*
                 //manage error
                 std::wostringstream os;
                 os << _W("Wrong insertion: A Cell expected: use {...} instead of (...).\n");
-                throw ast::ScilabError(os.str(), 999, e.getLocation());
+                throw ast::InternalError(os.str(), 999, e.getLocation());
             }
         }
         else
@@ -2409,52 +2409,6 @@ void callOnPrompt(void)
     }
 }
 
-List* getPropertyTree(ast::Exp* e, List* pList)
-{
-
-    //a.b
-    ast::SimpleVar* pVar = dynamic_cast<ast::SimpleVar*>(e);
-    if (pVar)
-    {
-        pList->append(new String(pVar->getSymbol().getName().c_str()));
-        return pList;
-    }
-
-    //a(x).b
-    ast::CallExp* pCall = dynamic_cast<ast::CallExp*>(e);
-    if (pCall)
-    {
-        pList = getPropertyTree(&pCall->getName(), pList);
-        ast::ExecVisitor exec;
-        ast::exps_t exps = pCall->getArgs();
-        for (auto exp : exps)
-        {
-            try
-            {
-                exp->accept(exec);
-                pList->append(exec.getResult());
-                exec.clearResult();
-            }
-            catch (ast::ScilabException e)
-            {
-                throw e;
-            }
-        }
-        return pList;
-    }
-
-    //a.b.c
-    ast::FieldExp* pField = dynamic_cast<ast::FieldExp*>(e);
-    if (pField)
-    {
-        pList = getPropertyTree(pField->getHead(), pList);
-        pList = getPropertyTree(pField->getTail(), pList);
-        return pList;
-    }
-
-    return pList;
-}
-
 ast::Exp* callTyper(ast::Exp* _tree, std::wstring _msg)
 {
     ast::Exp* newTree = NULL;
index fb54d1b..3a9e7b7 100644 (file)
@@ -15,7 +15,6 @@
 #include "operations.hxx"
 #include "double.hxx"
 #include "int.hxx"
-#include "scilabexception.hxx"
 
 extern "C"
 {
@@ -1071,7 +1070,7 @@ InternalType* add_M_M(T *_pL, U *_pR)
 
     if (iDimsL != iDimsR)
     {
-        throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+        throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
     }
 
     int* piDimsL = _pL->getDimsArray();
@@ -1081,7 +1080,7 @@ InternalType* add_M_M(T *_pL, U *_pR)
     {
         if (piDimsL[i] != piDimsR[i])
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
     }
 
@@ -1099,7 +1098,7 @@ InternalType* add_M_MC(T *_pL, U *_pR)
 
     if (iDimsL != iDimsR)
     {
-        throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+        throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
     }
 
     int* piDimsL = _pL->getDimsArray();
@@ -1109,7 +1108,7 @@ InternalType* add_M_MC(T *_pL, U *_pR)
     {
         if (piDimsL[i] != piDimsR[i])
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
     }
 
@@ -1156,7 +1155,7 @@ InternalType* add_MC_MC(T *_pL, U *_pR)
 
     if (iDimsL != iDimsR)
     {
-        throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+        throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
     }
 
     int* piDimsL = _pL->getDimsArray();
@@ -1166,7 +1165,7 @@ InternalType* add_MC_MC(T *_pL, U *_pR)
     {
         if (piDimsL[i] != piDimsR[i])
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
     }
 
@@ -1556,7 +1555,7 @@ InternalType* add_M_M<String, String, String>(String* _pL, String* _pR)
 
     if (iDimsL != iDimsR)
     {
-        throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+        throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
     }
 
     int* piDimsL = _pL->getDimsArray();
@@ -1566,7 +1565,7 @@ InternalType* add_M_M<String, String, String>(String* _pL, String* _pR)
     {
         if (piDimsL[i] != piDimsR[i])
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
     }
 
@@ -1694,7 +1693,7 @@ template<> InternalType* add_M_M<Polynom, Polynom, Polynom>(Polynom* _pL, Polyno
         std::wostringstream os;
         os << _W("variables don't have the same formal variable");
         //os << ((Location)e.right_get().getLocation()).getLocationString() << std::endl;
-        throw ast::ScilabError(os.str());
+        throw ast::InternalError(os.str());
     }
     if (_pR->isIdentity())
     {
@@ -1902,7 +1901,7 @@ template<> InternalType* add_M_M<Polynom, Polynom, Polynom>(Polynom* _pL, Polyno
     {
         wchar_t pMsg[bsiz];
         os_swprintf(pMsg, bsiz, _W("Error: operator %ls: Matrix dimensions must agree (op1 is %ls, op2 is %ls).\n").c_str(),  L"+", _pL->DimToString().c_str(), _pR->DimToString().c_str());
-        throw ast::ScilabError(pMsg);
+        throw ast::InternalError(pMsg);
     }
 
     int* piDims1 = _pL->getDimsArray();
@@ -1914,7 +1913,7 @@ template<> InternalType* add_M_M<Polynom, Polynom, Polynom>(Polynom* _pL, Polyno
         {
             wchar_t pMsg[bsiz];
             os_swprintf(pMsg, bsiz, _W("Error: operator %ls: Matrix dimensions must agree (op1 is %ls, op2 is %ls).\n").c_str(),  L"+", _pL->DimToString().c_str(), _pR->DimToString().c_str());
-            throw ast::ScilabError(pMsg);
+            throw ast::InternalError(pMsg);
         }
     }
 
@@ -2110,7 +2109,7 @@ template<> InternalType* add_M_M<Double, Polynom, Polynom>(Double* _pL, Polynom*
     {
         wchar_t pMsg[bsiz];
         os_swprintf(pMsg, bsiz, _W("Error: operator %ls: Matrix dimensions must agree (op1 is %ls, op2 is %ls).\n").c_str(),  L"+", _pL->DimToString().c_str(), _pR->DimToString().c_str());
-        throw ast::ScilabError(pMsg);
+        throw ast::InternalError(pMsg);
     }
 
     int* piDims1 = _pR->getDimsArray();
@@ -2122,7 +2121,7 @@ template<> InternalType* add_M_M<Double, Polynom, Polynom>(Double* _pL, Polynom*
         {
             wchar_t pMsg[bsiz];
             os_swprintf(pMsg, bsiz, _W("Error: operator %ls: Matrix dimensions must agree (op1 is %ls, op2 is %ls).\n").c_str(),  L"+", _pL->DimToString().c_str(), _pR->DimToString().c_str());
-            throw ast::ScilabError(pMsg);
+            throw ast::InternalError(pMsg);
         }
     }
 
@@ -2284,7 +2283,7 @@ template<> InternalType* add_M_M<Sparse, Sparse, Sparse>(Sparse* _pL, Sparse* _p
      if (_pL->getRows() != _pR->getRows() || _pL->getCols() != _pR->getCols())
      {
          //dimensions not match
-         throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+         throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
      }
 
      if (_pL->nonZeros() == 0)
@@ -2456,7 +2455,7 @@ template<> InternalType* add_M_M<Sparse, Double, Double>(Sparse* _pL, Double* _p
     }
     else
     {
-        throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+        throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
     }
 }
 
index 45530d1..e5e011b 100644 (file)
@@ -536,7 +536,7 @@ InternalType* and_M_M(T *_pL, U *_pR)
 
     if (iDimsL != iDimsR)
     {
-        throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+        throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
     }
 
     int* piDimsL = _pL->getDimsArray();
@@ -546,7 +546,7 @@ InternalType* and_M_M(T *_pL, U *_pR)
     {
         if (piDimsL[i] != piDimsR[i])
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
     }
 
@@ -625,7 +625,7 @@ InternalType* and_int_M_M(T *_pL, U *_pR)
 
     if (iDimsL != iDimsR)
     {
-        throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+        throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
     }
 
     int* piDimsL = _pL->getDimsArray();
@@ -635,7 +635,7 @@ InternalType* and_int_M_M(T *_pL, U *_pR)
     {
         if (piDimsL[i] != piDimsR[i])
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
     }
 
@@ -704,7 +704,7 @@ InternalType* and_M_M<SparseBool, SparseBool, SparseBool>(SparseBool* _pL, Spars
 
     if (_pL->getRows() != _pR->getRows() || _pL->getCols() != _pR->getCols())
     {
-        throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+        throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
     }
 
     return _pL->newLogicalAnd(*_pR);
index 725ec22..1877f1d 100644 (file)
@@ -3697,7 +3697,7 @@ types::InternalType* compequal_M_M<GraphicHandle, GraphicHandle, Bool>(GraphicHa
     /* check dimension*/
     if (_pL->getDims() != _pR->getDims())
     {
-        throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+        throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
     }
 
     int* piDimsL = _pL->getDimsArray();
@@ -3707,7 +3707,7 @@ types::InternalType* compequal_M_M<GraphicHandle, GraphicHandle, Bool>(GraphicHa
     {
         if (piDimsL[i] != piDimsR[i])
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
     }
 
index 1138705..fe095f6 100644 (file)
@@ -16,8 +16,6 @@
 #include "sparse.hxx"
 #include "int.hxx"
 
-#include "scilabexception.hxx"
-
 extern "C"
 {
 #include "localization.h"
@@ -57,7 +55,7 @@ InternalType *GenericLess(InternalType *_pLeftOperand, InternalType *_pRightOper
         int iResult = DoubleLessDouble(pL, pR, (Bool**)&pResult);
         if (iResult)
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
 
         return pResult;
@@ -74,7 +72,7 @@ InternalType *GenericLess(InternalType *_pLeftOperand, InternalType *_pRightOper
         int iResult = SparseLessSparse(pL, pR, (SparseBool**)&pResult);
         if (iResult)
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
 
         return pResult;
@@ -91,7 +89,7 @@ InternalType *GenericLess(InternalType *_pLeftOperand, InternalType *_pRightOper
         int iResult = DoubleLessSparse(pL, pR, (SparseBool**)&pResult);
         if (iResult)
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
 
         return pResult;
@@ -108,7 +106,7 @@ InternalType *GenericLess(InternalType *_pLeftOperand, InternalType *_pRightOper
         int iResult = SparseLessDouble(pL, pR, (SparseBool**)&pResult);
         if (iResult)
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
 
         return pResult;
@@ -129,7 +127,7 @@ InternalType *GenericLess(InternalType *_pLeftOperand, InternalType *_pRightOper
         int iResult = IntLessInt(_pLeftOperand, _pRightOperand, (GenericType**)&pResult);
         if (iResult)
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
 
         return pResult;
@@ -270,7 +268,7 @@ InternalType *GenericLessEqual(InternalType *_pLeftOperand, InternalType *_pRigh
         int iResult = DoubleLessEqualDouble(pL, pR, (Bool**)&pResult);
         if (iResult)
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
 
         return pResult;
@@ -287,7 +285,7 @@ InternalType *GenericLessEqual(InternalType *_pLeftOperand, InternalType *_pRigh
         int iResult = SparseLessEqualSparse(pL, pR, (SparseBool**)&pResult);
         if (iResult)
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
 
         return pResult;
@@ -304,7 +302,7 @@ InternalType *GenericLessEqual(InternalType *_pLeftOperand, InternalType *_pRigh
         int iResult = DoubleLessEqualSparse(pL, pR, (SparseBool**)&pResult);
         if (iResult)
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
 
         return pResult;
@@ -321,7 +319,7 @@ InternalType *GenericLessEqual(InternalType *_pLeftOperand, InternalType *_pRigh
         int iResult = SparseLessEqualDouble(pL, pR, (SparseBool**)&pResult);
         if (iResult)
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
 
         return pResult;
@@ -341,7 +339,7 @@ InternalType *GenericLessEqual(InternalType *_pLeftOperand, InternalType *_pRigh
         int iResult = IntLessEqualInt(_pLeftOperand, _pRightOperand, (GenericType**)&pResult);
         if (iResult)
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
 
         return pResult;
index 237e9f4..6e600aa 100644 (file)
@@ -3703,7 +3703,7 @@ types::InternalType* compnoequal_M_M<GraphicHandle, GraphicHandle, Bool>(Graphic
     /* check dimension*/
     if (_pL->getDims() != _pR->getDims())
     {
-        throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+        throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
     }
 
     int* piDimsL = _pL->getDimsArray();
@@ -3713,7 +3713,7 @@ types::InternalType* compnoequal_M_M<GraphicHandle, GraphicHandle, Bool>(Graphic
     {
         if (piDimsL[i] != piDimsR[i])
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
     }
 
index a12afa4..bc6d775 100644 (file)
@@ -13,8 +13,6 @@
 #include "types_divide.hxx"
 #include "types_finite.hxx"
 
-#include "scilabexception.hxx"
-
 extern "C"
 {
 #include "matrix_right_division.h"
@@ -95,18 +93,18 @@ InternalType *GenericRDivide(InternalType *_pLeftOperand, InternalType *_pRightO
         switch (iResult)
         {
             case 1 :
-                throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+                throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
             case 2 :
-                throw ast::ScilabError(_W("With NaN or Inf a division by scalar expected.\n"));
+                throw ast::InternalError(_W("With NaN or Inf a division by scalar expected.\n"));
             case 3 :
-                throw ast::ScilabError(_W("Division by zero...\n"));
+                throw ast::InternalError(_W("Division by zero...\n"));
             case 4 :
                 if (getWarningMode())
                 {
                     sciprint(_("Warning : Division by zero...\n"));
                 }
                 break;
-            //            default : throw ast::ScilabError(_W("Operator / : Error %d not yet managed.\n"), iResult);
+            //            default : throw ast::InternalError(_W("Operator / : Error %d not yet managed.\n"), iResult);
             default :
                 sciprint(_("Operator / : Error %d not yet managed.\n"), iResult);
         }
@@ -543,7 +541,7 @@ int RDivideSparseByDouble(types::Sparse* _pSp, types::Double* _pDouble, Internal
 
         delete[] pDbl;
         delete[] pDblSp;
-        throw ast::ScilabError(_W("Invalid exponent.\n"));
+        throw ast::InternalError(_W("Invalid exponent.\n"));
         return 1;
     }
 
index 33ab4c3..f6407e6 100644 (file)
@@ -12,7 +12,6 @@
  */
 
 #include "types_dotdivide.hxx"
-#include "scilabexception.hxx"
 #include "double.hxx"
 #include "int.hxx"
 #include "sparse.hxx"
@@ -820,7 +819,7 @@ InternalType *GenericDotRDivide(InternalType *_pLeftOperand, InternalType *_pRig
                 if (ConfigVariable::getIeee() == 0)
                 {
                     pResult->killMe();
-                    throw ast::ScilabError(_("Division by zero...\n"));
+                    throw ast::InternalError(_("Division by zero...\n"));
                 }
 
                 if (ConfigVariable::getIeee() == 1)
@@ -852,7 +851,7 @@ InternalType* dotdiv_M_M(T *_pL, U *_pR)
 
     if (iDimsL != iDimsR)
     {
-        throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+        throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
     }
 
     int* piDimsL = _pL->getDimsArray();
@@ -862,7 +861,7 @@ InternalType* dotdiv_M_M(T *_pL, U *_pR)
     {
         if (piDimsL[i] != piDimsR[i])
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
     }
 
@@ -882,7 +881,7 @@ InternalType* dotdiv_M_MC(T *_pL, U *_pR)
 
     if (iDimsL != iDimsR)
     {
-        throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+        throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
     }
 
     int* piDimsL = _pL->getDimsArray();
@@ -892,7 +891,7 @@ InternalType* dotdiv_M_MC(T *_pL, U *_pR)
     {
         if (piDimsL[i] != piDimsR[i])
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
     }
 
@@ -953,7 +952,7 @@ InternalType* dotdiv_MC_M(T *_pL, U *_pR)
 
     if (iDimsL != iDimsR)
     {
-        throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+        throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
     }
 
     int* piDimsL = _pL->getDimsArray();
@@ -963,7 +962,7 @@ InternalType* dotdiv_MC_M(T *_pL, U *_pR)
     {
         if (piDimsL[i] != piDimsR[i])
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
     }
 
@@ -983,7 +982,7 @@ InternalType* dotdiv_MC_MC(T *_pL, U *_pR)
 
     if (iDimsL != iDimsR)
     {
-        throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+        throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
     }
 
     int* piDimsL = _pL->getDimsArray();
@@ -993,7 +992,7 @@ InternalType* dotdiv_MC_MC(T *_pL, U *_pR)
     {
         if (piDimsL[i] != piDimsR[i])
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
     }
 
@@ -1262,7 +1261,7 @@ InternalType* dotdiv_M_M<Sparse, Sparse, Sparse>(Sparse* _pL, Sparse* _pR)
     //check dimensions
     if (_pL->getRows() != _pR->getRows() || _pL->getCols() != _pR->getCols())
     {
-        throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+        throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
     }
 
     Sparse* pSparseOut = _pL->dotDivide(*_pR);
@@ -1345,7 +1344,7 @@ InternalType* dotdiv_M_M<Double, Sparse, Sparse>(Double* _pL, Sparse* _pR)
     //check dimensions
     if (_pL->getDims() != 2 || _pL->getRows() != _pR->getRows() || _pL->getCols() != _pR->getCols())
     {
-        throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+        throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
     }
 
     //get some information
@@ -1496,7 +1495,7 @@ InternalType* dotdiv_M_M<Sparse, Double, Sparse>(Sparse* _pL, Double* _pR)
     //check dimensions
     if (_pR->getDims() != 2 || _pR->getRows() != _pL->getRows() || _pR->getCols() != _pL->getCols())
     {
-        throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+        throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
     }
 
     //get some information
@@ -1741,7 +1740,7 @@ InternalType* dotdiv_M_M<Polynom, Double, Polynom>(Polynom* _pL, Double* _pR)
 
     if (iDimsL != iDimsR)
     {
-        throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+        throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
     }
 
     int* piDimsL = _pR->getDimsArray();
@@ -1751,7 +1750,7 @@ InternalType* dotdiv_M_M<Polynom, Double, Polynom>(Polynom* _pL, Double* _pR)
     {
         if (piDimsL[i] != piDimsR[i])
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
     }
 
index 839359a..48c77a4 100644 (file)
@@ -11,7 +11,6 @@
  */
 
 #include "types_dotmultiplication.hxx"
-#include "scilabexception.hxx"
 #include "double.hxx"
 #include "int.hxx"
 #include "sparse.hxx"
@@ -808,7 +807,7 @@ InternalType* dotmul_M_M(T *_pL, U *_pR)
 
     if (iDimsL != iDimsR)
     {
-        throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+        throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
     }
 
     int* piDimsL = _pL->getDimsArray();
@@ -818,7 +817,7 @@ InternalType* dotmul_M_M(T *_pL, U *_pR)
     {
         if (piDimsL[i] != piDimsR[i])
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
     }
 
@@ -838,7 +837,7 @@ InternalType* dotmul_M_MC(T *_pL, U *_pR)
 
     if (iDimsL != iDimsR)
     {
-        throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+        throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
     }
 
     int* piDimsL = _pL->getDimsArray();
@@ -848,7 +847,7 @@ InternalType* dotmul_M_MC(T *_pL, U *_pR)
     {
         if (piDimsL[i] != piDimsR[i])
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
     }
 
@@ -903,7 +902,7 @@ InternalType* dotmul_MC_M(T *_pL, U *_pR)
 
     if (iDimsL != iDimsR)
     {
-        throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+        throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
     }
 
     int* piDimsL = _pL->getDimsArray();
@@ -913,7 +912,7 @@ InternalType* dotmul_MC_M(T *_pL, U *_pR)
     {
         if (piDimsL[i] != piDimsR[i])
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
     }
 
@@ -933,7 +932,7 @@ InternalType* dotmul_MC_MC(T *_pL, U *_pR)
 
     if (iDimsL != iDimsR)
     {
-        throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+        throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
     }
 
     int* piDimsL = _pL->getDimsArray();
@@ -943,7 +942,7 @@ InternalType* dotmul_MC_MC(T *_pL, U *_pR)
     {
         if (piDimsL[i] != piDimsR[i])
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
     }
 
@@ -1203,7 +1202,7 @@ InternalType* dotmul_M_M<Sparse, Sparse, Sparse>(Sparse* _pL, Sparse* _pR)
     //check dimensions
     if (_pL->getRows() != _pR->getRows() || _pL->getCols() != _pR->getCols())
     {
-        throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+        throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
     }
 
     return _pL->dotMultiply(*_pR);
@@ -1265,7 +1264,7 @@ InternalType* dotmul_M_M<Double, Sparse, Sparse>(Double* _pL, Sparse* _pR)
     //check dimensions
     if (_pL->getDims() != 2 || _pL->getRows() != _pR->getRows() || _pL->getCols() != _pR->getCols())
     {
-        throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+        throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
     }
 
     //get some information
@@ -1406,14 +1405,14 @@ InternalType* dotmul_M_M<Polynom, Polynom, Polynom>(Polynom* _pL, Polynom* _pR)
     //check dims
     if (iDimsL != iDimsR)
     {
-        throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+        throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
     }
 
     for (int i = 0 ; i < iDimsL ; ++i)
     {
         if (piDimsL[i] != piDimsR[i])
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
     }
 
@@ -1588,7 +1587,7 @@ InternalType* dotmul_M_M<Double, Polynom, Polynom>(Double* _pL, Polynom* _pR)
 
     if (iDimsL != iDimsR)
     {
-        throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+        throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
     }
 
     int* piDimsL = _pL->getDimsArray();
@@ -1598,7 +1597,7 @@ InternalType* dotmul_M_M<Double, Polynom, Polynom>(Double* _pL, Polynom* _pR)
     {
         if (piDimsL[i] != piDimsR[i])
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
     }
 
index f3256e8..7cfdfef 100644 (file)
@@ -36,7 +36,7 @@ types::InternalType *GenericKrontimes(types::InternalType *_pLeftOperand, types:
         int iResult = KroneckerMultiplyDoubleByDouble(pL, pR, &pResult);
         if (iResult)
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
 
         return pResult;
@@ -109,15 +109,15 @@ types::InternalType *GenericKronrdivide(types::InternalType *_pLeftOperand, type
         int iErr = KroneckerRDivideDoubleByDouble(pL, pR, &pResult);
         if (iErr == 1)
         {
-            throw ast::ScilabError(_W("Division by zero...\n"));
+            throw ast::InternalError(_W("Division by zero...\n"));
         }
         else if (iErr == 2)
         {
-            throw ast::ScilabError(_W("Bad value in the left or right operand.\n"));
+            throw ast::InternalError(_W("Bad value in the left or right operand.\n"));
         }
         else if (iErr == 3)
         {
-            throw ast::ScilabError(_W("Bad size for left or right operand.\n"));
+            throw ast::InternalError(_W("Bad size for left or right operand.\n"));
         }
 
         return pResult;
@@ -168,11 +168,11 @@ types::InternalType *GenericKronldivide(types::InternalType *_pLeftOperand, type
         int iErr = KroneckerLDivideDoubleByDouble(pL, pR, &pResult);
         if (iErr == 1)
         {
-            throw ast::ScilabError(_W("Division by zero...\n"));
+            throw ast::InternalError(_W("Division by zero...\n"));
         }
         else if (iErr == 2)
         {
-            throw ast::ScilabError(_W("Bad value in the left operand.\n"));
+            throw ast::InternalError(_W("Bad value in the left operand.\n"));
         }
 
         return pResult;
index 8f67eaf..d6260f0 100644 (file)
@@ -14,8 +14,6 @@
 #include "types_divide.hxx"
 #include "types_finite.hxx"
 
-#include "scilabexception.hxx"
-
 extern "C"
 {
 #include "matrix_left_division.h"
@@ -72,11 +70,11 @@ InternalType *GenericLDivide(InternalType *_pLeftOperand, InternalType *_pRightO
         switch (iResult)
         {
             case 1 :
-                throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+                throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
             case 2 :
-                throw ast::ScilabError(_W("With NaN or Inf a left division by scalar expected.\n"));
+                throw ast::InternalError(_W("With NaN or Inf a left division by scalar expected.\n"));
             case 3 :
-                throw ast::ScilabError(_W("Left division by zero...\n"));
+                throw ast::InternalError(_W("Left division by zero...\n"));
             case 4 :
                 sciprint(_("Warning : Left division by zero...\n"));
                 break;
index e1bb09f..b7bed68 100644 (file)
@@ -19,8 +19,6 @@
 #include "polynom.hxx"
 #include "singlepoly.hxx"
 
-#include "scilabexception.hxx"
-
 extern "C"
 {
 #include "matrix_multiplication.h"
@@ -61,7 +59,7 @@ InternalType *GenericTimes(InternalType *_pLeftOperand, InternalType *_pRightOpe
         int iResult = MultiplyDoubleByDouble(pL, pR, (Double**)&pResult);
         if (iResult)
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
 
         return pResult;
@@ -78,7 +76,7 @@ InternalType *GenericTimes(InternalType *_pLeftOperand, InternalType *_pRightOpe
         int iResult = MultiplyDoubleByPoly(pL, pR, (Polynom**)&pResult);
         if (iResult)
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
 
         return pResult;
@@ -95,7 +93,7 @@ InternalType *GenericTimes(InternalType *_pLeftOperand, InternalType *_pRightOpe
         int iResult = MultiplyPolyByDouble(pL, pR, (Polynom**)&pResult);
         if (iResult)
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
 
         return pResult;
@@ -112,7 +110,7 @@ InternalType *GenericTimes(InternalType *_pLeftOperand, InternalType *_pRightOpe
         int iResult = MultiplyPolyByPoly(pL, pR, (Polynom**)&pResult);
         if (iResult)
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
 
         return pResult;
@@ -129,7 +127,7 @@ InternalType *GenericTimes(InternalType *_pLeftOperand, InternalType *_pRightOpe
         int iResult = MultiplySparseBySparse(pL, pR, (Sparse**)&pResult);
         if (iResult)
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
 
         return pResult;
@@ -146,7 +144,7 @@ InternalType *GenericTimes(InternalType *_pLeftOperand, InternalType *_pRightOpe
         int iResult = MultiplyDoubleBySparse(pL, pR, (GenericType**)&pResult);
         if (iResult)
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
 
         return pResult;
@@ -163,7 +161,7 @@ InternalType *GenericTimes(InternalType *_pLeftOperand, InternalType *_pRightOpe
         int iResult = MultiplySparseByDouble(pL, pR, (GenericType**)&pResult);
         if (iResult)
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
 
         return pResult;
index d1e6cd9..6f24799 100644 (file)
@@ -536,7 +536,7 @@ InternalType* or_M_M(T *_pL, U *_pR)
 
     if (iDimsL != iDimsR)
     {
-        throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+        throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
     }
 
     int* piDimsL = _pL->getDimsArray();
@@ -546,7 +546,7 @@ InternalType* or_M_M(T *_pL, U *_pR)
     {
         if (piDimsL[i] != piDimsR[i])
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
     }
 
@@ -629,7 +629,7 @@ InternalType* or_int_M_M(T *_pL, U *_pR)
 
     if (iDimsL != iDimsR)
     {
-        throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+        throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
     }
 
     int* piDimsL = _pL->getDimsArray();
@@ -639,7 +639,7 @@ InternalType* or_int_M_M(T *_pL, U *_pR)
     {
         if (piDimsL[i] != piDimsR[i])
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
     }
 
@@ -726,7 +726,7 @@ InternalType* or_M_M<SparseBool, SparseBool, SparseBool>(SparseBool* _pL, Sparse
 
     if (_pL->getRows() != _pR->getRows() || _pL->getCols() != _pR->getCols())
     {
-        throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+        throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
     }
 
     return _pL->newLogicalOr(*_pR);
index 2236e19..652e3b4 100644 (file)
@@ -12,7 +12,6 @@
 
 #include "types_power.hxx"
 #include "types_multiplication.hxx"
-#include "scilabexception.hxx"
 
 extern "C"
 {
@@ -38,7 +37,7 @@ InternalType *GenericPower(InternalType *_pLeftOperand, InternalType *_pRightOpe
         int iResult = PowerDoubleByDouble(pL, pR, (Double**)&pResult);
         if (iResult)
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
 
         return pResult;
@@ -57,9 +56,9 @@ InternalType *GenericPower(InternalType *_pLeftOperand, InternalType *_pRightOpe
         switch (iResult)
         {
             case 1 :
-                throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+                throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
             case 2 :
-                throw ast::ScilabError(_W("Invalid exponent.\n"));
+                throw ast::InternalError(_W("Invalid exponent.\n"));
             default:
                 //OK
                 break;
@@ -93,7 +92,7 @@ InternalType *GenericDotPower(InternalType *_pLeftOperand, InternalType *_pRight
         int iResult = DotPowerDoubleByDouble(pL, pR, (Double**)&pResult);
         if (iResult)
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
 
         return pResult;
@@ -109,7 +108,7 @@ InternalType *GenericDotPower(InternalType *_pLeftOperand, InternalType *_pRight
         int iResult = DotPowerSpaseByDouble(pL, pR, &pResult);
         if (iResult)
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
         return pResult;
 
@@ -128,9 +127,9 @@ InternalType *GenericDotPower(InternalType *_pLeftOperand, InternalType *_pRight
         switch (iResult)
         {
             case 1 :
-                throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+                throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
             case 2 :
-                throw ast::ScilabError(_W("Invalid exponent.\n"));
+                throw ast::InternalError(_W("Invalid exponent.\n"));
             default:
                 //OK
                 break;
@@ -487,7 +486,7 @@ int DotPowerSpaseByDouble(Sparse* _pSp, Double* _pDouble, InternalType** _pOut)
     else
     {
         delete[] pDblSp;
-        throw ast::ScilabError(_W("Invalid exponent.\n"));
+        throw ast::InternalError(_W("Invalid exponent.\n"));
         return 1;
     }
 
@@ -565,7 +564,7 @@ int DotPowerPolyByDouble(Polynom* _pPoly, Double* _pDouble, InternalType** _pOut
     else
     {
         delete[] pDblPower;
-        throw ast::ScilabError(_W("Invalid exponent.\n"));
+        throw ast::InternalError(_W("Invalid exponent.\n"));
     }
 
     InternalType* pITTempOut    = NULL;
@@ -615,12 +614,12 @@ int DotPowerPolyByDouble(Polynom* _pPoly, Double* _pDouble, InternalType** _pOut
         case 1 :
         {
             delete pPolyOut;
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
         case 2 :
         {
             delete pPolyOut;
-            throw ast::ScilabError(_W("Invalid exponent.\n"));
+            throw ast::InternalError(_W("Invalid exponent.\n"));
         }
         default:
             //OK
index 373f194..c992d50 100644 (file)
@@ -828,7 +828,7 @@ InternalType* sub_M_M(T *_pL, U *_pR)
 
     if (iDimsL != iDimsR)
     {
-        throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+        throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
     }
 
     int* piDimsL = _pL->getDimsArray();
@@ -838,7 +838,7 @@ InternalType* sub_M_M(T *_pL, U *_pR)
     {
         if (piDimsL[i] != piDimsR[i])
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
     }
 
@@ -856,7 +856,7 @@ InternalType* sub_M_MC(T *_pL, U *_pR)
 
     if (iDimsL != iDimsR)
     {
-        throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+        throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
     }
 
     int* piDimsL = _pL->getDimsArray();
@@ -866,7 +866,7 @@ InternalType* sub_M_MC(T *_pL, U *_pR)
     {
         if (piDimsL[i] != piDimsR[i])
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
     }
 
@@ -907,7 +907,7 @@ InternalType* sub_MC_M(T *_pL, U *_pR)
 
     if (iDimsL != iDimsR)
     {
-        throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+        throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
     }
 
     int* piDimsL = _pL->getDimsArray();
@@ -917,7 +917,7 @@ InternalType* sub_MC_M(T *_pL, U *_pR)
     {
         if (piDimsL[i] != piDimsR[i])
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
     }
 
@@ -935,7 +935,7 @@ InternalType* sub_MC_MC(T *_pL, U *_pR)
 
     if (iDimsL != iDimsR)
     {
-        throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+        throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
     }
 
     int* piDimsL = _pL->getDimsArray();
@@ -945,7 +945,7 @@ InternalType* sub_MC_MC(T *_pL, U *_pR)
     {
         if (piDimsL[i] != piDimsR[i])
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
     }
 
@@ -1650,7 +1650,7 @@ template<> InternalType* sub_M_M<Polynom, Polynom, Polynom>(Polynom* _pL, Polyno
 
     if (iDims1 != iDims2)
     {
-        throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+        throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
     }
 
     int* piDims1    = _pL->getDimsArray();
@@ -1660,7 +1660,7 @@ template<> InternalType* sub_M_M<Polynom, Polynom, Polynom>(Polynom* _pL, Polyno
     {
         if (piDims1[i] != piDims2[i])
         {
-            throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+            throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
         }
     }
 
@@ -1900,7 +1900,7 @@ template<> InternalType* sub_M_M<Polynom, Double, Polynom>(Polynom* _pL, Double*
     {
         wchar_t pMsg[bsiz];
         os_swprintf(pMsg, bsiz, _W("Error: operator %ls: Matrix dimensions must agree (op1 is %ls, op2 is %ls).\n").c_str(),  L"-", _pL->DimToString().c_str(), _pR->DimToString().c_str());
-        throw ast::ScilabError(pMsg);
+        throw ast::InternalError(pMsg);
     }
 
     int* piDims1 = _pR->getDimsArray();
@@ -1912,7 +1912,7 @@ template<> InternalType* sub_M_M<Polynom, Double, Polynom>(Polynom* _pL, Double*
         {
             wchar_t pMsg[bsiz];
             os_swprintf(pMsg, bsiz, _W("Error: operator %ls: Matrix dimensions must agree (op1 is %ls, op2 is %ls).\n").c_str(),  L"-", _pL->DimToString().c_str(), _pR->DimToString().c_str());
-            throw ast::ScilabError(pMsg);
+            throw ast::InternalError(pMsg);
         }
     }
 
@@ -2243,7 +2243,7 @@ template<> InternalType* sub_M_M<Double, Polynom, Polynom>(Double* _pL, Polynom*
     {
         wchar_t pMsg[bsiz];
         os_swprintf(pMsg, bsiz, _W("Error: operator %ls: Matrix dimensions must agree (op1 is %ls, op2 is %ls).\n").c_str(),  L"+", _pL->DimToString().c_str(), _pR->DimToString().c_str());
-        throw ast::ScilabError(pMsg);
+        throw ast::InternalError(pMsg);
     }
 
     int* piDims1 = _pR->getDimsArray();
@@ -2255,7 +2255,7 @@ template<> InternalType* sub_M_M<Double, Polynom, Polynom>(Double* _pL, Polynom*
         {
             wchar_t pMsg[bsiz];
             os_swprintf(pMsg, bsiz, _W("Error: operator %ls: Matrix dimensions must agree (op1 is %ls, op2 is %ls).\n").c_str(),  L"+", _pL->DimToString().c_str(), _pR->DimToString().c_str());
-            throw ast::ScilabError(pMsg);
+            throw ast::InternalError(pMsg);
         }
     }
 
@@ -2321,7 +2321,7 @@ template<> InternalType* sub_M_M<Sparse, Sparse, Sparse>(Sparse* _pL, Sparse* _p
     if (_pL->getRows() != _pR->getRows() || _pL->getCols() != _pR->getCols())
     {
         //dimensions not match
-        throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+        throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
     }
 
     types::Sparse* pSPOut = _pL->substract(*_pR);
@@ -2478,7 +2478,7 @@ template<> InternalType* sub_M_M<Double, Sparse, Double>(Double* _pL, Sparse* _p
     }
     else
     {
-        throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+        throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
     }
 }
 
@@ -2596,7 +2596,7 @@ template<> InternalType* sub_M_M<Sparse, Double, Double>(Sparse* _pL, Double* _p
 
     if (_pL->getRows() != _pR->getRows() || _pL->getCols() != _pR->getCols())
     {
-        throw ast::ScilabError(_W("Inconsistent row/column dimensions.\n"));
+        throw ast::InternalError(_W("Inconsistent row/column dimensions.\n"));
     }
 
     //SP - D
index 03fd8a7..c4f183a 100644 (file)
@@ -16,7 +16,6 @@
 #include <string.h>
 #include "parser.hxx"
 #include "parser_private.hxx"
-#include "scilabexception.hxx"
 
 #ifdef _MSC_VER
 #include "windows.h"
@@ -90,7 +89,7 @@ void ParserSingleInstance::parseFile(const std::wstring& fileName, const std::ws
     {
         wchar_t szError[bsiz];
         os_swprintf(szError, bsiz, _W("%ls: Cannot open file %ls.\n").c_str(), L"parser", fileName.c_str());
-        throw ast::ScilabError(szError, 999, *new Location());
+        throw ast::InternalError(szError);
     }
 
 
index b9ef60d..7e4e66f 100644 (file)
@@ -381,7 +381,7 @@ int ConfigVariable::getLastErrorLine(void)
 ** \{
 */
 
-std::wstring ConfigVariable::m_wstErrorFunction;
+std::wstring ConfigVariable::m_wstErrorFunction = L"";
 
 void ConfigVariable::setLastErrorFunction(const std::wstring& _wstErrorFunction)
 {
index 6448609..35dfd85 100644 (file)
@@ -436,7 +436,7 @@ InternalType* ArrayOf<T>::insert(typed_list* _pArgs, InternalType* _pSource)
 
             wchar_t szError[bsiz];
             os_swprintf(szError, bsiz, _W("Invalid index.\n").c_str());
-            throw ast::ScilabError(szError);
+            throw ast::InternalError(szError);
         }
 
         if (pSource->isScalar())
index b18e640..f0187f4 100644 (file)
 #include <sstream>
 #include <vector>
 #include "callable.hxx"
-#include "scilabexception.hxx"
 #include "configvariable.hxx"
 
-
 namespace types
 {
 
@@ -36,12 +34,12 @@ bool Callable::invoke(typed_list & in, optional_list & opt, int _iRetCount, type
         Ret = call(in, opt, _iRetCount, out, &execFunc);
         ConfigVariable::where_end();
     }
-    catch (ast::ScilabMessage & sm)
+    catch (ast::InternalError & ie)
     {
         ConfigVariable::where_end();
         ConfigVariable::setLastErrorFunction(getName());
 
-        throw sm;
+        throw ie;
     }
     catch (ast::InternalAbort & ia)
     {
@@ -50,19 +48,12 @@ bool Callable::invoke(typed_list & in, optional_list & opt, int _iRetCount, type
 
         throw ia;
     }
-    catch (ast::ScilabError & se)
-    {
-        ConfigVariable::where_end();
-        ConfigVariable::setLastErrorFunction(getName());
-
-        throw se;
-    }
 
     if (Ret == Callable::Error)
     {
         ConfigVariable::setLastErrorFunction(getName());
         ConfigVariable::setLastErrorLine(e.getLocation().first_line);
-        throw ast::ScilabError(ConfigVariable::getLastErrorMessage(), ConfigVariable::getLastErrorNumber(), e.getLocation());
+        throw ast::InternalError(ConfigVariable::getLastErrorMessage(), ConfigVariable::getLastErrorNumber(), e.getLocation());
     }
 
     return true;
index 5d38d57..ad0b04d 100644 (file)
@@ -15,7 +15,6 @@
 #include "double.hxx"
 #include "doubleexp.hxx"
 #include "tostring_common.hxx"
-#include "scilabexception.hxx"
 #include "configvariable.hxx"
 #include "type_traits.hxx"
 
index a0c2385..48d24f7 100644 (file)
@@ -381,11 +381,11 @@ Function::ReturnValue WrapMexFunction::call(typed_list &in, optional_list &/*opt
     {
         m_pOldFunc(nlhs, plhs, nrhs, prhs);
     }
-    catch (ast::ScilabError& se)
+    catch (const ast::InternalError& ie)
     {
         delete[] plhs;
         delete[] prhs;
-        throw se;
+        throw ie;
     }
 
     if (_iRetCount == 1 && plhs[0] == NULL)
index 455fdc5..c17f16a 100644 (file)
@@ -13,7 +13,6 @@
 #include <sstream>
 #include "graphichandle.hxx"
 #include "tostring_common.hxx"
-#include "scilabexception.hxx"
 #include "overload.hxx"
 #include "type_traits.hxx"
 
index ba56e2c..2f2e2a9 100644 (file)
@@ -614,7 +614,7 @@ bool ImplicitList::invoke(typed_list & in, optional_list & /*opt*/, int /*_iRetC
         {
             std::wostringstream os;
             os << _W("Invalid index.\n");
-            throw ast::ScilabError(os.str(), 999, e.getLocation());
+            throw ast::InternalError(os.str(), 999, e.getLocation());
         }
         out.push_back(_out);
     }
index a0ac52a..525da63 100644 (file)
@@ -16,7 +16,6 @@
 #include "listundefined.hxx"
 #include "listinsert.hxx"
 #include "types_tools.hxx"
-#include "scilabexception.hxx"
 #include "localization.hxx"
 #include "scilabWrite.hxx"
 #include "types_tools.hxx"
@@ -224,7 +223,7 @@ InternalType* List::insert(typed_list* _pArgs, InternalType* _pSource)
         cleanIndexesArguments(_pArgs, &pArg);
         std::wostringstream os;
         os << _W("Unable to insert multiple item in a list.\n");
-        throw ast::ScilabError(os.str());
+        throw ast::InternalError(os.str());
     }
     else if (iSeqCount < 0)
     {
@@ -264,7 +263,7 @@ InternalType* List::insert(typed_list* _pArgs, InternalType* _pSource)
             cleanIndexesArguments(_pArgs, &pArg);
             std::wostringstream os;
             os << _W("Index out of bounds.\n");
-            throw ast::ScilabError(os.str());
+            throw ast::InternalError(os.str());
         }
 
         InternalType* pInsert = _pSource->getAs<ListInsert>()->getInsert()->clone();
index b9f4937..9e580f4 100644 (file)
@@ -18,7 +18,6 @@
 #include "context.hxx"
 #include "symbol.hxx"
 #include "scilabWrite.hxx"
-#include "scilabexception.hxx"
 #include "configvariable.hxx"
 #include "mutevisitor.hxx"
 #include "serializervisitor.hxx"
@@ -312,12 +311,12 @@ Callable::ReturnValue Macro::call(typed_list &in, optional_list &opt, int _iRetC
         //restore previous prompt mode
         ConfigVariable::setPromptMode(oldVal);
     }
-    catch (ast::ScilabMessage & sm)
+    catch (const ast::InternalError& ie)
     {
         cleanCall(pContext, oldVal);
-        throw sm;
+        throw ie;
     }
-    catch (ast::InternalAbort & ia)
+    catch (const ast::InternalAbort& ia)
     {
         cleanCall(pContext, oldVal);
         throw ia;
index 5b91b20..d20fb0c 100644 (file)
@@ -69,7 +69,7 @@ bool MList::invoke(typed_list & in, optional_list & /*opt*/, int /*_iRetCount*/,
     {
         ret = Overload::call(L"%" + getShortTypeStr() + L"_e", in, 1, out, &execFunc);
     }
-    catch (ast::ScilabError & /*se*/)
+    catch (ast::InternalError & /*se*/)
     {
         ret = Overload::call(L"%l_e", in, 1, out, &execFunc);
     }
@@ -80,7 +80,7 @@ bool MList::invoke(typed_list & in, optional_list & /*opt*/, int /*_iRetCount*/,
 
     if (ret == Callable::Error)
     {
-        throw ast::ScilabError(ConfigVariable::getLastErrorMessage(), ConfigVariable::getLastErrorNumber(), e.getLocation());
+        throw ast::InternalError(ConfigVariable::getLastErrorMessage(), ConfigVariable::getLastErrorNumber(), e.getLocation());
     }
 
     return true;
index f35e441..f8b1442 100644 (file)
@@ -23,7 +23,6 @@ extern "C"
 #include "callable.hxx"
 #include "overload.hxx"
 #include "context.hxx"
-#include "scilabexception.hxx"
 
 std::wstring Overload::buildOverloadName(std::wstring _stFunctionName, types::typed_list &in, int /*_iRetCount*/, bool _isOperator, bool _truncated)
 {
@@ -52,15 +51,16 @@ std::wstring Overload::buildOverloadName(std::wstring _stFunctionName, types::ty
 types::Function::ReturnValue Overload::generateNameAndCall(std::wstring _stFunctionName, types::typed_list &in, int _iRetCount, types::typed_list &out, ast::ConstVisitor *_execMe, bool _isOperator)
 {
     std::wstring stFunc = buildOverloadName(_stFunctionName, in, _iRetCount, _isOperator);
-    types::Function::ReturnValue ret = types::Function::Error;
-    try
+    if (symbol::Context::getInstance()->get(symbol::Symbol(stFunc)))
     {
-        ret = call(stFunc, in, _iRetCount, out, _execMe, _isOperator);
+        return call(stFunc, in, _iRetCount, out, _execMe, _isOperator);
     }
-    catch (ast::ScilabError se)
+
+    // if overload doesn't existe try with short name
+    std::wstring stFunc2 = buildOverloadName(_stFunctionName, in, _iRetCount, _isOperator, true);
+    if (symbol::Context::getInstance()->get(symbol::Symbol(stFunc)))
     {
-        std::wstring stFunc2 = buildOverloadName(_stFunctionName, in, _iRetCount, _isOperator, true);
-        ret = call(stFunc2, in, _iRetCount, out, _execMe, _isOperator);
+        types::Function::ReturnValue ret = call(stFunc, in, _iRetCount, out, _execMe, _isOperator);
         if (ret == types::Function::OK && ConfigVariable::getWarningMode())
         {
             char* pstFunc2 = wide_string_to_UTF8(stFunc2.c_str());
@@ -69,8 +69,11 @@ types::Function::ReturnValue Overload::generateNameAndCall(std::wstring _stFunct
             FREE(pstFunc);
             FREE(pstFunc2);
         }
+        return ret;
     }
-    return ret;
+
+    // get exeception with overloading error
+    return call(stFunc, in, _iRetCount, out, _execMe, _isOperator);
 }
 
 types::Function::ReturnValue Overload::call(std::wstring _stOverloadingFunctionName, types::typed_list &in, int _iRetCount, types::typed_list &out, ast::ConstVisitor *_execMe, bool _isOperator)
@@ -96,11 +99,10 @@ types::Function::ReturnValue Overload::call(std::wstring _stOverloadingFunctionN
                 os_sprintf(pstError1, "%s%s", _("Function not defined for given argument type(s),\n"), pstError2);
             }
 
-            pwstError = to_wide_string(pstError1);
-            std::wstring wstError(pwstError);
-            FREE(pwstError);
             FREE(pstFuncName);
-            throw ast::ScilabError(wstError, 999, Location(0, 0, 0, 0));
+            ast::InternalError ie(pstError1);
+            ie.SetErrorType(ast::TYPE_EXCEPTION);
+            throw ie;
         }
 
         pCall = pIT->getAs<types::Callable>();
@@ -117,30 +119,22 @@ types::Function::ReturnValue Overload::call(std::wstring _stOverloadingFunctionN
 
         return ret;
     }
-    catch (ast::ScilabMessage sm)
-    {
-        // remove function name in where
-        ConfigVariable::where_end();
-        throw sm;
-    }
-    catch (ast::ScilabError se)
+    catch (ast::InternalError ie)
     {
-        ConfigVariable::fillWhereError(se.GetErrorLocation().first_line);
-        if (ConfigVariable::getLastErrorNumber() == 0)
-        {
-            ConfigVariable::setLastErrorMessage(se.GetErrorMessage());
-            ConfigVariable::setLastErrorNumber(se.GetErrorNumber());
-            ConfigVariable::setLastErrorLine(se.GetErrorLocation().first_line);
-            ConfigVariable::setLastErrorFunction(std::wstring(L""));
-        }
-
+        ConfigVariable::fillWhereError(ie.GetErrorLocation().first_line);
         if (pCall)
         {
+            if (ConfigVariable::getLastErrorFunction() == L"")
+            {
+                ConfigVariable::setLastErrorFunction(pCall->getName());
+                ConfigVariable::setLastErrorLine(ie.GetErrorLocation().first_line);
+            }
+
             // remove function name in where
             ConfigVariable::where_end();
         }
 
-        throw ast::ScilabMessage(se.GetErrorMessage(), se.GetErrorNumber(), se.GetErrorLocation());
+        throw ie;
     }
 }
 
@@ -148,7 +142,7 @@ std::wstring Overload::getNameFromOper(ast::OpExp::Oper _oper)
 {
     switch (_oper)
     {
-            /* standard operators */
+        /* standard operators */
         case ast::OpExp::plus :
             return std::wstring(L"a");
         case ast::OpExp::unaryMinus :
@@ -162,7 +156,7 @@ std::wstring Overload::getNameFromOper(ast::OpExp::Oper _oper)
             return std::wstring(L"l");
         case ast::OpExp::power :
             return std::wstring(L"p");
-            /* dot operators */
+        /* dot operators */
         case ast::OpExp::dottimes :
             return std::wstring(L"x");
         case ast::OpExp::dotrdivide :
@@ -171,14 +165,14 @@ std::wstring Overload::getNameFromOper(ast::OpExp::Oper _oper)
             return std::wstring(L"q");
         case ast::OpExp::dotpower :
             return std::wstring(L"j");
-            /* Kron operators */
+        /* Kron operators */
         case ast::OpExp::krontimes :
             return std::wstring(L"k");
         case ast::OpExp::kronrdivide :
             return std::wstring(L"y");
         case ast::OpExp::kronldivide :
             return std::wstring(L"z");
-            /* Control Operators ??? */
+        /* Control Operators ??? */
         case ast::OpExp::controltimes :
             return std::wstring(L"u");
         case ast::OpExp::controlrdivide :
index cd0b09a..0d14dfd 100644 (file)
@@ -989,7 +989,7 @@ InternalType* Polynom::insert(typed_list* _pArgs, InternalType* _pSource)
         wchar_t* pwstError = to_wide_string(szError);
         std::wstring wstError(pwstError);
         FREE(pwstError);
-        throw ast::ScilabError(wstError, 999, *new Location());
+        throw ast::InternalError(wstError);
     }
     return ArrayOf<SinglePoly*>::insert(_pArgs, _pSource);
 }
index d0bc009..dd4ec97 100644 (file)
@@ -106,9 +106,7 @@ double* SinglePoly::allocData(int _iSize)
             m_pImgData = NULL;
             char message[bsiz];
             os_sprintf(message, _("Can not allocate negative size (%d).\n"),  _iSize);
-            ast::ScilabError se(message);
-            se.SetErrorNumber(999);
-            throw (se);
+            throw ast::InternalError(message);
         }
         else
         {
@@ -119,9 +117,7 @@ double* SinglePoly::allocData(int _iSize)
     {
         char message[bsiz];
         os_sprintf(message, _("Can not allocate %.2f MB memory.\n"),  (double) (_iSize * sizeof(double)) / 1.e6);
-        ast::ScilabError se(message);
-        se.SetErrorNumber(999);
-        throw (se);
+        throw ast::InternalError(message);
     }
 
     return pDbl;
index 2ab6930..121cb43 100644 (file)
@@ -15,7 +15,6 @@
 #include "singlestruct.hxx"
 #include "string.hxx"
 #include "double.hxx"
-#include "scilabexception.hxx"
 #include "localization.hxx"
 #include "scilabWrite.hxx"
 
@@ -135,14 +134,14 @@ InternalType* SingleStruct::insert(typed_list* _pArgs, InternalType* _pSource)
     {
         std::wostringstream os;
         os << _W("Unable to insert multiple item in a struct.\n");
-        throw ast::ScilabError(os.str());
+        throw ast::InternalError(os.str());
     }
 
     if ((*_pArgs)[0]->isString() == false)
     {
         std::wostringstream os;
         os << _W("Assignment between unlike types is not allowed.\n");
-        throw ast::ScilabError(os.str());
+        throw ast::InternalError(os.str());
     }
 
     String* pstKey = (*_pArgs)[0]->getAs<String>();
index 6b8edeb..e0464f1 100644 (file)
@@ -560,12 +560,10 @@ wchar_t* String::copyValue(wchar_t* _pwstData)
     {
         char message[bsiz];
         os_sprintf(message, _("Can not allocate data.\n"));
-        ast::ScilabError se(message);
-        se.SetErrorNumber(999);
-        throw (se);
+        throw ast::InternalError(message);
     }
-    return NULL;
 
+    return NULL;
 }
 
 wchar_t* String::copyValue(const wchar_t* _pwstData)
@@ -650,9 +648,7 @@ wchar_t** String::allocData(int _iSize)
     {
         char message[bsiz];
         os_sprintf(message, _("Can not allocate %.2f MB memory.\n"), (double)(_iSize * sizeof(char*)) / 1.e6);
-        ast::ScilabError se(message);
-        se.SetErrorNumber(999);
-        throw (se);
+        throw ast::InternalError(message);
     }
     return pStr;
 }
index 2e84b19..2183aac 100644 (file)
@@ -175,7 +175,7 @@ bool Struct::invoke(typed_list & in, optional_list & opt, int _iRetCount, typed_
                 {
                     wchar_t szError[bsiz];
                     os_swprintf(szError, bsiz, _W("Field \"%ls\" does not exists\n").c_str(), wstField.c_str());
-                    throw ast::ScilabError(szError, 999, e.getLocation());
+                    throw ast::InternalError(szError, 999, e.getLocation());
                 }
             }
 
index 389f33a..a3ef701 100644 (file)
@@ -164,7 +164,7 @@ bool TList::invoke(typed_list & in, optional_list & /*opt*/, int _iRetCount, typ
     {
         ret = Overload::call(L"%" + stType + L"_e", in, _iRetCount, out, &execFunc);
     }
-    catch (ast::ScilabError &se)
+    catch (const ast::InternalError &ie)
     {
         try
         {
@@ -177,10 +177,10 @@ bool TList::invoke(typed_list & in, optional_list & /*opt*/, int _iRetCount, typ
             }
             else
             {
-                throw se;
+                throw ie;
             }
         }
-        catch (ast::ScilabError & /*se*/)
+        catch (ast::InternalError & /*se*/)
         {
             ret = Overload::call(L"%l_e", in, 1, out, &execFunc);
         }
@@ -192,7 +192,7 @@ bool TList::invoke(typed_list & in, optional_list & /*opt*/, int _iRetCount, typ
 
     if (ret == Callable::Error)
     {
-        throw ast::ScilabError(ConfigVariable::getLastErrorMessage(), ConfigVariable::getLastErrorNumber(), e.getLocation());
+        throw ast::InternalError(ConfigVariable::getLastErrorMessage(), ConfigVariable::getLastErrorNumber(), e.getLocation());
     }
 
     return true;
@@ -315,8 +315,14 @@ bool TList::toString(std::wostringstream& ostr)
         DecreaseRef();
         return true;
     }
-    catch (ast::ScilabMessage /* &e */)
+    catch (ast::InternalError& e)
     {
+        if (e.GetErrorType() == ast::TYPE_ERROR)
+        {
+            DecreaseRef();
+            throw e;
+        }
+
         // avoid error message about undefined overload %type_p
         ConfigVariable::resetError();
     }
index 6a8908f..4ea22d2 100644 (file)
@@ -13,8 +13,6 @@
 #include <sstream>
 #include "types.hxx"
 
-#include "scilabexception.hxx"
-
 extern "C"
 {
 #include "localization.h"
index b3dd90a..bcbee3c 100644 (file)
@@ -44,7 +44,7 @@ double getIndex(InternalType* val)
 {
     switch (val->getType())
     {
-        //scalar
+            //scalar
         case InternalType::ScilabDouble:
         {
             return getIndex(val->getAs<Double>());
@@ -606,7 +606,7 @@ int checkIndexesArguments(InternalType* _pRef, typed_list* _pArgsIn, typed_list*
                 {
                     wchar_t szError[bsiz];
                     os_swprintf(szError, bsiz, _W("variable size exceeded : less than %d expected.\n").c_str(), INT_MAX);
-                    throw ast::ScilabError(szError);
+                    throw ast::InternalError(szError);
                 }
 
                 int d = static_cast<int>(pCurrentArg->get(j));
@@ -631,7 +631,7 @@ int checkIndexesArguments(InternalType* _pRef, typed_list* _pArgsIn, typed_list*
             delete[] _piCountDim;
             cleanIndexesArguments(_pArgsIn, _pArgsOut);
 
-            throw ast::ScilabError(szError);
+            throw ast::InternalError(szError);
         }
         _pArgsOut->push_back(pCurrentArg);
 
@@ -739,10 +739,10 @@ types::Function::ReturnValue VariableToString(types::InternalType* pIT, const wc
             pIT->DecreaseRef();
             return ret;
         }
-        catch (ast::ScilabError &e)
+        catch (const ast::InternalError &ie)
         {
             pIT->DecreaseRef();
-            throw e;
+            throw ie;
         }
     }
     else
index ada03cd..aa8df4e 100644 (file)
@@ -15,7 +15,6 @@
 #include "threadmanagement.hxx"
 #include "configvariable.hxx"
 #include "threadId.hxx"
-#include "scilabexception.hxx"
 
 extern "C"
 {
index 56ae1ab..a9e129f 100644 (file)
@@ -64,3 +64,9 @@ b=a;
 b(1)(1) = 2;
 // a must not be modified !
 assert_checkequal(a, list(list(1)));
+// check error in print overload
+ml=mlist(["test" "f1"], 15);
+function %test_p(varargin)
+    error("overload error");
+end
+assert_checkerror("disp(ml)", "overload error");
index 5e0242a..b576434 100644 (file)
@@ -77,3 +77,9 @@ b(1)(1) = 2;
 // a must not be modified !
 assert_checkequal(a, list(list(1)));
 
+// check error in print overload
+ml=mlist(["test" "f1"], 15);
+function %test_p(varargin)
+    error("overload error");
+end
+assert_checkerror("disp(ml)", "overload error");
index 571c106..06d5757 100644 (file)
@@ -557,14 +557,9 @@ types::Function::ReturnValue sci_bvode(types::typed_list &in, int _iRetCount, ty
     {
         C2F(colnew)(&ncomp, M, &aleft, &aright, pDblZeta->get(), ipar, ltol, pDblTol->get(), pDblFixpnt->get(), iwork, rwork, &iflag, bvode_fsub, bvode_dfsub, bvode_gsub, bvode_dgsub, bvode_guess);
     }
-    catch (ast::ScilabMessage &sm)
+    catch (ast::InternalError &ie)
     {
-        os << sm.GetErrorMessage();
-        bCatch = true;
-    }
-    catch (ast::ScilabError &e)
-    {
-        os << e.GetErrorMessage();
+        os << ie.GetErrorMessage();
         bCatch = true;
     }
 
@@ -579,7 +574,7 @@ types::Function::ReturnValue sci_bvode(types::typed_list &in, int _iRetCount, ty
         wchar_t szError[bsiz];
         os_swprintf(szError, bsiz, _W("%s: An error occured in '%s' subroutine.\n").c_str(), "bvode", "bvode");
         os << szError;
-        throw ast::ScilabMessage(os.str());
+        throw ast::InternalError(os.str());
     }
 
     if (iflag != 1)
index e133571..4ba92eb 100644 (file)
@@ -1063,15 +1063,9 @@ types::Function::ReturnValue sci_daskr(types::typed_list &in, int _iRetCount, ty
                 Scierror(999, _("%s: %s return with state %d.\n"), "daskr", "ddaskr", ididtmp);
             }
         }
-        catch (ast::ScilabMessage &sm)
+        catch (ast::InternalError &ie)
         {
-            os << sm.GetErrorMessage();
-            bCatch = true;
-            iret = 1;
-        }
-        catch (ast::ScilabError &e)
-        {
-            os << e.GetErrorMessage();
+            os << ie.GetErrorMessage();
             bCatch = true;
             iret = 1;
         }
@@ -1101,7 +1095,7 @@ types::Function::ReturnValue sci_daskr(types::typed_list &in, int _iRetCount, ty
                 wchar_t szError[bsiz];
                 os_swprintf(szError, bsiz, _W("%s: An error occured in '%s' subroutine.\n").c_str(), "daskr", "ddaskr");
                 os << szError;
-                throw ast::ScilabMessage(os.str());
+                throw ast::InternalError(os.str());
             }
 
             return types::Function::Error;
index 3c2595a..fc41c67 100644 (file)
@@ -754,15 +754,9 @@ types::Function::ReturnValue sci_dasrt(types::typed_list &in, int _iRetCount, ty
                 Scierror(999, _("%s: %s return with state %d.\n"), "dasrt", "ddasrt", idid);
             }
         }
-        catch (ast::ScilabMessage &sm)
+        catch (ast::InternalError &ie)
         {
-            os << sm.GetErrorMessage();
-            bCatch = true;
-            iret = 1;
-        }
-        catch (ast::ScilabError &e)
-        {
-            os << e.GetErrorMessage();
+            os << ie.GetErrorMessage();
             bCatch = true;
             iret = 1;
         }
@@ -791,7 +785,7 @@ types::Function::ReturnValue sci_dasrt(types::typed_list &in, int _iRetCount, ty
                 wchar_t szError[bsiz];
                 os_swprintf(szError, bsiz, _W("%s: An error occured in '%s' subroutine.\n").c_str(), "dasrt", "ddasrt");
                 os << szError;
-                throw ast::ScilabMessage(os.str());
+                throw ast::InternalError(os.str());
             }
 
             return types::Function::Error;
index cbc4a09..ef9c539 100644 (file)
@@ -72,7 +72,7 @@ types::Function::ReturnValue sci_dassl(types::typed_list &in, int _iRetCount, ty
 
     // error message catched
     std::wostringstream os;
-    bool bCatched = false;
+    bool bCatch = false;
 
     // *** check the minimal number of input args. ***
     if (in.size() < 4 || in.size() > 9)
@@ -690,16 +690,10 @@ types::Function::ReturnValue sci_dassl(types::typed_list &in, int _iRetCount, ty
                 Scierror(999, _("%s: %s return with state %d.\n"), "dassl", "dassl",  idid);
             }
         }
-        catch (ast::ScilabMessage &sm)
+        catch (ast::InternalError &ie)
         {
-            os << sm.GetErrorMessage();
-            bCatched = true;
-            iret = 1;
-        }
-        catch (ast::ScilabError &e)
-        {
-            os << e.GetErrorMessage();
-            bCatched = true;
+            os << ie.GetErrorMessage();
+            bCatch = true;
             iret = 1;
         }
 
@@ -721,12 +715,12 @@ types::Function::ReturnValue sci_dassl(types::typed_list &in, int _iRetCount, ty
                 FREE(rtol);
             }
 
-            if (bCatched)
+            if (bCatch)
             {
                 wchar_t szError[bsiz];
                 os_swprintf(szError, bsiz, _W("%s: An error occured in '%s' subroutine.\n").c_str(), "dassl", "dassl");
                 os << szError;
-                throw ast::ScilabMessage(os.str());
+                throw ast::InternalError(os.str());
             }
 
             return types::Function::Error;
index e9d3841..17e33f7 100644 (file)
@@ -177,14 +177,9 @@ types::Function::ReturnValue sci_feval(types::typed_list &in, int _iRetCount, ty
             {
                 deFunctionsManager.execFevalF(&nn, &valX, &valY, res, &itype);
             }
-            catch (ast::ScilabMessage &sm)
+            catch (ast::InternalError &ie)
             {
-                os << sm.GetErrorMessage();
-                bCatch = true;
-            }
-            catch (ast::ScilabError &e)
-            {
-                os << e.GetErrorMessage();
+                os << ie.GetErrorMessage();
                 bCatch = true;
             }
 
@@ -197,7 +192,7 @@ types::Function::ReturnValue sci_feval(types::typed_list &in, int _iRetCount, ty
                 wchar_t szError[bsiz];
                 os_swprintf(szError, bsiz, _W("%s: An error occured in '%s' subroutine.\n").c_str(), "feval", "execFevalF");
                 os << szError;
-                throw ast::ScilabMessage(os.str());
+                throw ast::InternalError(os.str());
             }
 
             if (itype) // is complex
index 74b52c1..439ec40 100644 (file)
@@ -657,15 +657,9 @@ types::Function::ReturnValue sci_impl(types::typed_list &in, int _iRetCount, typ
                 }
             }
         }
-        catch (ast::ScilabMessage &sm)
+        catch (ast::InternalError &ie)
         {
-            os << sm.GetErrorMessage();
-            bCatch = true;
-            err = 1;
-        }
-        catch (ast::ScilabError &e)
-        {
-            os << e.GetErrorMessage();
+            os << ie.GetErrorMessage();
             bCatch = true;
             err = 1;
         }
@@ -695,7 +689,7 @@ types::Function::ReturnValue sci_impl(types::typed_list &in, int _iRetCount, typ
                 wchar_t szError[bsiz];
                 os_swprintf(szError, bsiz, _W("%s: An error occured in '%s' subroutine.\n").c_str(), "impl", "lsodi");
                 os << szError;
-                throw ast::ScilabMessage(os.str());
+                throw ast::InternalError(os.str());
             }
 
             return types::Function::Error;
index 4db8a0b..cd9aad6 100644 (file)
@@ -242,14 +242,9 @@ types::Function::ReturnValue sci_int2d(types::typed_list &in, int _iRetCount, ty
     {
         C2F(twodq)(int2d_f, &size, pDblX->get(), pDblY->get(), &tol, &iclose, &maxtri, &mevals, &result, &err, &nu, &nd, &nevals, &iflag, dwork, iwork);
     }
-    catch (ast::ScilabMessage &sm)
+    catch (ast::InternalError &ie)
     {
-        os << sm.GetErrorMessage();
-        bCatch = false;
-    }
-    catch (ast::ScilabError &e)
-    {
-        os << e.GetErrorMessage();
+        os << ie.GetErrorMessage();
         bCatch = false;
     }
 
@@ -262,7 +257,7 @@ types::Function::ReturnValue sci_int2d(types::typed_list &in, int _iRetCount, ty
         wchar_t szError[bsiz];
         os_swprintf(szError, bsiz, _W("%s: An error occured in '%s' subroutine.\n").c_str(), "int2d", "twodq");
         os << szError;
-        throw ast::ScilabMessage(os.str());
+        throw ast::InternalError(os.str());
     }
 
     if (iflag)
index 90e0734..1a13dca 100644 (file)
@@ -319,17 +319,11 @@ types::Function::ReturnValue sci_int3d(types::typed_list &in, int _iRetCount, ty
     {
         C2F(dcutet)(int3d_f, &nf, pdData, &cols, &minpts, &maxpts, &epsabs, &epsrel, &maxsub, &dworkSize, &irestar, pdResult, pdErr, &nevals, &ifail, dwork, iwork);
     }
-    catch (ast::ScilabMessage &sm)
+    catch (ast::InternalError &ie)
     {
-        os << sm.GetErrorMessage();
+        os << ie.GetErrorMessage();
         bCatch = true;
     }
-    catch (ast::ScilabError &e)
-    {
-        os << e.GetErrorMessage();
-        bCatch = true;
-    }
-
 
     FREE(pdData);
     FREE(dwork);
@@ -341,7 +335,7 @@ types::Function::ReturnValue sci_int3d(types::typed_list &in, int _iRetCount, ty
         wchar_t szError[bsiz];
         os_swprintf(szError, bsiz, _W("%s: An error occured in '%s' subroutine.\n").c_str(), "int3d", "dcutet");
         os << szError;
-        throw ast::ScilabMessage(os.str());
+        throw ast::InternalError(os.str());
     }
 
     if (ifail)
index 4b9793b..33fa077 100644 (file)
@@ -238,14 +238,9 @@ types::Function::ReturnValue sci_intg(types::typed_list &in, int _iRetCount, typ
                    &result, &abserr, &neval, &ier,
                    &limit, &lenw, &last, iwork, dwork);
     }
-    catch (ast::ScilabMessage &sm)
+    catch (ast::InternalError &ie)
     {
-        os << sm.GetErrorMessage();
-        bCatch = true;
-    }
-    catch (ast::ScilabError &e)
-    {
-        os << e.GetErrorMessage();
+        os << ie.GetErrorMessage();
         bCatch = true;
     }
 
@@ -258,7 +253,7 @@ types::Function::ReturnValue sci_intg(types::typed_list &in, int _iRetCount, typ
         wchar_t szError[bsiz];
         os_swprintf(szError, bsiz, _W("%s: An error occured in '%s' subroutine.\n").c_str(), "intg", "dqags");
         os << szError;
-        throw ast::ScilabMessage(os.str());
+        throw ast::InternalError(os.str());
     }
 
     if (ier)
index da8f96e..79afc7d 100644 (file)
@@ -1099,15 +1099,11 @@ types::Function::ReturnValue sci_ode(types::typed_list &in, int _iRetCount, type
                     Scierror(999, _("%s: %s exit with state %d.\n"), "ode", strMeth.c_str(), istate);
                 }
             }
-            catch (ast::ScilabMessage &sm)
+            catch (ast::InternalError &ie)
             {
-                os << sm.GetErrorMessage();
-                bCatch = true;
-            }
-            catch (ast::ScilabError &e)
-            {
-                os << e.GetErrorMessage();
+                os << ie.GetErrorMessage();
                 bCatch = true;
+                err = 1;
             }
 
             // FREE allocated data
@@ -1144,7 +1140,7 @@ types::Function::ReturnValue sci_ode(types::typed_list &in, int _iRetCount, type
                     wchar_t szError[bsiz];
                     os_swprintf(szError, bsiz, _W("%s: An error occured in '%s' subroutine.\n").c_str(), "ode", strMeth.c_str());
                     os << szError;
-                    throw ast::ScilabMessage(os.str());
+                    throw ast::InternalError(os.str());
                 }
 
                 return types::Function::Error;
@@ -1324,15 +1320,9 @@ types::Function::ReturnValue sci_ode(types::typed_list &in, int _iRetCount, type
                     Scierror(999, _("%s: %s exit with state %d.\n"), "ode", strMeth.c_str(), istate);
                 }
             }
-            catch (ast::ScilabMessage &sm)
-            {
-                os << sm.GetErrorMessage();
-                bCatch = true;
-                err = 1;
-            }
-            catch (ast::ScilabError &e)
+            catch (ast::InternalError &ie)
             {
-                os << e.GetErrorMessage();
+                os << ie.GetErrorMessage();
                 bCatch = true;
                 err = 1;
             }
@@ -1370,7 +1360,7 @@ types::Function::ReturnValue sci_ode(types::typed_list &in, int _iRetCount, type
                     wchar_t szError[bsiz];
                     os_swprintf(szError, bsiz, _W("%s: An error occured in '%s' subroutine.\n").c_str(), "ode", strMeth.c_str());
                     os << szError;
-                    throw ast::ScilabMessage(os.str());
+                    throw ast::InternalError(os.str());
                 }
 
                 return types::Function::Error;
index 1ca6c30..5ded99b 100644 (file)
@@ -1101,14 +1101,9 @@ types::Function::ReturnValue sci_odedc(types::typed_list &in, int _iRetCount, ty
                 {
                     ode_f(&sizeYc, &tright, pdYData, pdYData + sizeYc);
                 }
-                catch (ast::ScilabMessage &sm)
+                catch (ast::InternalError &ie)
                 {
-                    os << sm.GetErrorMessage();
-                    bCatch = true;
-                }
-                catch (ast::ScilabError &e)
-                {
-                    os << e.GetErrorMessage();
+                    os << ie.GetErrorMessage();
                     bCatch = true;
                 }
 
@@ -1141,7 +1136,7 @@ types::Function::ReturnValue sci_odedc(types::typed_list &in, int _iRetCount, ty
                     wchar_t szError[bsiz];
                     os_swprintf(szError, bsiz, _W("%s: An error occured in '%s' subroutine.\n").c_str(), "odedc", "tright");
                     os << szError;
-                    throw ast::ScilabMessage(os.str());
+                    throw ast::InternalError(os.str());
                 }
 
                 deFunctionsManager.resetOdedcFlag();
@@ -1220,15 +1215,9 @@ types::Function::ReturnValue sci_odedc(types::typed_list &in, int _iRetCount, ty
                         Scierror(999, _("%s: %s exit with state %d.\n"), "odedc", strMeth.c_str(), istate);
                     }
                 }
-                catch (ast::ScilabMessage &sm)
-                {
-                    os << sm.GetErrorMessage();
-                    bCatch = true;
-                    err = 1;
-                }
-                catch (ast::ScilabError &e)
+                catch (ast::InternalError &ie)
                 {
-                    os << e.GetErrorMessage();
+                    os << ie.GetErrorMessage();
                     bCatch = true;
                     err = 1;
                 }
@@ -1264,7 +1253,7 @@ types::Function::ReturnValue sci_odedc(types::typed_list &in, int _iRetCount, ty
                         wchar_t szError[bsiz];
                         os_swprintf(szError, bsiz, _W("%s: An error occured in '%s' subroutine.\n").c_str(), "odedc", strMeth.c_str());
                         os << szError;
-                        throw ast::ScilabMessage(os.str());
+                        throw ast::InternalError(os.str());
                     }
 
                     return types::Function::Error;
@@ -1421,15 +1410,9 @@ types::Function::ReturnValue sci_odedc(types::typed_list &in, int _iRetCount, ty
                     Scierror(999, _("%s: %s exit with state %d.\n"), "odedc", strMeth.c_str(), istate);
                 }
             }
-            catch (ast::ScilabMessage &sm)
+            catch (ast::InternalError &ie)
             {
-                os << sm.GetErrorMessage();
-                bCatch = true;
-                err = 1;
-            }
-            catch (ast::ScilabError &e)
-            {
-                os << e.GetErrorMessage();
+                os << ie.GetErrorMessage();
                 bCatch = true;
                 err = 1;
             }
@@ -1465,7 +1448,7 @@ types::Function::ReturnValue sci_odedc(types::typed_list &in, int _iRetCount, ty
                     wchar_t szError[bsiz];
                     os_swprintf(szError, bsiz, _W("%s: An error occured in '%s' subroutine.\n").c_str(), "odedc", strMeth.c_str());
                     os << szError;
-                    throw ast::ScilabMessage(os.str());
+                    throw ast::InternalError(os.str());
                 }
 
                 return types::Function::Error;
@@ -1484,14 +1467,9 @@ types::Function::ReturnValue sci_odedc(types::typed_list &in, int _iRetCount, ty
                 {
                     ode_f(&sizeYc, &tright, pdYData, pdYData + sizeYc);
                 }
-                catch (ast::ScilabMessage &sm)
-                {
-                    os << sm.GetErrorMessage();
-                    bCatch = true;
-                }
-                catch (ast::ScilabError &e)
+                catch (ast::InternalError &ie)
                 {
-                    os << e.GetErrorMessage();
+                    os << ie.GetErrorMessage();
                     bCatch = true;
                 }
 
@@ -1524,7 +1502,7 @@ types::Function::ReturnValue sci_odedc(types::typed_list &in, int _iRetCount, ty
                     wchar_t szError[bsiz];
                     os_swprintf(szError, bsiz, _W("%s: An error occured in '%s' subroutine.\n").c_str(), "odedc", tright);
                     os << szError;
-                    throw ast::ScilabMessage(os.str());
+                    throw ast::InternalError(os.str());
                 }
 
                 deFunctionsManager.resetOdedcFlag();
index 9c6f776..6bb9b0f 100644 (file)
@@ -219,7 +219,7 @@ void DifferentialEquationFunctions::execDasrtG(int* ny, double* t, double* y, in
         if (func == NULL)
         {
             sprintf(errorMsg, _("Undefined fonction '%ls'.\n"), m_pStringGFunctionDyn->get(0));
-            throw ast::ScilabError(errorMsg);
+            throw ast::InternalError(errorMsg);
         }
         ((dasrt_g_t)(func->functionPtr))(ny, t, y, ng, gout, rpar, ipar);
     }
@@ -230,7 +230,7 @@ void DifferentialEquationFunctions::execDasrtG(int* ny, double* t, double* y, in
     else
     {
         sprintf(errorMsg, _("User function '%s' have not been setted.\n"), "g");
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 }
 
@@ -247,7 +247,7 @@ void DifferentialEquationFunctions::execDasslF(double* t, double* y, double* ydo
         if (func == NULL)
         {
             sprintf(errorMsg, _("Undefined fonction '%ls'.\n"), m_pStringFFunctionDyn->get(0));
-            throw ast::ScilabError(errorMsg);
+            throw ast::InternalError(errorMsg);
         }
         ((dassl_f_t)(func->functionPtr))(t, y, ydot, delta, ires, rpar, ipar);
     }
@@ -258,7 +258,7 @@ void DifferentialEquationFunctions::execDasslF(double* t, double* y, double* ydo
     else
     {
         sprintf(errorMsg, _("User function '%s' have not been setted.\n"), "f");
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 }
 
@@ -275,7 +275,7 @@ void DifferentialEquationFunctions::execDasslJac(double* t, double* y, double* y
         if (func == NULL)
         {
             sprintf(errorMsg, _("Undefined fonction '%ls'.\n"), m_pStringJacFunctionDyn->get(0));
-            throw ast::ScilabError(errorMsg);
+            throw ast::InternalError(errorMsg);
         }
         ((dassl_jac_t)(func->functionPtr))(t, y, ydot, pd, cj, rpar, ipar);
     }
@@ -286,7 +286,7 @@ void DifferentialEquationFunctions::execDasslJac(double* t, double* y, double* y
     else
     {
         sprintf(errorMsg, _("User function '%s' have not been setted.\n"), "jacobian");
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 }
 
@@ -306,7 +306,7 @@ void DifferentialEquationFunctions::execDaskrPjac(double* res, int* ires, int* n
         if (func == NULL)
         {
             sprintf(errorMsg, _("Undefined fonction '%ls'.\n"), m_pStringPjacFunctionDyn->get(0));
-            throw ast::ScilabError(errorMsg);
+            throw ast::InternalError(errorMsg);
         }
         ((daskr_pjac_t)(func->functionPtr))(res, ires, neq, t, y, ydot, rewt, savr,
                                             wk, h, cj, wp, iwp, ier, rpar, ipar);
@@ -319,7 +319,7 @@ void DifferentialEquationFunctions::execDaskrPjac(double* res, int* ires, int* n
     else
     {
         sprintf(errorMsg, _("User function '%s' have not been setted.\n"), "pjac");
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 }
 
@@ -339,7 +339,7 @@ void DifferentialEquationFunctions::execDaskrPsol(int* neq, double* t, double* y
         if (func == NULL)
         {
             sprintf(errorMsg, _("Undefined fonction '%ls'.\n"), m_pStringPsolFunctionDyn->get(0));
-            throw ast::ScilabError(errorMsg);
+            throw ast::InternalError(errorMsg);
         }
         ((daskr_psol_t)(func->functionPtr))(neq, t, y, ydot, savr, wk, cj, wght,
                                             wp, iwp, b, eplin, ier, rpar, ipar);
@@ -352,7 +352,7 @@ void DifferentialEquationFunctions::execDaskrPsol(int* neq, double* t, double* y
     else
     {
         sprintf(errorMsg, _("User function '%s' have not been setted.\n"), "psol");
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 }
 
@@ -369,7 +369,7 @@ void DifferentialEquationFunctions::execImplF(int* neq, double* t, double* y, do
         if (func == NULL)
         {
             sprintf(errorMsg, _("Undefined fonction '%ls'.\n"), m_pStringFFunctionDyn->get(0));
-            throw ast::ScilabError(errorMsg);
+            throw ast::InternalError(errorMsg);
         }
         ((impl_f_t)(func->functionPtr))(neq, t, y, s, r, ires);
     }
@@ -380,7 +380,7 @@ void DifferentialEquationFunctions::execImplF(int* neq, double* t, double* y, do
     else
     {
         sprintf(errorMsg, _("User function '%s' have not been setted.\n"), "f");
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 }
 
@@ -397,7 +397,7 @@ void DifferentialEquationFunctions::execImplG(int* neq, double* t, double* y, do
         if (func == NULL)
         {
             sprintf(errorMsg, _("Undefined fonction '%ls'.\n"), m_pStringGFunctionDyn->get(0));
-            throw ast::ScilabError(errorMsg);
+            throw ast::InternalError(errorMsg);
         }
         ((impl_g_t)(func->functionPtr))(neq, t, y, ml, mu, p, nrowp);
     }
@@ -408,7 +408,7 @@ void DifferentialEquationFunctions::execImplG(int* neq, double* t, double* y, do
     else
     {
         sprintf(errorMsg, _("User function '%s' have not been setted.\n"), "g");
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 }
 
@@ -425,7 +425,7 @@ void DifferentialEquationFunctions::execImplJac(int* neq, double* t, double* y,
         if (func == NULL)
         {
             sprintf(errorMsg, _("Undefined fonction '%ls'.\n"), m_pStringJacFunctionDyn->get(0));
-            throw ast::ScilabError(errorMsg);
+            throw ast::InternalError(errorMsg);
         }
         ((impl_jac_t)(func->functionPtr))(neq, t, y, s, ml, mu, p, nrowp);
     }
@@ -436,7 +436,7 @@ void DifferentialEquationFunctions::execImplJac(int* neq, double* t, double* y,
     else
     {
         sprintf(errorMsg, _("User function '%s' have not been setted.\n"), "jacobian");
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 }
 
@@ -453,7 +453,7 @@ void DifferentialEquationFunctions::execBvodeGuess(double *x, double *z, double
         if (func == NULL)
         {
             sprintf(errorMsg, _("Undefined fonction '%ls'.\n"), m_pStringGuessFunctionDyn->get(0));
-            throw ast::ScilabError(errorMsg);
+            throw ast::InternalError(errorMsg);
         }
         ((bvode_ddd_t)(func->functionPtr))(x, z, d);
     }
@@ -464,7 +464,7 @@ void DifferentialEquationFunctions::execBvodeGuess(double *x, double *z, double
     else
     {
         sprintf(errorMsg, _("User function '%s' have not been setted.\n"), "guess");
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 }
 
@@ -481,7 +481,7 @@ void DifferentialEquationFunctions::execBvodeDfsub(double *x, double *z, double
         if (func == NULL)
         {
             sprintf(errorMsg, _("Undefined fonction '%ls'.\n"), m_pStringDfsubFunctionDyn->get(0));
-            throw ast::ScilabError(errorMsg);
+            throw ast::InternalError(errorMsg);
         }
         ((bvode_ddd_t)(func->functionPtr))(x, z, d);
     }
@@ -492,7 +492,7 @@ void DifferentialEquationFunctions::execBvodeDfsub(double *x, double *z, double
     else
     {
         sprintf(errorMsg, _("User function '%s' have not been setted.\n"), "fsub");
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 }
 
@@ -509,7 +509,7 @@ void DifferentialEquationFunctions::execBvodeFsub(double *x, double *z, double *
         if (func == NULL)
         {
             sprintf(errorMsg, _("Undefined fonction '%ls'.\n"), m_pStringFsubFunctionDyn->get(0));
-            throw ast::ScilabError(errorMsg);
+            throw ast::InternalError(errorMsg);
         }
         ((bvode_ddd_t)(func->functionPtr))(x, z, d);
     }
@@ -520,7 +520,7 @@ void DifferentialEquationFunctions::execBvodeFsub(double *x, double *z, double *
     else
     {
         sprintf(errorMsg, _("User function '%s' have not been setted.\n"), "fsub");
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 }
 
@@ -537,7 +537,7 @@ void DifferentialEquationFunctions::execBvodeDgsub(int *i, double *z, double *g)
         if (func == NULL)
         {
             sprintf(errorMsg, _("Undefined fonction '%ls'.\n"), m_pStringDgsubFunctionDyn->get(0));
-            throw ast::ScilabError(errorMsg);
+            throw ast::InternalError(errorMsg);
         }
         ((bvode_idd_t)(func->functionPtr))(i, z, g);
     }
@@ -548,7 +548,7 @@ void DifferentialEquationFunctions::execBvodeDgsub(int *i, double *z, double *g)
     else
     {
         sprintf(errorMsg, _("User function '%s' have not been setted.\n"), "gsub");
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 }
 
@@ -565,7 +565,7 @@ void DifferentialEquationFunctions::execBvodeGsub(int *i, double *z, double *g)
         if (func == NULL)
         {
             sprintf(errorMsg, _("Undefined fonction '%ls'.\n"), m_pStringGsubFunctionDyn->get(0));
-            throw ast::ScilabError(errorMsg);
+            throw ast::InternalError(errorMsg);
         }
         ((bvode_idd_t)(func->functionPtr))(i, z, g);
     }
@@ -576,7 +576,7 @@ void DifferentialEquationFunctions::execBvodeGsub(int *i, double *z, double *g)
     else
     {
         sprintf(errorMsg, _("User function '%s' have not been setted.\n"), "gsub");
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 }
 
@@ -593,7 +593,7 @@ void DifferentialEquationFunctions::execFevalF(int *nn, double *x1, double *x2,
         if (func == NULL)
         {
             sprintf(errorMsg, _("Undefined fonction '%ls'.\n"), m_pStringFFunctionDyn->get(0));
-            throw ast::ScilabError(errorMsg);
+            throw ast::InternalError(errorMsg);
         }
 
         ((feval_f_t)(func->functionPtr))(nn, x1, x2, xres, itype);
@@ -605,7 +605,7 @@ void DifferentialEquationFunctions::execFevalF(int *nn, double *x1, double *x2,
     else
     {
         sprintf(errorMsg, _("User function '%s' have not been setted.\n"), "f");
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 }
 
@@ -622,7 +622,7 @@ void DifferentialEquationFunctions::execInt3dF(double* x, int* numfun, double* f
         if (func == NULL)
         {
             sprintf(errorMsg, _("Undefined fonction '%ls'.\n"), m_pStringFFunctionDyn->get(0));
-            throw ast::ScilabError(errorMsg);
+            throw ast::InternalError(errorMsg);
         }
         ((int3d_f_t)(func->functionPtr))(x, numfun, funvls);
     }
@@ -633,7 +633,7 @@ void DifferentialEquationFunctions::execInt3dF(double* x, int* numfun, double* f
     else
     {
         sprintf(errorMsg, _("User function '%s' have not been setted.\n"), "f");
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 }
 
@@ -650,7 +650,7 @@ double DifferentialEquationFunctions::execInt2dF(double* x, double* y)
         if (func == NULL)
         {
             sprintf(errorMsg, _("Undefined fonction '%ls'.\n"), m_pStringFFunctionDyn->get(0));
-            throw ast::ScilabError(errorMsg);
+            throw ast::InternalError(errorMsg);
         }
         return ((int2d_f_t)(func->functionPtr))(x, y);
     }
@@ -661,7 +661,7 @@ double DifferentialEquationFunctions::execInt2dF(double* x, double* y)
     else
     {
         sprintf(errorMsg, _("User function '%s' have not been setted.\n"), "f");
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 }
 
@@ -678,7 +678,7 @@ double DifferentialEquationFunctions::execIntgF(double* x)
         if (func == NULL)
         {
             sprintf(errorMsg, _("Undefined fonction '%ls'.\n"), m_pStringFFunctionDyn->get(0));
-            throw ast::ScilabError(errorMsg);
+            throw ast::InternalError(errorMsg);
         }
         return ((intg_f_t)(func->functionPtr))(x);
     }
@@ -689,7 +689,7 @@ double DifferentialEquationFunctions::execIntgF(double* x)
     else
     {
         sprintf(errorMsg, _("User function '%s' have not been setted.\n"), "f");
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 }
 
@@ -706,7 +706,7 @@ void DifferentialEquationFunctions::execOdeF(int* n, double* t, double* y, doubl
         if (func == NULL)
         {
             sprintf(errorMsg, _("Undefined fonction '%ls'.\n"), m_pStringFFunctionDyn->get(0));
-            throw ast::ScilabError(errorMsg);
+            throw ast::InternalError(errorMsg);
         }
 
         if (m_wstrCaller == L"ode")
@@ -732,7 +732,7 @@ void DifferentialEquationFunctions::execOdeF(int* n, double* t, double* y, doubl
     else
     {
         sprintf(errorMsg, _("User function '%s' have not been setted.\n"), "f");
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 }
 
@@ -749,7 +749,7 @@ void DifferentialEquationFunctions::execFunctionJac(int *n, double *t, double *y
         if (func == NULL)
         {
             sprintf(errorMsg, _("Undefined fonction '%ls'.\n"), m_pStringJacFunctionDyn->get(0));
-            throw ast::ScilabError(errorMsg);
+            throw ast::InternalError(errorMsg);
         }
         ((func_jac_t)(func->functionPtr))(n, t, y, ml, mu, J, nrpd);
     }
@@ -760,7 +760,7 @@ void DifferentialEquationFunctions::execFunctionJac(int *n, double *t, double *y
     else
     {
         sprintf(errorMsg, _("User function '%s' have not been setted.\n"), "jacobian");
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 }
 
@@ -777,7 +777,7 @@ void DifferentialEquationFunctions::execFunctionG(int* n, double* t, double* y,
         if (func == NULL)
         {
             sprintf(errorMsg, _("Undefined fonction '%ls'.\n"), m_pStringGFunctionDyn->get(0));
-            throw ast::ScilabError(errorMsg);
+            throw ast::InternalError(errorMsg);
         }
         ((func_g_t)(func->functionPtr))(n, t, y, ng, gout);
     }
@@ -788,7 +788,7 @@ void DifferentialEquationFunctions::execFunctionG(int* n, double* t, double* y,
     else
     {
         sprintf(errorMsg, _("User function '%s' have not been setted.\n"), "g");
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 }
 
@@ -1161,7 +1161,6 @@ void DifferentialEquationFunctions::callOdeMacroF(int* n, double* t, double* y,
     char errorMsg[256];
     int one         = 1;
     int iRetCount   = 1;
-    bool bOk        = false;
 
     typed_list in;
     typed_list out;
@@ -1216,11 +1215,17 @@ void DifferentialEquationFunctions::callOdeMacroF(int* n, double* t, double* y,
 
     try
     {
-        bOk = m_pCallFFunction->call(in, opt, iRetCount, out, &execFunc) == types::Function::OK;
+        // new std::wstring(L"") is delete in destructor of ast::CommentExp
+        m_pCallFFunction->invoke(in, opt, iRetCount, out, execFunc, ast::CommentExp(Location(), new std::wstring(L"")));
     }
-    catch (ast::ScilabMessage & /* sm */)
+    catch (const ast::InternalError& ie)
     {
-        bOk = false;
+        for (int i = 0; i < (int)m_FArgs.size(); i++)
+        {
+            m_FArgs[i]->DecreaseRef();
+        }
+
+        throw ie;
     }
 
     for (int i = 0; i < (int)m_FArgs.size(); i++)
@@ -1228,29 +1233,12 @@ void DifferentialEquationFunctions::callOdeMacroF(int* n, double* t, double* y,
         m_FArgs[i]->DecreaseRef();
     }
 
-    if (bOk == false)
-    {
-        if (ConfigVariable::getLastErrorFunction() == L"")
-        {
-            ConfigVariable::setLastErrorFunction(m_pCallFFunction->getName());
-        }
-
-        if (m_pCallFFunction->isMacro() || m_pCallFFunction->isMacroFile())
-        {
-            wchar_t szError[bsiz];
-            os_swprintf(szError, bsiz, _W("at line % 5d of function %ls called by :\n").c_str(), ConfigVariable::getLastErrorLine(), m_pCallFFunction->getName().c_str());
-            throw ast::ScilabMessage(szError);
-        }
-
-        throw ast::ScilabMessage();
-    }
-
     if (out.size() != iRetCount)
     {
         char* pstrName = wide_string_to_UTF8(m_pCallFFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong number of output argument(s): %d expected.\n"), pstrName, iRetCount);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     out[0]->IncreaseRef();
@@ -1295,7 +1283,7 @@ void DifferentialEquationFunctions::callOdeMacroF(int* n, double* t, double* y,
         char* pstrName = wide_string_to_UTF8(m_pCallFFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong type for output argument #%d: Real matrix expected.\n"), pstrName, 1);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
     types::Double* pDblOut = out[0]->getAs<types::Double>();
     if (pDblOut->isComplex())
@@ -1303,7 +1291,7 @@ void DifferentialEquationFunctions::callOdeMacroF(int* n, double* t, double* y,
         char* pstrName = wide_string_to_UTF8(m_pCallFFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong type for output argument #%d: Real matrix expected.\n"), pstrName, 1);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     if (m_odedcFlag && m_odedcYDSize)
@@ -1327,7 +1315,6 @@ void DifferentialEquationFunctions::callMacroJac(int* n, double* t, double* y, i
     int iRetCount   = 1;
     int one         = 1;
     int iMaxSize    = (*n) * (*nrpd);
-    bool bOk        = false;
 
     typed_list in;
     typed_list out;
@@ -1352,11 +1339,17 @@ void DifferentialEquationFunctions::callMacroJac(int* n, double* t, double* y, i
 
     try
     {
-        bOk = m_pCallJacFunction->call(in, opt, iRetCount, out, &execFunc) == types::Function::OK;
+        // new std::wstring(L"") is delete in destructor of ast::CommentExp
+        m_pCallJacFunction->invoke(in, opt, iRetCount, out, execFunc, ast::CommentExp(Location(), new std::wstring(L"")));
     }
-    catch (ast::ScilabMessage & /* sm */)
+    catch (const ast::InternalError& ie)
     {
-        bOk = false;
+        for (int i = 0; i < (int)m_JacArgs.size(); i++)
+        {
+            m_JacArgs[i]->DecreaseRef();
+        }
+
+        throw ie;
     }
 
     for (int i = 0; i < (int)m_JacArgs.size(); i++)
@@ -1364,23 +1357,6 @@ void DifferentialEquationFunctions::callMacroJac(int* n, double* t, double* y, i
         m_JacArgs[i]->DecreaseRef();
     }
 
-    if (bOk == false)
-    {
-        if (ConfigVariable::getLastErrorFunction() == L"")
-        {
-            ConfigVariable::setLastErrorFunction(m_pCallJacFunction->getName());
-        }
-
-        if (m_pCallJacFunction->isMacro() || m_pCallJacFunction->isMacroFile())
-        {
-            wchar_t szError[bsiz];
-            os_swprintf(szError, bsiz, _W("at line % 5d of function %ls called by :\n").c_str(), ConfigVariable::getLastErrorLine(), m_pCallJacFunction->getName().c_str());
-            throw ast::ScilabMessage(szError);
-        }
-
-        throw ast::ScilabMessage();
-    }
-
     out[0]->IncreaseRef();
     pDblT->DecreaseRef();
     pDblY->DecreaseRef();
@@ -1400,7 +1376,7 @@ void DifferentialEquationFunctions::callMacroJac(int* n, double* t, double* y, i
         char* pstrName = wide_string_to_UTF8(m_pCallJacFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong number of output argument(s): %d expected.\n"), pstrName, iRetCount);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     out[0]->DecreaseRef();
@@ -1409,7 +1385,7 @@ void DifferentialEquationFunctions::callMacroJac(int* n, double* t, double* y, i
         char* pstrName = wide_string_to_UTF8(m_pCallJacFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong type for output argument #%d: Real matrix expected.\n"), pstrName, 1);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
 
@@ -1421,7 +1397,7 @@ void DifferentialEquationFunctions::callMacroJac(int* n, double* t, double* y, i
         char* pstrName = wide_string_to_UTF8(m_pCallJacFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong size for output argument #%d: A size less or equal than %d expected.\n"), pstrName, 1, iMaxSize);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     C2F(dcopy)(&iSizeOut, pDblOut->get(), &one, J, &one);
@@ -1432,7 +1408,6 @@ void DifferentialEquationFunctions::callMacroG(int* n, double* t, double* y, int
     char errorMsg[256];
     int iRetCount   = 1;
     int one         = 1;
-    bool bOk        = false;
 
     typed_list in;
     typed_list out;
@@ -1457,11 +1432,17 @@ void DifferentialEquationFunctions::callMacroG(int* n, double* t, double* y, int
 
     try
     {
-        bOk = m_pCallGFunction->call(in, opt, iRetCount, out, &execFunc) == types::Function::OK;
+        // new std::wstring(L"") is delete in destructor of ast::CommentExp
+        m_pCallGFunction->invoke(in, opt, iRetCount, out, execFunc, ast::CommentExp(Location(), new std::wstring(L"")));
     }
-    catch (ast::ScilabMessage & /* sm */)
+    catch (const ast::InternalError& ie)
     {
-        bOk = false;
+        for (int i = 0; i < (int)m_odeGArgs.size(); i++)
+        {
+            m_odeGArgs[i]->DecreaseRef();
+        }
+
+        throw ie;
     }
 
     for (int i = 0; i < (int)m_odeGArgs.size(); i++)
@@ -1469,29 +1450,12 @@ void DifferentialEquationFunctions::callMacroG(int* n, double* t, double* y, int
         m_odeGArgs[i]->DecreaseRef();
     }
 
-    if (bOk == false)
-    {
-        if (ConfigVariable::getLastErrorFunction() == L"")
-        {
-            ConfigVariable::setLastErrorFunction(m_pCallGFunction->getName());
-        }
-
-        if (m_pCallGFunction->isMacro() || m_pCallGFunction->isMacroFile())
-        {
-            wchar_t szError[bsiz];
-            os_swprintf(szError, bsiz, _W("at line % 5d of function %ls called by :\n").c_str(), ConfigVariable::getLastErrorLine(), m_pCallGFunction->getName().c_str());
-            throw ast::ScilabMessage(szError);
-        }
-
-        throw ast::ScilabMessage();
-    }
-
     if (out.size() != iRetCount)
     {
         char* pstrName = wide_string_to_UTF8(m_pCallGFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong number of output argument(s): %d expected.\n"), pstrName, iRetCount);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     out[0]->IncreaseRef();
@@ -1515,7 +1479,7 @@ void DifferentialEquationFunctions::callMacroG(int* n, double* t, double* y, int
         char* pstrName = wide_string_to_UTF8(m_pCallGFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong type for output argument #%d: Real matrix expected.\n"), pstrName, 1);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     C2F(dcopy)(ng, out[0]->getAs<types::Double>()->get(), &one, gout, &one);
@@ -1530,7 +1494,6 @@ double DifferentialEquationFunctions::callIntgMacroF(double* t)
     char errorMsg[256];
     int one         = 1;
     int iRetCount   = 1;
-    bool bOk        = false;
 
     typed_list in;
     typed_list out;
@@ -1552,11 +1515,17 @@ double DifferentialEquationFunctions::callIntgMacroF(double* t)
 
     try
     {
-        bOk = m_pCallFFunction->call(in, opt, iRetCount, out, &execFunc) == types::Function::OK;
+        // new std::wstring(L"") is delete in destructor of ast::CommentExp
+        m_pCallFFunction->invoke(in, opt, iRetCount, out, execFunc, ast::CommentExp(Location(), new std::wstring(L"")));
     }
-    catch (ast::ScilabMessage & /* sm */)
+    catch (const ast::InternalError& ie)
     {
-        bOk = false;
+        for (int i = 0; i < (int)m_FArgs.size(); i++)
+        {
+            m_FArgs[i]->DecreaseRef();
+        }
+
+        throw ie;
     }
 
     for (int i = 0; i < (int)m_FArgs.size(); i++)
@@ -1564,29 +1533,12 @@ double DifferentialEquationFunctions::callIntgMacroF(double* t)
         m_FArgs[i]->DecreaseRef();
     }
 
-    if (bOk == false)
-    {
-        if (ConfigVariable::getLastErrorFunction() == L"")
-        {
-            ConfigVariable::setLastErrorFunction(m_pCallFFunction->getName());
-        }
-
-        if (m_pCallFFunction->isMacro() || m_pCallFFunction->isMacroFile())
-        {
-            wchar_t szError[bsiz];
-            os_swprintf(szError, bsiz, _W("at line % 5d of function %ls called by :\n").c_str(), ConfigVariable::getLastErrorLine(), m_pCallFFunction->getName().c_str());
-            throw ast::ScilabMessage(szError);
-        }
-
-        throw ast::ScilabMessage();
-    }
-
     if (out.size() != iRetCount)
     {
         char* pstrName = wide_string_to_UTF8(m_pCallFFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong number of output argument(s): %d expected.\n"), pstrName, iRetCount);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     out[0]->IncreaseRef();
@@ -1603,7 +1555,7 @@ double DifferentialEquationFunctions::callIntgMacroF(double* t)
         char* pstrName = wide_string_to_UTF8(m_pCallFFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong type for output argument #%d: Real matrix expected.\n"), pstrName, 1);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
 
     }
 
@@ -1613,7 +1565,7 @@ double DifferentialEquationFunctions::callIntgMacroF(double* t)
         char* pstrName = wide_string_to_UTF8(m_pCallFFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong size for output argument #%d: A Scalar expected.\n"), pstrName, 1);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     double res = pDblOut->get(0);
@@ -1630,7 +1582,6 @@ double DifferentialEquationFunctions::callInt2dMacroF(double* x, double* y)
     char errorMsg[256];
     int one         = 1;
     int iRetCount   = 1;
-    bool bOk        = false;
 
     typed_list in;
     typed_list out;
@@ -1655,11 +1606,17 @@ double DifferentialEquationFunctions::callInt2dMacroF(double* x, double* y)
 
     try
     {
-        bOk = m_pCallFFunction->call(in, opt, iRetCount, out, &execFunc) == types::Function::OK;
+        // new std::wstring(L"") is delete in destructor of ast::CommentExp
+        m_pCallFFunction->invoke(in, opt, iRetCount, out, execFunc, ast::CommentExp(Location(), new std::wstring(L"")));
     }
-    catch (ast::ScilabMessage & /* sm */)
+    catch (const ast::InternalError& ie)
     {
-        bOk = false;
+        for (int i = 0; i < (int)m_FArgs.size(); i++)
+        {
+            m_FArgs[i]->DecreaseRef();
+        }
+
+        throw ie;
     }
 
     for (int i = 0; i < (int)m_FArgs.size(); i++)
@@ -1667,29 +1624,12 @@ double DifferentialEquationFunctions::callInt2dMacroF(double* x, double* y)
         m_FArgs[i]->DecreaseRef();
     }
 
-    if (bOk == false)
-    {
-        if (ConfigVariable::getLastErrorFunction() == L"")
-        {
-            ConfigVariable::setLastErrorFunction(m_pCallFFunction->getName());
-        }
-
-        if (m_pCallFFunction->isMacro() || m_pCallFFunction->isMacroFile())
-        {
-            wchar_t szError[bsiz];
-            os_swprintf(szError, bsiz, _W("at line % 5d of function %ls called by :\n").c_str(), ConfigVariable::getLastErrorLine(), m_pCallFFunction->getName().c_str());
-            throw ast::ScilabMessage(szError);
-        }
-
-        throw ast::ScilabMessage();
-    }
-
     if (out.size() != iRetCount)
     {
         char* pstrName = wide_string_to_UTF8(m_pCallFFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong number of output argument(s): %d expected.\n"), pstrName, iRetCount);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     out[0]->IncreaseRef();
@@ -1712,7 +1652,7 @@ double DifferentialEquationFunctions::callInt2dMacroF(double* x, double* y)
         char* pstrName = wide_string_to_UTF8(m_pCallFFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong type for output argument #%d: Real matrix expected.\n"), pstrName, 1);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     types::Double* pDblOut = out[0]->getAs<types::Double>();
@@ -1721,7 +1661,7 @@ double DifferentialEquationFunctions::callInt2dMacroF(double* x, double* y)
         char* pstrName = wide_string_to_UTF8(m_pCallFFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong size for output argument #%d: A Scalar expected.\n"), pstrName, 1);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     double res = pDblOut->get(0);
@@ -1738,7 +1678,6 @@ void DifferentialEquationFunctions::callInt3dMacroF(double* xyz, int* numfun, do
     char errorMsg[256];
     int one         = 1;
     int iRetCount   = 1;
-    bool bOk        = false;
 
     typed_list in;
     typed_list out;
@@ -1764,11 +1703,17 @@ void DifferentialEquationFunctions::callInt3dMacroF(double* xyz, int* numfun, do
 
     try
     {
-        bOk = m_pCallFFunction->call(in, opt, iRetCount, out, &execFunc) == types::Function::OK;
+        // new std::wstring(L"") is delete in destructor of ast::CommentExp
+        m_pCallFFunction->invoke(in, opt, iRetCount, out, execFunc, ast::CommentExp(Location(), new std::wstring(L"")));
     }
-    catch (ast::ScilabMessage & /* sm */)
+    catch (const ast::InternalError& ie)
     {
-        bOk = false;
+        for (int i = 0; i < (int)m_FArgs.size(); i++)
+        {
+            m_FArgs[i]->DecreaseRef();
+        }
+
+        throw ie;
     }
 
     for (int i = 0; i < (int)m_FArgs.size(); i++)
@@ -1776,29 +1721,12 @@ void DifferentialEquationFunctions::callInt3dMacroF(double* xyz, int* numfun, do
         m_FArgs[i]->DecreaseRef();
     }
 
-    if (bOk == false)
-    {
-        if (ConfigVariable::getLastErrorFunction() == L"")
-        {
-            ConfigVariable::setLastErrorFunction(m_pCallFFunction->getName());
-        }
-
-        if (m_pCallFFunction->isMacro() || m_pCallFFunction->isMacroFile())
-        {
-            wchar_t szError[bsiz];
-            os_swprintf(szError, bsiz, _W("at line % 5d of function %ls called by :\n").c_str(), ConfigVariable::getLastErrorLine(), m_pCallFFunction->getName().c_str());
-            throw ast::ScilabMessage(szError);
-        }
-
-        throw ast::ScilabMessage();
-    }
-
     if (out.size() != iRetCount)
     {
         char* pstrName = wide_string_to_UTF8(m_pCallFFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong number of output argument(s): %d expected.\n"), pstrName, iRetCount);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     out[0]->IncreaseRef();
@@ -1821,7 +1749,7 @@ void DifferentialEquationFunctions::callInt3dMacroF(double* xyz, int* numfun, do
         char* pstrName = wide_string_to_UTF8(m_pCallFFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong type for output argument #%d: Real matrix expected.\n"), pstrName, 1);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     types::Double* pDblOut = out[0]->getAs<types::Double>();
@@ -1830,7 +1758,7 @@ void DifferentialEquationFunctions::callInt3dMacroF(double* xyz, int* numfun, do
         char* pstrName = wide_string_to_UTF8(m_pCallFFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong size for output argument #%d: Matrix of size %d expected.\n"), pstrName, 1, *numfun);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     C2F(dcopy)(numfun, pDblOut->get(), &one, funvls, &one);
@@ -1845,7 +1773,6 @@ void DifferentialEquationFunctions::callFevalMacroF(int* nn, double* x1, double*
     char errorMsg[256];
     int one         = 1;
     int iRetCount   = 1;
-    bool bOk        = false;
 
     typed_list in;
     typed_list out;
@@ -1875,11 +1802,17 @@ void DifferentialEquationFunctions::callFevalMacroF(int* nn, double* x1, double*
     }
     try
     {
-        bOk = m_pCallFFunction->call(in, opt, iRetCount, out, &execFunc) == types::Function::OK;
+        // new std::wstring(L"") is delete in destructor of ast::CommentExp
+        m_pCallFFunction->invoke(in, opt, iRetCount, out, execFunc, ast::CommentExp(Location(), new std::wstring(L"")));
     }
-    catch (ast::ScilabMessage & /* sm */)
+    catch (const ast::InternalError& ie)
     {
-        bOk = false;
+        for (int i = 0; i < (int)m_FArgs.size(); i++)
+        {
+            m_FArgs[i]->DecreaseRef();
+        }
+
+        throw ie;
     }
 
     for (int i = 0; i < (int)m_FArgs.size(); i++)
@@ -1887,29 +1820,12 @@ void DifferentialEquationFunctions::callFevalMacroF(int* nn, double* x1, double*
         m_FArgs[i]->DecreaseRef();
     }
 
-    if (bOk == false)
-    {
-        if (ConfigVariable::getLastErrorFunction() == L"")
-        {
-            ConfigVariable::setLastErrorFunction(m_pCallFFunction->getName());
-        }
-
-        if (m_pCallFFunction->isMacro() || m_pCallFFunction->isMacroFile())
-        {
-            wchar_t szError[bsiz];
-            os_swprintf(szError, bsiz, _W("at line % 5d of function %ls called by :\n").c_str(), ConfigVariable::getLastErrorLine(), m_pCallFFunction->getName().c_str());
-            throw ast::ScilabMessage(szError);
-        }
-
-        throw ast::ScilabMessage();
-    }
-
     if (out.size() != iRetCount)
     {
         char* pstrName = wide_string_to_UTF8(m_pCallFFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong number of output argument(s): %d expected.\n"), pstrName, iRetCount);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     out[0]->IncreaseRef();
@@ -1935,7 +1851,7 @@ void DifferentialEquationFunctions::callFevalMacroF(int* nn, double* x1, double*
         char* pstrName = wide_string_to_UTF8(m_pCallFFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong type for output argument #%d: Real matrix expected.\n"), pstrName, 1);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
 
     }
 
@@ -1945,7 +1861,7 @@ void DifferentialEquationFunctions::callFevalMacroF(int* nn, double* x1, double*
         char* pstrName = wide_string_to_UTF8(m_pCallFFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong size for output argument #%d: A Scalar expected.\n"), pstrName, 1);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     if (pDblOut->isComplex())
@@ -1971,7 +1887,6 @@ void DifferentialEquationFunctions::callBvodeMacroGsub(int* i, double* z, double
     char errorMsg[256];
     int one         = 1;
     int iRetCount   = 1;
-    bool bOk        = false;
 
     typed_list in;
     typed_list out;
@@ -1999,11 +1914,17 @@ void DifferentialEquationFunctions::callBvodeMacroGsub(int* i, double* z, double
 
     try
     {
-        bOk = m_pCallGsubFunction->call(in, opt, iRetCount, out, &execFunc) == types::Function::OK;
+        // new std::wstring(L"") is delete in destructor of ast::CommentExp
+        m_pCallGsubFunction->invoke(in, opt, iRetCount, out, execFunc, ast::CommentExp(Location(), new std::wstring(L"")));
     }
-    catch (ast::ScilabMessage & /* sm */)
+    catch (const ast::InternalError& ie)
     {
-        bOk = false;
+        for (int i = 0; i < (int)m_GsubArgs.size(); i++)
+        {
+            m_GsubArgs[i]->DecreaseRef();
+        }
+
+        throw ie;
     }
 
     for (int i = 0; i < (int)m_GsubArgs.size(); i++)
@@ -2011,29 +1932,12 @@ void DifferentialEquationFunctions::callBvodeMacroGsub(int* i, double* z, double
         m_GsubArgs[i]->DecreaseRef();
     }
 
-    if (bOk == false)
-    {
-        if (ConfigVariable::getLastErrorFunction() == L"")
-        {
-            ConfigVariable::setLastErrorFunction(m_pCallGsubFunction->getName());
-        }
-
-        if (m_pCallGsubFunction->isMacro() || m_pCallGsubFunction->isMacroFile())
-        {
-            wchar_t szError[bsiz];
-            os_swprintf(szError, bsiz, _W("at line % 5d of function %ls called by :\n").c_str(), ConfigVariable::getLastErrorLine(), m_pCallGsubFunction->getName().c_str());
-            throw ast::ScilabMessage(szError);
-        }
-
-        throw ast::ScilabMessage();
-    }
-
     if (out.size() != iRetCount)
     {
         char* pstrName = wide_string_to_UTF8(m_pCallGsubFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong number of output argument(s): %d expected.\n"), pstrName, iRetCount);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     out[0]->IncreaseRef();
@@ -2056,7 +1960,7 @@ void DifferentialEquationFunctions::callBvodeMacroGsub(int* i, double* z, double
         char* pstrName = wide_string_to_UTF8(m_pCallGsubFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong type for output argument #%d: Real matrix expected.\n"), pstrName, 1);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     types::Double* pDblOut = out[0]->getAs<types::Double>();
@@ -2065,7 +1969,7 @@ void DifferentialEquationFunctions::callBvodeMacroGsub(int* i, double* z, double
         char* pstrName = wide_string_to_UTF8(m_pCallGsubFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong size for output argument #%d: A Scalar expected.\n"), pstrName, 1);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     *g = pDblOut->get(0);
@@ -2080,7 +1984,6 @@ void DifferentialEquationFunctions::callBvodeMacroDgsub(int* i, double* z, doubl
     char errorMsg[256];
     int one         = 1;
     int iRetCount   = 1;
-    bool bOk        = false;
 
     typed_list in;
     typed_list out;
@@ -2107,11 +2010,17 @@ void DifferentialEquationFunctions::callBvodeMacroDgsub(int* i, double* z, doubl
 
     try
     {
-        bOk = m_pCallDgsubFunction->call(in, opt, iRetCount, out, &execFunc) == types::Function::OK;
+        // new std::wstring(L"") is delete in destructor of ast::CommentExp
+        m_pCallDgsubFunction->invoke(in, opt, iRetCount, out, execFunc, ast::CommentExp(Location(), new std::wstring(L"")));
     }
-    catch (ast::ScilabMessage & /* sm */)
+    catch (const ast::InternalError& ie)
     {
-        bOk = false;
+        for (int i = 0; i < (int)m_DgsubArgs.size(); i++)
+        {
+            m_DgsubArgs[i]->DecreaseRef();
+        }
+
+        throw ie;
     }
 
     for (int i = 0; i < (int)m_DgsubArgs.size(); i++)
@@ -2119,29 +2028,12 @@ void DifferentialEquationFunctions::callBvodeMacroDgsub(int* i, double* z, doubl
         m_DgsubArgs[i]->DecreaseRef();
     }
 
-    if (bOk == false)
-    {
-        if (ConfigVariable::getLastErrorFunction() == L"")
-        {
-            ConfigVariable::setLastErrorFunction(m_pCallDgsubFunction->getName());
-        }
-
-        if (m_pCallDgsubFunction->isMacro() || m_pCallDgsubFunction->isMacroFile())
-        {
-            wchar_t szError[bsiz];
-            os_swprintf(szError, bsiz, _W("at line % 5d of function %ls called by :\n").c_str(), ConfigVariable::getLastErrorLine(), m_pCallDgsubFunction->getName().c_str());
-            throw ast::ScilabMessage(szError);
-        }
-
-        throw ast::ScilabMessage();
-    }
-
     if (out.size() != iRetCount)
     {
         char* pstrName = wide_string_to_UTF8(m_pCallDgsubFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong number of output argument(s): %d expected.\n"), pstrName, iRetCount);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     out[0]->IncreaseRef();
@@ -2164,7 +2056,7 @@ void DifferentialEquationFunctions::callBvodeMacroDgsub(int* i, double* z, doubl
         char* pstrName = wide_string_to_UTF8(m_pCallDgsubFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong type for output argument #%d: Real matrix expected.\n"), pstrName, 1);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     types::Double* pDblOut = out[0]->getAs<types::Double>();
@@ -2173,7 +2065,7 @@ void DifferentialEquationFunctions::callBvodeMacroDgsub(int* i, double* z, doubl
         char* pstrName = wide_string_to_UTF8(m_pCallDgsubFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong size for output argument #%d: A Matrix of size %d expected.\n"), pstrName, 1, m_bvodeM);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     C2F(dcopy)(&m_bvodeM, pDblOut->get(), &one, g, &one);
@@ -2188,7 +2080,6 @@ void DifferentialEquationFunctions::callBvodeMacroFsub(double* x, double* z, dou
     char errorMsg[256];
     int one         = 1;
     int iRetCount   = 1;
-    bool bOk        = false;
 
     typed_list in;
     typed_list out;
@@ -2215,11 +2106,17 @@ void DifferentialEquationFunctions::callBvodeMacroFsub(double* x, double* z, dou
 
     try
     {
-        bOk = m_pCallFsubFunction->call(in, opt, iRetCount, out, &execFunc) == types::Function::OK;
+        // new std::wstring(L"") is delete in destructor of ast::CommentExp
+        m_pCallFsubFunction->invoke(in, opt, iRetCount, out, execFunc, ast::CommentExp(Location(), new std::wstring(L"")));
     }
-    catch (ast::ScilabMessage & /* sm */)
+    catch (const ast::InternalError& ie)
     {
-        bOk = false;
+        for (int i = 0; i < (int)m_FsubArgs.size(); i++)
+        {
+            m_FsubArgs[i]->DecreaseRef();
+        }
+
+        throw ie;
     }
 
     for (int i = 0; i < (int)m_FsubArgs.size(); i++)
@@ -2227,29 +2124,12 @@ void DifferentialEquationFunctions::callBvodeMacroFsub(double* x, double* z, dou
         m_FsubArgs[i]->DecreaseRef();
     }
 
-    if (bOk == false)
-    {
-        if (ConfigVariable::getLastErrorFunction() == L"")
-        {
-            ConfigVariable::setLastErrorFunction(m_pCallFsubFunction->getName());
-        }
-
-        if (m_pCallFsubFunction->isMacro() || m_pCallFsubFunction->isMacroFile())
-        {
-            wchar_t szError[bsiz];
-            os_swprintf(szError, bsiz, _W("at line % 5d of function %ls called by :\n").c_str(), ConfigVariable::getLastErrorLine(), m_pCallFsubFunction->getName().c_str());
-            throw ast::ScilabMessage(szError);
-        }
-
-        throw ast::ScilabMessage();
-    }
-
     if (out.size() != iRetCount)
     {
         char* pstrName = wide_string_to_UTF8(m_pCallFsubFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong number of output argument(s): %d expected.\n"), pstrName, iRetCount);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     out[0]->IncreaseRef();
@@ -2272,7 +2152,7 @@ void DifferentialEquationFunctions::callBvodeMacroFsub(double* x, double* z, dou
         char* pstrName = wide_string_to_UTF8(m_pCallFsubFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong type for output argument #%d: Real matrix expected.\n"), pstrName, 1);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     types::Double* pDblOut = out[0]->getAs<types::Double>();
@@ -2281,7 +2161,7 @@ void DifferentialEquationFunctions::callBvodeMacroFsub(double* x, double* z, dou
         char* pstrName = wide_string_to_UTF8(m_pCallFsubFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong size for output argument #%d: A matrix of size %d expected.\n"), pstrName, 1, m_bvodeN);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     C2F(dcopy)(&m_bvodeN, pDblOut->get(), &one, d, &one);
@@ -2296,7 +2176,6 @@ void DifferentialEquationFunctions::callBvodeMacroDfsub(double* x, double* z, do
     char errorMsg[256];
     int one         = 1;
     int iRetCount   = 1;
-    bool bOk        = false;
 
     typed_list in;
     typed_list out;
@@ -2323,11 +2202,17 @@ void DifferentialEquationFunctions::callBvodeMacroDfsub(double* x, double* z, do
 
     try
     {
-        bOk = m_pCallDfsubFunction->call(in, opt, iRetCount, out, &execFunc) == types::Function::OK;
+        // new std::wstring(L"") is delete in destructor of ast::CommentExp
+        m_pCallDfsubFunction->invoke(in, opt, iRetCount, out, execFunc, ast::CommentExp(Location(), new std::wstring(L"")));
     }
-    catch (ast::ScilabMessage & /* sm */)
+    catch (const ast::InternalError& ie)
     {
-        bOk = false;
+        for (int i = 0; i < (int)m_DfsubArgs.size(); i++)
+        {
+            m_DfsubArgs[i]->DecreaseRef();
+        }
+
+        throw ie;
     }
 
     for (int i = 0; i < (int)m_DfsubArgs.size(); i++)
@@ -2335,29 +2220,12 @@ void DifferentialEquationFunctions::callBvodeMacroDfsub(double* x, double* z, do
         m_DfsubArgs[i]->DecreaseRef();
     }
 
-    if (bOk == false)
-    {
-        if (ConfigVariable::getLastErrorFunction() == L"")
-        {
-            ConfigVariable::setLastErrorFunction(m_pCallDfsubFunction->getName());
-        }
-
-        if (m_pCallDfsubFunction->isMacro() || m_pCallDfsubFunction->isMacroFile())
-        {
-            wchar_t szError[bsiz];
-            os_swprintf(szError, bsiz, _W("at line % 5d of function %ls called by :\n").c_str(), ConfigVariable::getLastErrorLine(), m_pCallDfsubFunction->getName().c_str());
-            throw ast::ScilabMessage(szError);
-        }
-
-        throw ast::ScilabMessage();
-    }
-
     if (out.size() != iRetCount)
     {
         char* pstrName = wide_string_to_UTF8(m_pCallDfsubFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong number of output argument(s): %d expected.\n"), pstrName, iRetCount);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     out[0]->IncreaseRef();
@@ -2380,7 +2248,7 @@ void DifferentialEquationFunctions::callBvodeMacroDfsub(double* x, double* z, do
         char* pstrName = wide_string_to_UTF8(m_pCallDfsubFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong type for output argument #%d: Real matrix expected.\n"), pstrName, 1);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     types::Double* pDblOut = out[0]->getAs<types::Double>();
@@ -2390,7 +2258,7 @@ void DifferentialEquationFunctions::callBvodeMacroDfsub(double* x, double* z, do
         char* pstrName = wide_string_to_UTF8(m_pCallDfsubFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong size for output argument #%d: A matrix of size %d expected.\n"), pstrName, 1, size);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     C2F(dcopy)(&size, pDblOut->get(), &one, d, &one);
@@ -2405,7 +2273,6 @@ void DifferentialEquationFunctions::callBvodeMacroGuess(double* x, double* z, do
     char errorMsg[256];
     int one         = 1;
     int iRetCount   = 2;
-    bool bOk        = false;
 
     typed_list in;
     typed_list out;
@@ -2426,11 +2293,17 @@ void DifferentialEquationFunctions::callBvodeMacroGuess(double* x, double* z, do
 
     try
     {
-        bOk = m_pCallGuessFunction->call(in, opt, iRetCount, out, &execFunc) == types::Function::OK;
+        // new std::wstring(L"") is delete in destructor of ast::CommentExp
+        m_pCallGuessFunction->invoke(in, opt, iRetCount, out, execFunc, ast::CommentExp(Location(), new std::wstring(L"")));
     }
-    catch (ast::ScilabMessage & /* sm */)
+    catch (const ast::InternalError& ie)
     {
-        bOk = false;
+        for (int i = 0; i < (int)m_GuessArgs.size(); i++)
+        {
+            m_GuessArgs[i]->DecreaseRef();
+        }
+
+        throw ie;
     }
 
     for (int i = 0; i < (int)m_GuessArgs.size(); i++)
@@ -2438,29 +2311,12 @@ void DifferentialEquationFunctions::callBvodeMacroGuess(double* x, double* z, do
         m_GuessArgs[i]->DecreaseRef();
     }
 
-    if (bOk == false)
-    {
-        if (ConfigVariable::getLastErrorFunction() == L"")
-        {
-            ConfigVariable::setLastErrorFunction(m_pCallGuessFunction->getName());
-        }
-
-        if (m_pCallGuessFunction->isMacro() || m_pCallGuessFunction->isMacroFile())
-        {
-            wchar_t szError[bsiz];
-            os_swprintf(szError, bsiz, _W("at line % 5d of function %ls called by :\n").c_str(), ConfigVariable::getLastErrorLine(), m_pCallGuessFunction->getName().c_str());
-            throw ast::ScilabMessage(szError);
-        }
-
-        throw ast::ScilabMessage();
-    }
-
     if (out.size() != iRetCount)
     {
         char* pstrName = wide_string_to_UTF8(m_pCallGuessFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong number of output argument(s): %d expected.\n"), pstrName, iRetCount);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     out[0]->IncreaseRef();
@@ -2478,7 +2334,7 @@ void DifferentialEquationFunctions::callBvodeMacroGuess(double* x, double* z, do
         char* pstrName = wide_string_to_UTF8(m_pCallGuessFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong type for output argument #%d: Real matrix expected.\n"), pstrName, 1);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     out[1]->DecreaseRef();
@@ -2487,7 +2343,7 @@ void DifferentialEquationFunctions::callBvodeMacroGuess(double* x, double* z, do
         char* pstrName = wide_string_to_UTF8(m_pCallGuessFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong type for output argument #%d: Real matrix expected.\n"), pstrName, 2);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     types::Double* pDblOutZ = out[0]->getAs<types::Double>();
@@ -2496,7 +2352,7 @@ void DifferentialEquationFunctions::callBvodeMacroGuess(double* x, double* z, do
         char* pstrName = wide_string_to_UTF8(m_pCallGuessFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong size for output argument #%d: A matrix of size %d expected.\n"), pstrName, 1, m_bvodeM);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     types::Double* pDblOutD = out[1]->getAs<types::Double>();
@@ -2505,7 +2361,7 @@ void DifferentialEquationFunctions::callBvodeMacroGuess(double* x, double* z, do
         char* pstrName = wide_string_to_UTF8(m_pCallGuessFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong size for output argument #%d: A matrix of size %d expected.\n"), pstrName, 1, m_bvodeN);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     C2F(dcopy)(&m_bvodeM, pDblOutZ->get(), &one, z, &one);
@@ -2526,7 +2382,6 @@ void DifferentialEquationFunctions::callImplMacroF(int* neq, double* t, double*
     char errorMsg[256];
     int one         = 1;
     int iRetCount   = 1;
-    bool bOk        = false;
 
     *ires = 2;
 
@@ -2557,33 +2412,17 @@ void DifferentialEquationFunctions::callImplMacroF(int* neq, double* t, double*
 
     try
     {
-        bOk = m_pCallFFunction->call(in, opt, iRetCount, out, &execFunc) == types::Function::OK;
-    }
-    catch (ast::ScilabMessage & /* sm */)
-    {
-        bOk = false;
-    }
-
-    for (int i = 0; i < (int)m_FArgs.size(); i++)
-    {
-        m_FArgs[i]->DecreaseRef();
+        // new std::wstring(L"") is delete in destructor of ast::CommentExp
+        m_pCallFFunction->invoke(in, opt, iRetCount, out, execFunc, ast::CommentExp(Location(), new std::wstring(L"")));
     }
-
-    if (bOk == false)
+    catch (const ast::InternalError& ie)
     {
-        if (ConfigVariable::getLastErrorFunction() == L"")
-        {
-            ConfigVariable::setLastErrorFunction(m_pCallFFunction->getName());
-        }
-
-        if (m_pCallFFunction->isMacro() || m_pCallFFunction->isMacroFile())
+        for (int i = 0; i < (int)m_FArgs.size(); i++)
         {
-            wchar_t szError[bsiz];
-            os_swprintf(szError, bsiz, _W("at line % 5d of function %ls called by :\n").c_str(), ConfigVariable::getLastErrorLine(), m_pCallFFunction->getName().c_str());
-            throw ast::ScilabMessage(szError);
+            m_FArgs[i]->DecreaseRef();
         }
 
-        throw ast::ScilabMessage();
+        throw ie;
     }
 
     if (out.size() != iRetCount)
@@ -2591,7 +2430,7 @@ void DifferentialEquationFunctions::callImplMacroF(int* neq, double* t, double*
         char* pstrName = wide_string_to_UTF8(m_pCallFFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong number of output argument(s): %d expected.\n"), pstrName, iRetCount);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     out[0]->IncreaseRef();
@@ -2620,7 +2459,7 @@ void DifferentialEquationFunctions::callImplMacroF(int* neq, double* t, double*
         char* pstrName = wide_string_to_UTF8(m_pCallFFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong type for output argument #%d: Matrix expected.\n"), pstrName, 1);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     types::Double* pDblOutR = out[0]->getAs<types::Double>();
@@ -2629,7 +2468,7 @@ void DifferentialEquationFunctions::callImplMacroF(int* neq, double* t, double*
         char* pstrName = wide_string_to_UTF8(m_pCallFFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong size for output argument #%d: A Matrix of size %d expected.\n"), pstrName, 1, *neq);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     C2F(dcopy)(neq, pDblOutR->get(), &one, r, &one);
@@ -2645,7 +2484,6 @@ void DifferentialEquationFunctions::callImplMacroG(int* neq, double* t, double*
     char errorMsg[256];
     int one         = 1;
     int iRetCount   = 1;
-    bool bOk        = false;
 
     typed_list in;
     typed_list out;
@@ -2674,11 +2512,17 @@ void DifferentialEquationFunctions::callImplMacroG(int* neq, double* t, double*
 
     try
     {
-        bOk = m_pCallGFunction->call(in, opt, iRetCount, out, &execFunc) == types::Function::OK;
+        // new std::wstring(L"") is delete in destructor of ast::CommentExp
+        m_pCallGFunction->invoke(in, opt, iRetCount, out, execFunc, ast::CommentExp(Location(), new std::wstring(L"")));
     }
-    catch (ast::ScilabMessage & /* sm */)
+    catch (const ast::InternalError& ie)
     {
-        bOk = false;
+        for (int i = 0; i < (int)m_odeGArgs.size(); i++)
+        {
+            m_odeGArgs[i]->DecreaseRef();
+        }
+
+        throw ie;
     }
 
     for (int i = 0; i < (int)m_odeGArgs.size(); i++)
@@ -2686,29 +2530,12 @@ void DifferentialEquationFunctions::callImplMacroG(int* neq, double* t, double*
         m_odeGArgs[i]->DecreaseRef();
     }
 
-    if (bOk == false)
-    {
-        if (ConfigVariable::getLastErrorFunction() == L"")
-        {
-            ConfigVariable::setLastErrorFunction(m_pCallGFunction->getName());
-        }
-
-        if (m_pCallGFunction->isMacro() || m_pCallGFunction->isMacroFile())
-        {
-            wchar_t szError[bsiz];
-            os_swprintf(szError, bsiz, _W("at line % 5d of function %ls called by :\n").c_str(), ConfigVariable::getLastErrorLine(), m_pCallGFunction->getName().c_str());
-            throw ast::ScilabMessage(szError);
-        }
-
-        throw ast::ScilabMessage();
-    }
-
     if (out.size() != iRetCount)
     {
         char* pstrName = wide_string_to_UTF8(m_pCallGFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong number of output argument(s): %d expected.\n"), pstrName, iRetCount);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     out[0]->IncreaseRef();
@@ -2731,7 +2558,7 @@ void DifferentialEquationFunctions::callImplMacroG(int* neq, double* t, double*
         char* pstrName = wide_string_to_UTF8(m_pCallGFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong type for output argument #%d: Real matrix expected.\n"), pstrName, 1);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     types::Double* pDblOutP = out[0]->getAs<types::Double>();
@@ -2740,7 +2567,7 @@ void DifferentialEquationFunctions::callImplMacroG(int* neq, double* t, double*
         char* pstrName = wide_string_to_UTF8(m_pCallGFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong size for output argument #%d: A matrix of size %d x %d expected.\n"), pstrName, 1, *neq, *nrowp);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     int size = *neq **nrowp;
@@ -2756,7 +2583,6 @@ void DifferentialEquationFunctions::callImplMacroJac(int* neq, double* t, double
     char errorMsg[256];
     int one         = 1;
     int iRetCount   = 1;
-    bool bOk        = false;
 
     typed_list in;
     typed_list out;
@@ -2785,11 +2611,17 @@ void DifferentialEquationFunctions::callImplMacroJac(int* neq, double* t, double
 
     try
     {
-        bOk = m_pCallJacFunction->call(in, opt, iRetCount, out, &execFunc) == types::Function::OK;
+        // new std::wstring(L"") is delete in destructor of ast::CommentExp
+        m_pCallJacFunction->invoke(in, opt, iRetCount, out, execFunc, ast::CommentExp(Location(), new std::wstring(L"")));
     }
-    catch (ast::ScilabMessage & /* sm */)
+    catch (const ast::InternalError& ie)
     {
-        bOk = false;
+        for (int i = 0; i < (int)m_JacArgs.size(); i++)
+        {
+            m_JacArgs[i]->DecreaseRef();
+        }
+
+        throw ie;
     }
 
     for (int i = 0; i < (int)m_JacArgs.size(); i++)
@@ -2797,29 +2629,12 @@ void DifferentialEquationFunctions::callImplMacroJac(int* neq, double* t, double
         m_JacArgs[i]->DecreaseRef();
     }
 
-    if (bOk == false)
-    {
-        if (ConfigVariable::getLastErrorFunction() == L"")
-        {
-            ConfigVariable::setLastErrorFunction(m_pCallJacFunction->getName());
-        }
-
-        if (m_pCallJacFunction->isMacro() || m_pCallJacFunction->isMacroFile())
-        {
-            wchar_t szError[bsiz];
-            os_swprintf(szError, bsiz, _W("at line % 5d of function %ls called by :\n").c_str(), ConfigVariable::getLastErrorLine(), m_pCallJacFunction->getName().c_str());
-            throw ast::ScilabMessage(szError);
-        }
-
-        throw ast::ScilabMessage();
-    }
-
     if (out.size() != iRetCount)
     {
         char* pstrName = wide_string_to_UTF8(m_pCallJacFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong number of output argument(s): %d expected.\n"), pstrName, iRetCount);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     out[0]->IncreaseRef();
@@ -2848,7 +2663,7 @@ void DifferentialEquationFunctions::callImplMacroJac(int* neq, double* t, double
         char* pstrName = wide_string_to_UTF8(m_pCallJacFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong type for output argument #%d: Real matrix expected.\n"), pstrName, 1);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     types::Double* pDblOutP = out[0]->getAs<types::Double>();
@@ -2857,7 +2672,7 @@ void DifferentialEquationFunctions::callImplMacroJac(int* neq, double* t, double
         char* pstrName = wide_string_to_UTF8(m_pCallJacFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong size for output argument #%d: A matrix of size %d x %d expected.\n"), pstrName, 1, *neq, *nrowp);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     int size = *neq **nrowp;
@@ -2873,7 +2688,6 @@ void DifferentialEquationFunctions::callDasslMacroF(double* t, double* y, double
     char errorMsg[256];
     int one         = 1;
     int iRetCount   = 2;
-    bool bOk        = false;
 
     typed_list in;
     typed_list out;
@@ -2902,11 +2716,17 @@ void DifferentialEquationFunctions::callDasslMacroF(double* t, double* y, double
 
     try
     {
-        bOk = m_pCallFFunction->call(in, opt, iRetCount, out, &execFunc) == types::Function::OK;
+        // new std::wstring(L"") is delete in destructor of ast::CommentExp
+        m_pCallFFunction->invoke(in, opt, iRetCount, out, execFunc, ast::CommentExp(Location(), new std::wstring(L"")));
     }
-    catch (ast::ScilabMessage & /* sm */)
+    catch (const ast::InternalError& ie)
     {
-        bOk = false;
+        for (int i = 0; i < (int)m_FArgs.size(); i++)
+        {
+            m_FArgs[i]->DecreaseRef();
+        }
+
+        throw ie;
     }
 
     for (int i = 0; i < (int)m_FArgs.size(); i++)
@@ -2914,29 +2734,12 @@ void DifferentialEquationFunctions::callDasslMacroF(double* t, double* y, double
         m_FArgs[i]->DecreaseRef();
     }
 
-    if (bOk == false)
-    {
-        if (ConfigVariable::getLastErrorFunction() == L"")
-        {
-            ConfigVariable::setLastErrorFunction(m_pCallFFunction->getName());
-        }
-
-        if (m_pCallFFunction->isMacro() || m_pCallFFunction->isMacroFile())
-        {
-            wchar_t szError[bsiz];
-            os_swprintf(szError, bsiz, _W("at line % 5d of function %ls called by :\n").c_str(), ConfigVariable::getLastErrorLine(), m_pCallFFunction->getName().c_str());
-            throw ast::ScilabMessage(szError);
-        }
-
-        throw ast::ScilabMessage();
-    }
-
     if (out.size() != iRetCount)
     {
         char* pstrName = wide_string_to_UTF8(m_pCallFFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong number of output argument(s): %d expected.\n"), pstrName, iRetCount);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     out[0]->IncreaseRef();
@@ -2966,7 +2769,7 @@ void DifferentialEquationFunctions::callDasslMacroF(double* t, double* y, double
         char* pstrName = wide_string_to_UTF8(m_pCallFFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong type for output argument #%d: Real matrix expected.\n"), pstrName, 1);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     out[1]->DecreaseRef();
@@ -2975,7 +2778,7 @@ void DifferentialEquationFunctions::callDasslMacroF(double* t, double* y, double
         char* pstrName = wide_string_to_UTF8(m_pCallFFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong type for output argument #%d: Real matrix expected.\n"), pstrName, 2);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     types::Double* pDblOutDelta = out[0]->getAs<types::Double>();
@@ -2984,7 +2787,7 @@ void DifferentialEquationFunctions::callDasslMacroF(double* t, double* y, double
         char* pstrName = wide_string_to_UTF8(m_pCallFFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong size for output argument #%d: A matrix of size %d expected.\n"), pstrName, 1, m_odeYRows);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     types::Double* pDblOutIres = out[1]->getAs<types::Double>();
@@ -2993,7 +2796,7 @@ void DifferentialEquationFunctions::callDasslMacroF(double* t, double* y, double
         char* pstrName = wide_string_to_UTF8(m_pCallFFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong size for output argument #%d: A Scalar expected.\n"), pstrName, 2);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     C2F(dcopy)(&m_odeYRows, pDblOutDelta->get(), &one, delta, &one);
@@ -3015,7 +2818,6 @@ void DifferentialEquationFunctions::callDasslMacroJac(double* t, double* y, doub
     char errorMsg[256];
     int one         = 1;
     int iRetCount   = 1;
-    bool bOk        = false;
 
     typed_list in;
     typed_list out;
@@ -3048,11 +2850,17 @@ void DifferentialEquationFunctions::callDasslMacroJac(double* t, double* y, doub
 
     try
     {
-        bOk = m_pCallJacFunction->call(in, opt, iRetCount, out, &execFunc) == types::Function::OK;
+        // new std::wstring(L"") is delete in destructor of ast::CommentExp
+        m_pCallJacFunction->invoke(in, opt, iRetCount, out, execFunc, ast::CommentExp(Location(), new std::wstring(L"")));
     }
-    catch (ast::ScilabMessage & /* sm */)
+    catch (const ast::InternalError& ie)
     {
-        bOk = false;
+        for (int i = 0; i < (int)m_JacArgs.size(); i++)
+        {
+            m_JacArgs[i]->DecreaseRef();
+        }
+
+        throw ie;
     }
 
     for (int i = 0; i < (int)m_JacArgs.size(); i++)
@@ -3060,29 +2868,12 @@ void DifferentialEquationFunctions::callDasslMacroJac(double* t, double* y, doub
         m_JacArgs[i]->DecreaseRef();
     }
 
-    if (bOk == false)
-    {
-        if (ConfigVariable::getLastErrorFunction() == L"")
-        {
-            ConfigVariable::setLastErrorFunction(m_pCallJacFunction->getName());
-        }
-
-        if (m_pCallJacFunction->isMacro() || m_pCallJacFunction->isMacroFile())
-        {
-            wchar_t szError[bsiz];
-            os_swprintf(szError, bsiz, _W("at line % 5d of function %ls called by :\n").c_str(), ConfigVariable::getLastErrorLine(), m_pCallJacFunction->getName().c_str());
-            throw ast::ScilabMessage(szError);
-        }
-
-        throw ast::ScilabMessage();
-    }
-
     if (out.size() != iRetCount)
     {
         char* pstrName = wide_string_to_UTF8(m_pCallJacFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong number of output argument(s): %d expected.\n"), pstrName, iRetCount);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     out[0]->IncreaseRef();
@@ -3117,7 +2908,7 @@ void DifferentialEquationFunctions::callDasslMacroJac(double* t, double* y, doub
         char* pstrName = wide_string_to_UTF8(m_pCallJacFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong type for output argument #%d: Real matrix expected.\n"), pstrName, 1);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     types::Double* pDblOutPd = out[0]->getAs<types::Double>();
@@ -3128,7 +2919,7 @@ void DifferentialEquationFunctions::callDasslMacroJac(double* t, double* y, doub
         char* pstrName = wide_string_to_UTF8(m_pCallJacFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong size for output argument #%d: A matrix of size %d x %d expected.\n"), pstrName, 1, m_odeYRows, (2 * m_ml + m_mu + 1));
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     int size = pDblOutPd->getSize();
@@ -3144,7 +2935,6 @@ void DifferentialEquationFunctions::callDasrtMacroG(int* ny, double* t, double*
     char errorMsg[256];
     int one         = 1;
     int iRetCount   = 1;
-    bool bOk        = false;
 
     typed_list in;
     typed_list out;
@@ -3168,11 +2958,17 @@ void DifferentialEquationFunctions::callDasrtMacroG(int* ny, double* t, double*
 
     try
     {
-        bOk = m_pCallGFunction->call(in, opt, iRetCount, out, &execFunc) == types::Function::OK;
+        // new std::wstring(L"") is delete in destructor of ast::CommentExp
+        m_pCallGFunction->invoke(in, opt, iRetCount, out, execFunc, ast::CommentExp(Location(), new std::wstring(L"")));
     }
-    catch (ast::ScilabMessage & /* sm */)
+    catch (const ast::InternalError& ie)
     {
-        bOk = false;
+        for (int i = 0; i < (int)m_odeGArgs.size(); i++)
+        {
+            m_odeGArgs[i]->DecreaseRef();
+        }
+
+        throw ie;
     }
 
     for (int i = 0; i < (int)m_odeGArgs.size(); i++)
@@ -3180,29 +2976,12 @@ void DifferentialEquationFunctions::callDasrtMacroG(int* ny, double* t, double*
         m_odeGArgs[i]->DecreaseRef();
     }
 
-    if (bOk == false)
-    {
-        if (ConfigVariable::getLastErrorFunction() == L"")
-        {
-            ConfigVariable::setLastErrorFunction(m_pCallGFunction->getName());
-        }
-
-        if (m_pCallGFunction->isMacro() || m_pCallGFunction->isMacroFile())
-        {
-            wchar_t szError[bsiz];
-            os_swprintf(szError, bsiz, _W("at line % 5d of function %ls called by :\n").c_str(), ConfigVariable::getLastErrorLine(), m_pCallGFunction->getName().c_str());
-            throw ast::ScilabMessage(szError);
-        }
-
-        throw ast::ScilabMessage();
-    }
-
     if (out.size() != iRetCount)
     {
         char* pstrName = wide_string_to_UTF8(m_pCallGFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong number of output argument(s): %d expected.\n"), pstrName, iRetCount);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     out[0]->IncreaseRef();
@@ -3225,7 +3004,7 @@ void DifferentialEquationFunctions::callDasrtMacroG(int* ny, double* t, double*
         char* pstrName = wide_string_to_UTF8(m_pCallGFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong type for output argument #%d: Real matrix expected.\n"), pstrName, 1);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     types::Double* pDblOutGout = out[0]->getAs<types::Double>();
@@ -3234,7 +3013,7 @@ void DifferentialEquationFunctions::callDasrtMacroG(int* ny, double* t, double*
         char* pstrName = wide_string_to_UTF8(m_pCallGFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong size for output argument #%d: A matrix of size %d expected.\n"), pstrName, 1, *ng);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     C2F(dcopy)(ng, pDblOutGout->get(), &one, gout, &one);
@@ -3252,7 +3031,6 @@ void DifferentialEquationFunctions::callDaskrMacroPjac(double* res, int* ires, i
     char errorMsg[256];
     int one         = 1;
     int iRetCount   = 3;
-    bool bOk        = false;
 
     typed_list in;
     typed_list out;
@@ -3303,11 +3081,17 @@ void DifferentialEquationFunctions::callDaskrMacroPjac(double* res, int* ires, i
 
     try
     {
-        bOk = m_pCallPjacFunction->call(in, opt, iRetCount, out, &execFunc) == types::Function::OK;
+        // new std::wstring(L"") is delete in destructor of ast::CommentExp
+        m_pCallPjacFunction->invoke(in, opt, iRetCount, out, execFunc, ast::CommentExp(Location(), new std::wstring(L"")));
     }
-    catch (ast::ScilabMessage & /* sm */)
+    catch (const ast::InternalError& ie)
     {
-        bOk = false;
+        for (int i = 0; i < (int)m_pJacArgs.size(); i++)
+        {
+            m_pJacArgs[i]->DecreaseRef();
+        }
+
+        throw ie;
     }
 
     for (int i = 0; i < (int)m_pJacArgs.size(); i++)
@@ -3315,29 +3099,12 @@ void DifferentialEquationFunctions::callDaskrMacroPjac(double* res, int* ires, i
         m_pJacArgs[i]->DecreaseRef();
     }
 
-    if (bOk == false)
-    {
-        if (ConfigVariable::getLastErrorFunction() == L"")
-        {
-            ConfigVariable::setLastErrorFunction(m_pCallPjacFunction->getName());
-        }
-
-        if (m_pCallPjacFunction->isMacro() || m_pCallPjacFunction->isMacroFile())
-        {
-            wchar_t szError[bsiz];
-            os_swprintf(szError, bsiz, _W("at line % 5d of function %ls called by :\n").c_str(), ConfigVariable::getLastErrorLine(), m_pCallPjacFunction->getName().c_str());
-            throw ast::ScilabMessage(szError);
-        }
-
-        throw ast::ScilabMessage();
-    }
-
     if (out.size() != iRetCount)
     {
         char* pstrName = wide_string_to_UTF8(m_pCallPjacFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong number of output argument(s): %d expected.\n"), pstrName, iRetCount);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     out[0]->IncreaseRef();
@@ -3398,7 +3165,7 @@ void DifferentialEquationFunctions::callDaskrMacroPjac(double* res, int* ires, i
         char* pstrName = wide_string_to_UTF8(m_pCallPjacFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong type for output argument #%d: Real matrix expected.\n"), pstrName, 1);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     if (out[1]->isDouble() == false)
@@ -3406,7 +3173,7 @@ void DifferentialEquationFunctions::callDaskrMacroPjac(double* res, int* ires, i
         char* pstrName = wide_string_to_UTF8(m_pCallPjacFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong type for output argument #%d: Real matrix expected.\n"), pstrName, 2);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     if (out[2]->isDouble() == false)
@@ -3414,7 +3181,7 @@ void DifferentialEquationFunctions::callDaskrMacroPjac(double* res, int* ires, i
         char* pstrName = wide_string_to_UTF8(m_pCallPjacFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong type for output argument #%d: Real matrix expected.\n"), pstrName, 3);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     //  return [R, iR, ier]
@@ -3428,7 +3195,7 @@ void DifferentialEquationFunctions::callDaskrMacroPjac(double* res, int* ires, i
         char* pstrName = wide_string_to_UTF8(m_pCallPjacFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong size for output argument #%d: A matrix of size %d expected.\n"), pstrName, 1, *neq **neq);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     if (pDblOutIwp->getSize() != 2 * *neq **neq)
@@ -3436,7 +3203,7 @@ void DifferentialEquationFunctions::callDaskrMacroPjac(double* res, int* ires, i
         char* pstrName = wide_string_to_UTF8(m_pCallPjacFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong size for output argument #%d: A matrix of size %d expected.\n"), pstrName, 2, 2 * *neq **neq);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     if (pDblOutIer->isScalar() == false)
@@ -3444,7 +3211,7 @@ void DifferentialEquationFunctions::callDaskrMacroPjac(double* res, int* ires, i
         char* pstrName = wide_string_to_UTF8(m_pCallPjacFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong size for output argument #%d: A Scalar expected.\n"), pstrName, 3);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     // copy output macro results in output variables
@@ -3487,7 +3254,6 @@ void DifferentialEquationFunctions::callDaskrMacroPsol(int* neq, double* t, doub
     char errorMsg[256];
     int one         = 1;
     int iRetCount   = 2;
-    bool bOk        = false;
 
     typed_list in;
     typed_list out;
@@ -3523,12 +3289,17 @@ void DifferentialEquationFunctions::callDaskrMacroPsol(int* neq, double* t, doub
 
     try
     {
-        // call macro
-        bOk = m_pCallPsolFunction->call(in, opt, iRetCount, out, &execFunc) == types::Function::OK;
+        // new std::wstring(L"") is delete in destructor of ast::CommentExp
+        m_pCallPsolFunction->invoke(in, opt, iRetCount, out, execFunc, ast::CommentExp(Location(), new std::wstring(L"")));
     }
-    catch (ast::ScilabMessage & /* sm */)
+    catch (const ast::InternalError& ie)
     {
-        bOk = false;
+        for (int i = 0; i < (int)m_pSolArgs.size(); i++)
+        {
+            m_pSolArgs[i]->DecreaseRef();
+        }
+
+        throw ie;
     }
 
     for (int i = 0; i < (int)m_pSolArgs.size(); i++)
@@ -3536,30 +3307,13 @@ void DifferentialEquationFunctions::callDaskrMacroPsol(int* neq, double* t, doub
         m_pSolArgs[i]->DecreaseRef();
     }
 
-    if (bOk == false)
-    {
-        if (ConfigVariable::getLastErrorFunction() == L"")
-        {
-            ConfigVariable::setLastErrorFunction(m_pCallPsolFunction->getName());
-        }
-
-        if (m_pCallPsolFunction->isMacro() || m_pCallPsolFunction->isMacroFile())
-        {
-            wchar_t szError[bsiz];
-            os_swprintf(szError, bsiz, _W("at line % 5d of function %ls called by :\n").c_str(), ConfigVariable::getLastErrorLine(), m_pCallPsolFunction->getName().c_str());
-            throw ast::ScilabMessage(szError);
-        }
-
-        throw ast::ScilabMessage();
-    }
-
     // get output
     if (out.size() != iRetCount)
     {
         char* pstrName = wide_string_to_UTF8(m_pCallPsolFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong number of output argument(s): %d expected.\n"), pstrName, iRetCount);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     out[0]->IncreaseRef();
@@ -3590,7 +3344,7 @@ void DifferentialEquationFunctions::callDaskrMacroPsol(int* neq, double* t, doub
         char* pstrName = wide_string_to_UTF8(m_pCallPsolFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong type for output argument #%d: Real matrix expected.\n"), pstrName, 1);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     if (out[1]->isDouble() == false)
@@ -3598,7 +3352,7 @@ void DifferentialEquationFunctions::callDaskrMacroPsol(int* neq, double* t, doub
         char* pstrName = wide_string_to_UTF8(m_pCallPsolFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong type for output argument #%d: Real matrix expected.\n"), pstrName, 2);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     // return arguments [b, ier] = psol()
@@ -3608,7 +3362,7 @@ void DifferentialEquationFunctions::callDaskrMacroPsol(int* neq, double* t, doub
         char* pstrName = wide_string_to_UTF8(m_pCallPsolFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong size for output argument #%d: A matrix of size %d expected.\n"), pstrName, 1, *neq);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     // get scalar ier
@@ -3618,7 +3372,7 @@ void DifferentialEquationFunctions::callDaskrMacroPsol(int* neq, double* t, doub
         char* pstrName = wide_string_to_UTF8(m_pCallPsolFunction->getName().c_str());
         sprintf(errorMsg, _("%s: Wrong size for output argument #%d: A Scalar expected.\n"), pstrName, 2);
         FREE(pstrName);
-        throw ast::ScilabError(errorMsg);
+        throw ast::InternalError(errorMsg);
     }
 
     // copy output macro results in output variables
index aef8501..0eaffae 100644 (file)
@@ -25,7 +25,7 @@ void ode_f(int* n, double* t, double* y, double* ydot)
 
     if (deFunction == NULL)
     {
-        throw ast::ScilabError(_("An error occurred while getting DifferentialEquationFunctions object.\n"));
+        throw ast::InternalError(_("An error occurred while getting DifferentialEquationFunctions object.\n"));
     }
 
     deFunction->execOdeF(n, t, y, ydot);
@@ -38,7 +38,7 @@ void ode_jac(int *n, double *t, double *y, int *ml, int *mu, double *J, int *nrp
 
     if (deFunction == NULL)
     {
-        throw ast::ScilabError(_("An error occurred while getting DifferentialEquationFunctions object.\n"));
+        throw ast::InternalError(_("An error occurred while getting DifferentialEquationFunctions object.\n"));
     }
 
     deFunction->execFunctionJac(n, t, y, ml, mu, J, nrpd);
@@ -51,7 +51,7 @@ void ode_g(int* n, double* t, double* y, int* ng, double* gout)