bug #13983: who_user returns wrong values 39/17239/2
Antoine ELIAS [Wed, 23 Sep 2015 14:31:48 +0000 (16:31 +0200)]
Change-Id: Ieab891e79fc3e8573697d52b906128da3600687d

scilab/CHANGES_6.0.X
scilab/etc/scilab.start
scilab/modules/ast/includes/symbol/symbol.hxx
scilab/modules/ast/includes/system_env/setenvvar.h
scilab/modules/ast/src/cpp/system_env/setenvvar.cpp
scilab/modules/core/macros/who_user.sci
scilab/modules/core/src/cpp/InitScilab.cpp
scilab/modules/core/tests/nonreg_tests/bug_13983.dia.ref [new file with mode: 0644]
scilab/modules/core/tests/nonreg_tests/bug_13983.tst [new file with mode: 0644]

index 035c553..f672f35 100644 (file)
@@ -37,6 +37,8 @@ Scilab Bug Fixes
 
 * Bug #13944 fixed - The menu "Toolboxes" was missing.
 
+* Bug #13983 fixed - who_user returned wrong values.
+
 * Bug #14020 fixed - Incorrect carriage return ascii code.
 
 * Bug #14023 fixed - It was not possible to concatenate cells.
index bb7735e..96c538e 100644 (file)
@@ -55,10 +55,10 @@ for i=1:size(modules,"*")
      exit(2);
    end
 end
-clear modules i load ierr startFile;
+clear modules i ierr startFile;
 
 // Create some configuration variables ================================
-home = getenv("HOME", SCI);
+//home = getenv("HOME", SCI);
 if getos() <> "Windows" then
   if getenv("PRINTERS", "ndef") == "ndef" then
     setenv("PRINTERS", "lp");
index 4f97321..635c49a 100644 (file)
@@ -33,8 +33,7 @@ extern "C"
 
 #define SCOPE_ALL       -1
 #define SCOPE_GATEWAY   0
-#define SCOPE_MACRO     1
-#define SCOPE_CONSOLE   2
+#define SCOPE_CONSOLE   1
 
 namespace symbol
 {
index 33ca8f0..13355dc 100644 (file)
@@ -39,5 +39,6 @@ EXTERN_AST bool isdir(const char * path);
 EXTERN_AST bool createdirectory(const char *path);
 EXTERN_AST bool isDrive(const char *strname);
 EXTERN_AST void SetScilabEnvironment(void);
+EXTERN_AST void SetScilabVariables(void);
 EXTERN_AST int SciEnvForOthers(void);
 
index 3e99254..7f1cecc 100644 (file)
@@ -68,6 +68,12 @@ void SetScilabEnvironment(void)
     //windows check
     SciEnvForWindows();
 #endif
+
+    SetScilabVariables();
+}
+
+void SetScilabVariables(void)
+{
     //create SCI
     defineSCI();
     //create SCIHOME
index 3e42042..c51d40d 100644 (file)
 function ret = who_user(%__bPrint__)
     //get user variables
     [nams,mem]=who("get"); //get all variables
-    p=predef(); //number of system variable
-    nams=nams(1:$-p+1);mem=mem(1:$-p+1);
+    p=predef("names");
+
+    //remove predef vars
+    ke=grep(nams,p);
+    nams(ke) = [];
+    mem(ke) = [];
+
     //modifiable system variables
-    excluded=["demolist","%helps","%helps_modules","home","who_user", "%__bPrint__"];
+    excluded=["nargin","nargout","demolist","%helps","%helps_modules","home","who_user", "%__bPrint__"];
     ke=grep(nams,excluded)
     nams(ke)=[];mem(ke)=[];
     ret = nams
index df06ef6..0a060f9 100644 (file)
@@ -269,8 +269,21 @@ int StartScilabEngine(ScilabEngineInfo* _pSEI)
     //load gateways
     LoadModules();
 
+    //variables are needed by loadModules but must be in SCOPE_CONSOLE under protection
+    //remove (W)SCI/SCIHOME/HOME/TMPDIR
+    symbol::Context::getInstance()->remove(symbol::Symbol(L"SCI"));
+    symbol::Context::getInstance()->remove(symbol::Symbol(L"WSCI"));
+    symbol::Context::getInstance()->remove(symbol::Symbol(L"SCIHOME"));
+    symbol::Context::getInstance()->remove(symbol::Symbol(L"home"));
+    symbol::Context::getInstance()->remove(symbol::Symbol(L"TMPDIR"));
+
     //open a scope for macros
     symbol::Context::getInstance()->scope_begin();
+
+    Add_All_Variables();
+    SetScilabVariables();
+
+    symbol::Context::getInstance()->protect();
     //execute scilab.start
     if (_pSEI->iNoStart == 0)
     {
@@ -278,7 +291,7 @@ int StartScilabEngine(ScilabEngineInfo* _pSEI)
     }
 
     //open console scope
-    symbol::Context::getInstance()->scope_begin();
+    //symbol::Context::getInstance()->scope_begin();
 
     ConfigVariable::setStartProcessing(false);
 
@@ -374,7 +387,7 @@ void StopScilabEngine(ScilabEngineInfo* _pSEI)
     clearScilabPreferences();
 
     //close console scope
-    symbol::Context::getInstance()->scope_end();
+    //symbol::Context::getInstance()->scope_end();
 
     //execute scilab.quit
     if (_pSEI->pstFile)
@@ -963,7 +976,7 @@ static int InitializeEnvironnement(void)
     ConfigVariable::setConsoleWidth(75);
     ConfigVariable::setFormatSize(10);
     ConfigVariable::setFormatMode(1);
-    Add_All_Variables();
+    //Add_All_Variables();
     FileManager::initialize();
     initOperationArray();
     return 0;
diff --git a/scilab/modules/core/tests/nonreg_tests/bug_13983.dia.ref b/scilab/modules/core/tests/nonreg_tests/bug_13983.dia.ref
new file mode 100644 (file)
index 0000000..214ab5d
--- /dev/null
@@ -0,0 +1,18 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2015 - Scilab Enterprises - Antoine ELIAS
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- Non-regression test for bug 13983 -->
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/13983
+//
+// <-- Short Description -->
+// who_user returns wrong values ( %e, %i, ...)
+vars = who_user(%f);
+assert_checkequal(grep(vars, ["%e", "%i", "%inf"]), []);
diff --git a/scilab/modules/core/tests/nonreg_tests/bug_13983.tst b/scilab/modules/core/tests/nonreg_tests/bug_13983.tst
new file mode 100644 (file)
index 0000000..a726764
--- /dev/null
@@ -0,0 +1,19 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2015 - Scilab Enterprises - Antoine ELIAS
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- Non-regression test for bug 13983 -->
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/13983
+//
+// <-- Short Description -->
+// who_user returns wrong values ( %e, %i, ...)
+
+vars = who_user(%f);
+assert_checkequal(grep(vars, ["%e", "%i", "%inf"]), []);