variable print, disp and string fixed. 16/15516/4
Cedric Delamarre [Mon, 10 Nov 2014 16:51:06 +0000 (17:51 +0100)]
test_run("api_scilab","bug_11046",["no_check_error_output" ]);
test_run("string","blanks",["no_check_error_output" ]);

Change-Id: I228770c70b583c216af18727a233102a61a3140f

19 files changed:
scilab/modules/ast/ast.vcxproj
scilab/modules/ast/includes/types/arrayof.hxx
scilab/modules/ast/src/cpp/types/function.cpp
scilab/modules/ast/src/cpp/types/implicitlist.cpp
scilab/modules/ast/src/cpp/types/library.cpp
scilab/modules/ast/src/cpp/types/list.cpp
scilab/modules/ast/src/cpp/types/listdelete.cpp
scilab/modules/ast/src/cpp/types/listoperation.cpp
scilab/modules/ast/src/cpp/types/listundefined.cpp
scilab/modules/ast/src/cpp/types/macro.cpp
scilab/modules/ast/src/cpp/types/macrofile.cpp
scilab/modules/ast/src/cpp/types/singlepoly.cpp
scilab/modules/ast/src/cpp/types/singlestruct.cpp
scilab/modules/ast/src/cpp/types/sparse.cpp
scilab/modules/ast/src/cpp/types/struct.cpp
scilab/modules/ast/src/cpp/types/threadId.cpp
scilab/modules/ast/src/cpp/types/types_tools.cpp
scilab/modules/ast/src/cpp/types/void.cpp
scilab/modules/output_stream/sci_gateway/cpp/sci_disp.cpp

index 412e047..f2af056 100644 (file)
@@ -509,6 +509,9 @@ lib /DEF:"$(ProjectDir)fileio_import.def" /SUBSYSTEM:WINDOWS /MACHINE:$(Platform
     <ProjectReference Include="..\localization\src\localization.vcxproj">
       <Project>{ecffeb0c-1eda-45ee-9a10-b18143852e17}</Project>
     </ProjectReference>
+    <ProjectReference Include="..\output_stream\src\c\output_stream.vcxproj">
+      <Project>{a5911cd7-f8e8-440c-a23e-4843a0636f3a}</Project>
+    </ProjectReference>
   </ItemGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">
index c6a03b7..93d0fed 100644 (file)
@@ -1608,7 +1608,6 @@ public :
         int* piDims = new int[m_iDims];
         bool bFinish = parseSubMatrix(ostr, piDims, m_iDims, m_iDims - 1);
         delete[] piDims;
-        scilabWriteW(ostr.str().c_str());
         return bFinish;
     }
 
index aaeb203..19ddcaa 100644 (file)
@@ -116,7 +116,6 @@ bool Function::toString(std::wostringstream& ostr)
 {
     // FIXME : Implement me.
     ostr << L"FIXME : Implement Function::toString" << std::endl;
-    scilabWriteW(ostr.str().c_str());
     return true;
 }
 
index fa83a54..f8172b5 100644 (file)
@@ -353,7 +353,6 @@ bool ImplicitList::toString(std::wostringstream& ostr)
     {
         types::InternalType* pIT = extractFullMatrix();
         bool ret = pIT->toString(ostr);
-        scilabWriteW(ostr.str().c_str());
         delete pIT;
         return ret;
     }
@@ -397,7 +396,6 @@ bool ImplicitList::toString(std::wostringstream& ostr)
             ostr << printInLinePoly(pMP->get(0), pMP->getVariableName());
         }
         ostr << std::endl;
-        scilabWriteW(ostr.str().c_str());
         return true;
     }
 }
index fdcd90c..589dad0 100644 (file)
@@ -69,7 +69,7 @@ bool Library::toString(std::wostringstream& ostr)
     }
 
     ostr << std::endl;
-    scilabWriteW(ostr.str().c_str());
+
     return true;
 }
 
index 3833e17..a0fba21 100644 (file)
@@ -122,7 +122,6 @@ bool List::toString(std::wostringstream& ostr)
     {
         ostr.str(L"");
         ostr << L"     ()" << std::endl;
-        scilabWriteW(ostr.str().c_str());
     }
     else
     {
@@ -139,6 +138,7 @@ bool List::toString(std::wostringstream& ostr)
             VariableToString(*itValues, nextVarName.str().c_str());
         }
 
+        ostr.str(L"");
         free(wcsVarName);
     }
 
index 4dc1ae1..4b368b7 100644 (file)
@@ -36,7 +36,6 @@ InternalType* ListDelete::clone(void)
 bool ListDelete::toString(std::wostringstream& ostr)
 {
     ostr << L"FIXME : Implement ListDelete::toString" << std::endl;
-    scilabWriteW(ostr.str().c_str());
     return true;
 }
 }
index fae4c60..71e8f8b 100644 (file)
@@ -36,7 +36,6 @@ InternalType* ListOperation::clone(void)
 bool ListOperation::toString(std::wostringstream& ostr)
 {
     ostr << L"FIXME : Implement ListOperation::toString" << std::endl;
-    scilabWriteW(ostr.str().c_str());
     return true;
 }
 }
index 5931f0f..d695356 100644 (file)
@@ -41,7 +41,6 @@ InternalType::ScilabType ListUndefined::getType(void)
 bool ListUndefined::toString(std::wostringstream& ostr)
 {
     ostr << L"    Undefined" << std::endl;
-    scilabWriteW(ostr.str().c_str());
     return true;
 }
 }
index 498ed80..131c06a 100644 (file)
@@ -140,9 +140,6 @@ bool Macro::toString(std::wostringstream& ostr)
     }
 
     ostr << L")" << std::endl;
-
-    scilabWriteW(ostr.str().c_str());
-
     return true;
 }
 
index cd878ef..04704fe 100644 (file)
@@ -54,7 +54,6 @@ void MacroFile::whoAmI()
 bool MacroFile::toString(std::wostringstream& ostr)
 {
     ostr << L"FIXME : Implement MacroFile::toString" << std::endl;
-    scilabWriteW(ostr.str().c_str());
     return true;
 }
 
index d8bc320..2a49947 100644 (file)
@@ -328,7 +328,6 @@ void SinglePoly::updateRank(void)
 bool SinglePoly::toString(std::wostringstream& ostr)
 {
     ostr << L"FIXME : implement SinglePoly::toString" << std::endl;
-    scilabWriteW(ostr.str().c_str());
     return true;
 }
 
index 5805d99..da2d0a5 100644 (file)
@@ -280,7 +280,6 @@ bool SingleStruct::toString(std::wostringstream& ostr)
         }
     }
 
-    scilabWriteW(ostr.str().c_str());
     return true;
 }
 
index fb65a97..f98ff54 100644 (file)
@@ -536,7 +536,6 @@ bool Sparse::toString(std::wostringstream& ostr) const
     }
 
     ostr << res;
-    scilabWriteW(ostr.str().c_str());
     return true;
 }
 
@@ -2195,9 +2194,6 @@ void SparseBool::create(int rows, int cols, Bool SPARSE_CONST& src, DestIter o,
 bool SparseBool::toString(std::wostringstream& ostr) const
 {
     ostr << ::toString(*matrixBool, 0);
-
-    scilabWriteW(ostr.str().c_str());
-
     return true;
 }
 
index 2c4a2d6..ee47ca4 100644 (file)
@@ -488,7 +488,6 @@ bool Struct::toString(std::wostringstream& ostr)
         pwstFields->killMe();
     }
 
-    scilabWriteW(ostr.str().c_str());
     return true;
 }
 
index 685c74b..3c00508 100644 (file)
@@ -141,7 +141,6 @@ bool ThreadId::toString(std::wostringstream& ostr)
 {
     ostr << L"ThreadId : " << this << std::endl;
     ostr << L"Status : " << StatusToString(this->getStatus());
-    scilabWriteW(ostr.str().c_str());
     return true;
 }
 }
index 64c8a57..04b87fd 100644 (file)
@@ -321,7 +321,6 @@ int getIndexWithDims(int* _piIndexes, int* _piDims, int _iDims)
 
 void VariableToString(types::InternalType* pIT, const wchar_t* wcsVarName)
 {
-    std::wostringstream ostr;
     if (pIT->hasToString() == false)
     {
         //call overload %type_p
@@ -347,6 +346,7 @@ void VariableToString(types::InternalType* pIT, const wchar_t* wcsVarName)
     }
     else
     {
+        std::wostringstream ostr;
         if (pIT->isList())
         {
             ostr << wcsVarName;
@@ -365,6 +365,8 @@ void VariableToString(types::InternalType* pIT, const wchar_t* wcsVarName)
                 //show message on prompt
                 bFinish = linesmore() == 1;
             }
+
+            scilabForcedWriteW(ostr.str().c_str());
             ostr.str(L"");
         }
         while (bFinish == false);
index 32ea43d..64bc086 100644 (file)
@@ -36,7 +36,6 @@ InternalType* Void::clone(void)
 bool Void::toString(std::wostringstream& ostr)
 {
     ostr << L"" << std::endl;
-    scilabWriteW(ostr.str().c_str());
     return true;
 }
 }
index 40b9049..ba8c827 100644 (file)
@@ -1,6 +1,7 @@
 /*
  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  *  Copyright (C) 2010-2010 - DIGITEO - ELIAS Antoine
+ *  Copyright (C) 2014 - Scilab Enterprises - Cedric Delamarre
  *
  *  This file must be used under the terms of the CeCILL.
  *  This source file is licensed as described in the file COPYING, which
  *
  */
 
+#include "output_stream_gw.hxx"
 #include "function.hxx"
-#include "funcmanager.hxx"
 #include "scilabWrite.hxx"
-#include "configvariable.hxx"
-#include "output_stream_gw.hxx"
-#include "string.hxx"
-#include "tlist.hxx"
-#include "overload.hxx"
-#include "execvisitor.hxx"
-#include "context.hxx"
-#include "symbol.hxx"
+#include "types_tools.hxx"
 
 extern "C"
 {
@@ -28,51 +22,21 @@ extern "C"
 #include "localization.h"
 }
 
-using namespace types;
-
-Function::ReturnValue sci_disp(typed_list &in, int _iRetCount, typed_list &out)
+types::Function::ReturnValue sci_disp(types::typed_list &in, int _iRetCount, types::typed_list &out)
 {
-    typed_list::reverse_iterator it;
+    types::typed_list::reverse_iterator it;
 
     if (in.empty())
     {
         Scierror(999, _("%s: Wrong number of input arguments: At least %d expected.\n"), "disp", 1);
-        return Function::Error;
+        return types::Function::Error;
     }
 
     for (it = in.rbegin() ; it != in.rend() ; it++)
     {
-        bool isTList = (*it)->getType() == GenericType::ScilabTList;
-        bool isMList = (*it)->getType() == GenericType::ScilabMList;
-
         scilabForcedWriteW(L"\n");
-        if (isTList || isMList)
-        {
-            wchar_t* wcsStr = NULL;
-            if (isTList)
-            {
-                TList* pTL = (*it)->getAs<TList>();
-                wcsStr = pTL->get(0)->getAs<String>()->get(0);
-            }
-            else
-            {
-                MList* pML = (*it)->getAs<MList>();
-                wcsStr = pML->get(0)->getAs<String>()->get(0);
-            }
-
-            typed_list input;
-            input.push_back(*it);
-            std::wstring wstFuncName = L"%"  + std::wstring(wcsStr) + L"_p";
-            if (symbol::Context::getInstance()->get(symbol::Symbol(wstFuncName)))
-            {
-                return Overload::call(wstFuncName, input, 1, out, new ast::ExecVisitor());
-            }
-        }
-
-        std::wostringstream ostr;
-        (*it)->toString(ostr);
-        scilabForcedWriteW(ostr.str().c_str());
+        VariableToString(*it, SPACES_LIST);
     }
 
-    return Function::OK;
+    return types::Function::OK;
 }