callstack fixed 87/21587/2
Cedric Delamarre [Wed, 7 Oct 2020 14:16:36 +0000 (16:16 +0200)]
Change-Id: If9b2abce5c8c6960fa29640781c792bc5d911197

scilab/modules/ast/includes/exps/location.hxx
scilab/modules/ast/src/cpp/ast/run_CallExp.hpp
scilab/modules/ast/src/cpp/types/overload.cpp

index fa367ab..7fa6d26 100644 (file)
@@ -34,8 +34,8 @@ public:
     /** \brief Construct a Location. */
     Location (void)
     {
-        first_line = last_line = 0;
-        first_column = last_column = 0;
+        first_line = last_line = -1;
+        first_column = last_column = -1;
     }
     /** \} */
 
index 76285c4..59d3d08 100644 (file)
@@ -320,8 +320,14 @@ void RunVisitorT<T>::visitprivate(const CallExp &e)
 
         throw ia;
     }
-    catch (const InternalError& ie)
+    catch (InternalError& ie)
     {
+        // set location if the function which thrown this execption was not able to do it
+        if(ie.GetErrorLocation().first_line == -1)
+        {
+            ie.SetErrorLocation(e.getLocation());
+        }
+
         setExpectedSize(iSaveExpectedSize);
         if (pIT != getResult())
         {
index aa47683..003cca8 100644 (file)
@@ -142,7 +142,9 @@ types::Function::ReturnValue Overload::call(const std::wstring& _stOverloadingFu
     }
     catch (const ast::InternalError& ie)
     {
-        ConfigVariable::fillWhereError(ie.GetErrorLocation().first_line);
+        // fill where error with 0 as error line because
+        // an overload is always called from a gateway (native function)
+        ConfigVariable::fillWhereError(0);
         if (pCall)
         {
             if (ConfigVariable::getLastErrorFunction() == L"")