clear result in listexp before leave
[scilab.git] / scilab / modules / ast / src / cpp / ast / runvisitor.cpp
index 7c273be..50b34be 100644 (file)
@@ -1256,6 +1256,7 @@ void RunVisitorT<T>::visitprivate(const ListExp &e)
             pITStart->isList() == false) // list case => call overload
     {
         pITStart->killMe();
+        setResult(NULL);
         wchar_t szError[bsiz];
         os_swprintf(szError, bsiz, _W("%ls: Wrong type for argument %d: Real scalar expected.\n").c_str(), L"':'", 1);
         throw InternalError(szError, 999, e.getLocation());
@@ -1264,11 +1265,13 @@ void RunVisitorT<T>::visitprivate(const ListExp &e)
 
     e.getStep().accept(*this);
     types::GenericType* pITStep = static_cast<types::GenericType*>(getResult());
+    setResult(NULL);
     if ((pITStep->getSize() != 1 || (pITStep->isDouble() && pITStep->getAs<types::Double>()->isComplex())) &&
             pITStep->isList() == false) // list case => call overload
     {
         pITStart->killMe();
         pITStep->killMe();
+        setResult(NULL);
         wchar_t szError[bsiz];
         os_swprintf(szError, bsiz, _W("%ls: Wrong type for argument %d: Real scalar expected.\n").c_str(), L"':'", 2);
         throw InternalError(szError, 999, e.getLocation());
@@ -1277,12 +1280,14 @@ void RunVisitorT<T>::visitprivate(const ListExp &e)
 
     e.getEnd().accept(*this);
     types::GenericType* pITEnd = static_cast<types::GenericType*>(getResult());
+    setResult(NULL);
     if ((pITEnd->getSize() != 1 || (pITEnd->isDouble() && pITEnd->getAs<types::Double>()->isComplex())) &&
             pITEnd->isList() == false) // list case => call overload
     {
         pITStart->killMe();
         pITStep->killMe();
         pITEnd->killMe();
+        setResult(NULL);
         wchar_t szError[bsiz];
         os_swprintf(szError, bsiz, _W("%ls: Wrong type for argument %d: Real scalar expected.\n").c_str(), L"':'", 3);
         throw InternalError(szError, 999, e.getLocation());
@@ -1306,8 +1311,8 @@ void RunVisitorT<T>::visitprivate(const ListExp &e)
     //check compatibility
     // double : double : double or poly : poly : poly and mix like double : double : poly
     if ((piStart->isPoly() || piStart->isDouble()) &&
-            (piStep->isPoly()  || piStep->isDouble())  &&
-            (piEnd->isPoly()   || piEnd->isDouble()))
+            (piStep->isPoly() || piStep->isDouble()) &&
+            (piEnd->isPoly() || piEnd->isDouble()))
     {
         // No need to kill piStart, ... because Implicit list ctor will incref them
         setResult(new types::ImplicitList(piStart, piStep, piEnd));
@@ -1315,12 +1320,12 @@ void RunVisitorT<T>::visitprivate(const ListExp &e)
     }
 
     // int : double or int : int
-    if ( piStart->isInt()   &&
+    if (piStart->isInt() &&
             (piStep->isDouble() || piStep->isInt()) &&
             piEnd->isInt())
     {
         // check for same int type int8, int 16 ...
-        if (piStart->getType() == piEnd->getType()  &&
+        if (piStart->getType() == piEnd->getType() &&
                 (piStart->getType() == piStep->getType() ||
                  piStep->isDouble()))
         {
@@ -1362,12 +1367,14 @@ void RunVisitorT<T>::visitprivate(const ListExp &e)
     }
     catch (const InternalError& error)
     {
+        setResult(NULL);
         cleanInOut(in, out);
         throw error;
     }
 
     if (Ret != types::Callable::OK)
     {
+        setResult(NULL);
         cleanInOut(in, out);
         throw InternalError(ConfigVariable::getLastErrorMessage(), ConfigVariable::getLastErrorNumber(), e.getLocation());
     }