lasterror corrected 07/11607/1
Antoine ELIAS [Wed, 29 May 2013 15:41:00 +0000 (17:41 +0200)]
txt = [
    "a=2";;
    "b=3;";
    "b=dfgf;";
    "d=4;"];

ierr = execstr(txt, "errcatch")
if ierr == 0 pause, end
[a,b,c,d] = lasterror()

Change-Id: I6fda0976f7b9c502b5d58d2c92634a4785291146

scilab/modules/ast/src/cpp/scilabexception.cpp
scilab/modules/core/sci_gateway/cpp/sci_lasterror.cpp
scilab/modules/core/src/cpp/runner.cpp
scilab/modules/functions/sci_gateway/cpp/sci_execstr.cpp
scilab/modules/system_env/src/cpp/configvariable.cpp

index 796fa0b..4c99659 100644 (file)
@@ -22,93 +22,93 @@ extern "C"
 namespace ast
 {
 
-    void ScilabException::createScilabException(std::wstring _wstErrorMesssage, int _iErrorNumber, const Location& _ErrorLocation)
-    {
-        m_wstErrorMessage   = _wstErrorMesssage;
-        m_iErrorNumber      = _iErrorNumber;
-        m_ErrorLocation     = _ErrorLocation;
-    }
-
-    ScilabException::ScilabException(std::wstring _wstErrorMesssage)
-    {
-        setLastError(999, _wstErrorMesssage.c_str(), 0, NULL);
-        createScilabException(_wstErrorMesssage);
-    }
-
-    ScilabException::ScilabException(std::string _stErrorMesssage)
-    {
-
-        wchar_t* pwst = to_wide_string(_stErrorMesssage.c_str());
-        setLastError(999, pwst, 0, NULL);
-        createScilabException(pwst);
-        FREE(pwst);
-    }
-
-    ScilabException::ScilabException(const Location& _ErrorLocation)
-    {
-        createScilabException(L"", 0, _ErrorLocation);
-    }
-
-    ScilabException::ScilabException(std::wstring _wstErrorMesssage, int _iErrorNumber, const Location& _ErrorLocation)
-    {
-        setLastError(_iErrorNumber, _wstErrorMesssage.c_str(), 0, NULL);
-        createScilabException(_wstErrorMesssage, _iErrorNumber, _ErrorLocation);
-    }
-
-    ScilabException::ScilabException()
-    {
-        createScilabException();
-    }
-
-    void ScilabException::SetErrorMessage(std::wstring _wstErrorMesssage)
-    {
-        m_wstErrorMessage = _wstErrorMesssage;
-    }
-
-    std::wstring ScilabException::GetErrorMessage(void)
-    {
-        return m_wstErrorMessage;
-    }
-
-    void ScilabException::SetErrorNumber(int _iErrorNumber)
-    {
-        m_iErrorNumber = _iErrorNumber;
-    } 
-
-    int ScilabException::GetErrorNumber(void)
-    {
-        return m_iErrorNumber;
-    }
-
-    void ScilabException::SetErrorLocation(const Location& _ErrorLocation)
-    {
-        m_ErrorLocation = _ErrorLocation;
-    }
-
-    Location& ScilabException::GetErrorLocation(void)
-    {
-        return m_ErrorLocation;
-    }
-
-    ScilabMessage::ScilabMessage(std::wstring _wstErrorMesssage)
-    {
-        //setLastError(999, _wstErrorMesssage.c_str(), 0, NULL);
-        createScilabException(_wstErrorMesssage);
-    }
-
-    ScilabMessage::ScilabMessage(std::string _stErrorMesssage)
-    {
-
-        wchar_t* pwst = to_wide_string(_stErrorMesssage.c_str());
-        //setLastError(999, pwst, 0, NULL);
-        createScilabException(pwst);
-        FREE(pwst);
-    }
-
-    ScilabMessage::ScilabMessage(std::wstring _wstErrorMesssage, int _iErrorNumber, const Location& _ErrorLocation)
-    {
-        //setLastError(_iErrorNumber, _wstErrorMesssage.c_str(), 0, NULL);
-        createScilabException(_wstErrorMesssage, _iErrorNumber, _ErrorLocation);
-    }
+void ScilabException::createScilabException(std::wstring _wstErrorMesssage, int _iErrorNumber, const Location& _ErrorLocation)
+{
+    m_wstErrorMessage   = _wstErrorMesssage;
+    m_iErrorNumber      = _iErrorNumber;
+    m_ErrorLocation     = _ErrorLocation;
+}
+
+ScilabException::ScilabException(std::wstring _wstErrorMesssage)
+{
+    setLastError(999, _wstErrorMesssage.c_str(), 0, NULL);
+    createScilabException(_wstErrorMesssage);
+}
+
+ScilabException::ScilabException(std::string _stErrorMesssage)
+{
+
+    wchar_t* pwst = to_wide_string(_stErrorMesssage.c_str());
+    setLastError(999, pwst, 0, NULL);
+    createScilabException(pwst);
+    FREE(pwst);
+}
+
+ScilabException::ScilabException(const Location& _ErrorLocation)
+{
+    createScilabException(L"", 0, _ErrorLocation);
+}
+
+ScilabException::ScilabException(std::wstring _wstErrorMesssage, int _iErrorNumber, const Location& _ErrorLocation)
+{
+    setLastError(_iErrorNumber, _wstErrorMesssage.c_str(), _ErrorLocation.first_line, NULL);
+    createScilabException(_wstErrorMesssage, _iErrorNumber, _ErrorLocation);
+}
+
+ScilabException::ScilabException()
+{
+    createScilabException();
+}
+
+void ScilabException::SetErrorMessage(std::wstring _wstErrorMesssage)
+{
+    m_wstErrorMessage = _wstErrorMesssage;
+}
+
+std::wstring ScilabException::GetErrorMessage(void)
+{
+    return m_wstErrorMessage;
+}
+
+void ScilabException::SetErrorNumber(int _iErrorNumber)
+{
+    m_iErrorNumber = _iErrorNumber;
+}
+
+int ScilabException::GetErrorNumber(void)
+{
+    return m_iErrorNumber;
+}
+
+void ScilabException::SetErrorLocation(const Location& _ErrorLocation)
+{
+    m_ErrorLocation = _ErrorLocation;
+}
+
+Location& ScilabException::GetErrorLocation(void)
+{
+    return m_ErrorLocation;
+}
+
+ScilabMessage::ScilabMessage(std::wstring _wstErrorMesssage)
+{
+    //setLastError(999, _wstErrorMesssage.c_str(), 0, NULL);
+    createScilabException(_wstErrorMesssage);
+}
+
+ScilabMessage::ScilabMessage(std::string _stErrorMesssage)
+{
+
+    wchar_t* pwst = to_wide_string(_stErrorMesssage.c_str());
+    //setLastError(999, pwst, 0, NULL);
+    createScilabException(pwst);
+    FREE(pwst);
+}
+
+ScilabMessage::ScilabMessage(std::wstring _wstErrorMesssage, int _iErrorNumber, const Location& _ErrorLocation)
+{
+    //setLastError(_iErrorNumber, _wstErrorMesssage.c_str(), 0, NULL);
+    createScilabException(_wstErrorMesssage, _iErrorNumber, _ErrorLocation);
+}
 
 }
index 3628f42..5befddb 100644 (file)
@@ -67,7 +67,7 @@ types::Function::ReturnValue sci_lasterror(types::typed_list &in, int _iRetCount
             vectLines.push_back(line);
         }
 
-        types::String* StrLastError = new types::String(vectLines.size(), 1);
+        types::String* StrLastError = new types::String((int)vectLines.size(), 1);
         // put lines in output
         for (int i = 0; i < (int)vectLines.size(); i++)
         {
@@ -93,7 +93,7 @@ types::Function::ReturnValue sci_lasterror(types::typed_list &in, int _iRetCount
                 std::wstring wstLastErrorFunction = ConfigVariable::getLastErrorFunction();
                 if (wstLastErrorFunction.size() == 0)
                 {
-                    out.push_back(Double::Empty());
+                    out.push_back(new String(L""));
                 }
                 else
                 {
index 04703cd..66ee878 100644 (file)
@@ -35,9 +35,9 @@ void *Runner::launch(void *args)
     try
     {
         me->getProgram()->accept(*(me->getVisitor()));
-        ConfigVariable::clearLastError();
+        //ConfigVariable::clearLastError();
     }
-    catch(ScilabException se)
+    catch (ScilabException se)
     {
         scilabErrorW(se.GetErrorMessage().c_str());
     }
@@ -46,7 +46,7 @@ void *Runner::launch(void *args)
 
     //change thread status
     ThreadId* pThread = ConfigVariable::getThread(currentThreadKey);
-    if(pThread->getStatus() != ThreadId::Aborted)
+    if (pThread->getStatus() != ThreadId::Aborted)
     {
         pThread->setStatus(ThreadId::Done);
         bdoUnlock = true;
@@ -57,7 +57,7 @@ void *Runner::launch(void *args)
 
     delete me;
 
-    if(bdoUnlock)
+    if (bdoUnlock)
     {
         UnlockPrompt();
     }
@@ -104,12 +104,13 @@ void Runner::execAndWait(ast::Exp* _theProgram, ast::ExecVisitor *_visitor)
         LockPrompt();
 
         types::ThreadId* pExecThread = ConfigVariable::getThread(threadKey);
-        if(pExecThread == NULL)
-        {//call pthread_join to clean stack allocation
+        if (pExecThread == NULL)
+        {
+            //call pthread_join to clean stack allocation
             __WaitThreadDie(threadId);
         }
     }
-    catch(ScilabException se)
+    catch (ScilabException se)
     {
         throw se;
     }
index 29e6f0e..e2b6824 100644 (file)
@@ -357,7 +357,7 @@ Function::ReturnValue sci_execstr(types::typed_list &in, int _iRetCount, types::
                 scilabErrorW(se.GetErrorMessage().c_str());
 
                 //write positino
-                Scierror(999, _("in  execstr instruction    called by :\n"));
+                sciprint(_("in  execstr instruction    called by :\n"));
                 //restore previous prompt mode
                 ConfigVariable::setPromptMode(oldVal);
                 //throw ScilabMessage(szError, 1, (*j)->location_get());
index 66a19a6..7c0608f 100644 (file)
@@ -293,7 +293,7 @@ void ConfigVariable::setLastErrorCall(void)
 
 void ConfigVariable::clearLastError(void)
 {
-    if (m_bLastErrorCall == false)
+    //if (m_bLastErrorCall == false)
     {
         m_wstError          = L"";
         m_iError            = 0;