* Bug 16552 [m2sci]: cd, dir, dos, exist, ferror, +ismac, ispc, isunix, return 10/21610/6
Samuel GOUGEON [Mon, 26 Oct 2020 00:53:06 +0000 (01:53 +0100)]
  http://bugzilla.scilab.org/16552

  test_run m2sci CD enable_lt
  test_run m2sci DIR enable_lt  // fails for another generic reason
  test_run m2sci DOS enable_lt
  test_run m2sci FERROR enable_lt
  test_run m2sci ISPC enable_lt
  test_run m2sci ISUNIX enable_lt
  test_run m2sci ISMAC enable_lt
  test_run m2sci EXIST enable_lt
  test_run m2sci RETURN enable_lt
  test_run m2sci END_index_syntax enable_lt

Change-Id: I3b16b269eb12ce91ecf6ef4a141e1ed51a9ebb6f

23 files changed:
scilab/CHANGES.md
scilab/modules/functions/macros/instruction2code.sci
scilab/modules/m2sci/macros/sci_files/sci_exist.sci
scilab/modules/m2sci/macros/sci_files/sci_ismac.sci [new file with mode: 0644]
scilab/modules/m2sci/macros/sci_files/sci_ispc.sci
scilab/modules/m2sci/macros/sci_files/sci_isunix.sci
scilab/modules/m2sci/macros/sci_files/sci_resume.sci [new file with mode: 0644]
scilab/modules/m2sci/tests/unit_tests/conversion/CD.dia.ref
scilab/modules/m2sci/tests/unit_tests/conversion/DIR.dia.ref
scilab/modules/m2sci/tests/unit_tests/conversion/END_index_syntax.dia.ref [moved from scilab/modules/m2sci/tests/nonreg_tests/bug_16181.dia.ref with 91% similarity]
scilab/modules/m2sci/tests/unit_tests/conversion/END_index_syntax.m [moved from scilab/modules/m2sci/tests/nonreg_tests/bug_16181.m with 100% similarity]
scilab/modules/m2sci/tests/unit_tests/conversion/END_index_syntax.tst [moved from scilab/modules/m2sci/tests/nonreg_tests/bug_16181.tst with 76% similarity]
scilab/modules/m2sci/tests/unit_tests/conversion/EXIST.dia.ref
scilab/modules/m2sci/tests/unit_tests/conversion/FERROR.dia.ref
scilab/modules/m2sci/tests/unit_tests/conversion/ISMAC.dia.ref [new file with mode: 0644]
scilab/modules/m2sci/tests/unit_tests/conversion/ISMAC.tst [new file with mode: 0644]
scilab/modules/m2sci/tests/unit_tests/conversion/ISPC.dia.ref
scilab/modules/m2sci/tests/unit_tests/conversion/ISUNIX.dia.ref
scilab/modules/m2sci/tests/unit_tests/conversion/RETURN.dia.ref
scilab/modules/m2sci/tests/unit_tests/mfilesnoexec/CD.m
scilab/modules/m2sci/tests/unit_tests/mfilesnoexec/DIR.m
scilab/modules/m2sci/tests/unit_tests/mfilesnoexec/FERROR.m
scilab/modules/m2sci/tests/unit_tests/mfilesnoexec/ISMAC.m [new file with mode: 0644]

index 124f908..d02148b 100644 (file)
@@ -387,6 +387,7 @@ Bug Fixes
 * [#16530](https://bugzilla.scilab.org/16530): `mapsound` needed to be reforged.
 * [#16549](https://bugzilla.scilab.org/16549): simple script crashed Scilab in GUI mode.
 * [#16551](https://bugzilla.scilab.org/16551): `num2cell` returned {} for any input array of empty strings.
+* [#16552](https://bugzilla.scilab.org/16552): `mfile2sci`: conversion of `ispc` and `isunix` still used `MSDOS` removed far ago. Conversion of `ismac` was missing. Conversion of `exist` missed using `mtlb_exist`. Conversion of `dos` yielded some "operation +" warnings. Unit tests for the conversion of `cd`, `dir` and `ferror` overwrote some Scilab reserved keywords. Conversion of `return` yielded `mtlb(resume)`.
 * [#16553](https://bugzilla.scilab.org/16553): `unique(["" ""])` returned `["" ""]`.
 * [#16557](https://bugzilla.scilab.org/16557): `macr2tree` + `tree2code` translated `e={2}` into `"e=1"` and `e={2,"ab"}` into `"e=[2,"ab"]"`.
 * [#16559](https://bugzilla.scilab.org/16553): `isempty(A)` was true for sparse matrix of dimension 2^16 or larger.
index 1194957..169a21c 100644 (file)
@@ -183,6 +183,7 @@ function  C=instruction2code(I, bprettyprintformat)
         C=cat_code(C,"end")
         C($)=C($)+";"
         return
+
     end
 
     // ------------------------------------
@@ -241,7 +242,7 @@ function  C=instruction2code(I, bprettyprintformat)
             for lhsind=1:size(I.lhs)
                 lhsnames=[lhsnames,expression2code(I.lhs(lhsind))]
             end
-            if strcat(lhsnames,",")<>"" then
+            if lhsnames<>[] & strcat(lhsnames,",")<>"" then
                 C="["+strcat(lhsnames,",")+"] = "+rhs2code(I.expression)
             else
                 C=rhs2code(I.expression)
index 4924df1..1e6931c 100644 (file)
@@ -10,7 +10,7 @@
 // For more information, see the COPYING file which you should have received
 // along with this program.
 
-function [tree]=sci_exist(tree)
+function tree = sci_exist(tree)
     // M2SCI function
     // Conversion function for Matlab exist()
     // Input: tree = Matlab funcall tree
@@ -21,9 +21,9 @@ function [tree]=sci_exist(tree)
 
     set_infos(gettext("mtlb_exist() is just a partial emulation of Matlab exist() function."),2)
 
-    scitree.name="mtlb_exist"
+    tree.name = "mtlb_exist"
 
-    tree.lhs(1).dims=list(1,1)
-    tree.lhs(1).type=Type(Double,Real)
+    tree.lhs(1).dims = list(1,1)
+    tree.lhs(1).type = Type(Double,Real)
 
 endfunction
diff --git a/scilab/modules/m2sci/macros/sci_files/sci_ismac.sci b/scilab/modules/m2sci/macros/sci_files/sci_ismac.sci
new file mode 100644 (file)
index 0000000..2923123
--- /dev/null
@@ -0,0 +1,23 @@
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2020 - Samuel GOUGEON
+//
+// This file is hereby licensed under the terms of the GNU GPL v2.0,
+// pursuant to article 5.3.4 of the CeCILL v.2.1.
+// This file was originally licensed under the terms of the CeCILL v2.1,
+// and continues to be available under such terms.
+// For more information, see the COPYING file which you should have received
+// along with this program.
+
+function tree = sci_ismac(tree)
+    // M2SCI function
+    // Conversion function for Matlab ismac()
+    // Input: tree = Matlab funcall tree
+    // Ouput: tree = Scilab equivalent for tree
+
+    OS = Funcall("getos",1,list(),list())
+    tree = Operation("==", list(OS,Cste("Darwin")),tree.lhs)
+
+    tree.out(1).dims = list(1,1)
+    tree.out(1).type = Type(Boolean,Real)
+
+endfunction
index bd4b035..131b899 100644 (file)
@@ -1,7 +1,7 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) 2002-2004 - INRIA - Vincent COUVERT
-//
 // Copyright (C) 2012 - 2016 - Scilab Enterprises
+// Copyright (C) 2020 - Samuel GOUGEON
 //
 // This file is hereby licensed under the terms of the GNU GPL v2.0,
 // pursuant to article 5.3.4 of the CeCILL v.2.1.
 // For more information, see the COPYING file which you should have received
 // along with this program.
 
-function [tree]=sci_ispc(tree)
+function tree = sci_ispc(tree)
     // M2SCI function
     // Conversion function for Matlab ispc()
     // Input: tree = Matlab funcall tree
     // Ouput: tree = Scilab equivalent for tree
 
-    tree=Variable("MSDOS",Infer(list(1,1),Type(Boolean,Real)))
+    OS = Funcall("getos",1,list(),list())
+    tree = Operation("==", list(OS,Cste("Windows")),tree.lhs)
 
+    tree.out(1).dims = list(1,1)
+    tree.out(1).type = Type(Boolean,Real)
 endfunction
index 0006129..fc3cd70 100644 (file)
@@ -1,7 +1,7 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) 2002-2004 - INRIA - Vincent COUVERT
-//
 // Copyright (C) 2012 - 2016 - Scilab Enterprises
+// Copyright (C) 2020 - Samuel GOUGEON
 //
 // This file is hereby licensed under the terms of the GNU GPL v2.0,
 // pursuant to article 5.3.4 of the CeCILL v.2.1.
 // For more information, see the COPYING file which you should have received
 // along with this program.
 
-function [tree]=sci_isunix(tree)
+function tree = sci_isunix(tree)
     // M2SCI function
     // Conversion function for Matlab isunix()
     // Input: tree = Matlab funcall tree
     // Ouput: tree = Scilab equivalent for tree
 
-    tree=Operation("~",list(Variable("MSDOS",Infer(list(1,1),Type(Boolean,Real)))),tree.lhs)
-
-    tree.out(1).dims=list(1,1)
-    tree.out(1).type=Type(Boolean,Real)
+    OS = Funcall("getos",1,list(),list())
+    tree = Operation("==", list(OS,Cste("Linux")),tree.lhs)
 
+    tree.out(1).dims = list(1,1)
+    tree.out(1).type = Type(Boolean,Real)
 endfunction
diff --git a/scilab/modules/m2sci/macros/sci_files/sci_resume.sci b/scilab/modules/m2sci/macros/sci_files/sci_resume.sci
new file mode 100644 (file)
index 0000000..23cc734
--- /dev/null
@@ -0,0 +1,20 @@
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2020 - Samuel GOUGEON
+//
+// This file is hereby licensed under the terms of the GNU GPL v2.0,
+// pursuant to article 5.3.4 of the CeCILL v.2.1.
+// This file was originally licensed under the terms of the CeCILL v2.1,
+// and continues to be available under such terms.
+// For more information, see the COPYING file which you should have received
+// along with this program.
+
+function tree = sci_resume(tree)
+    // M2SCI function
+    // Conversion function for Matlab return
+    // Input: tree = Matlab funcall tree
+    // Ouput: tree = Scilab equivalent for tree
+
+    // Scilab 6 compiles "return" into "resume"
+
+    tree.name = "return"
+endfunction
index 433e462..6992d2c 100644 (file)
@@ -35,8 +35,8 @@ TESTING M2SCI: creating varslist file...
 // Matlab version: 6.5.0.180913a (R13)
 // V.C.
 
-dirname = "~"
-cd(dirname)
+dirName = "~"
+cd(dirName)
 cd("~")
 cd("..")
 cd("dirname")
index d5146a2..672e16c 100644 (file)
@@ -41,12 +41,12 @@ TESTING M2SCI: creating varslist file...
 // Matlab version: 6.5.0.180913a (R13)
 // V.C.
 
-dirname = "~";
+dirName = "~";
 dir
 dir("dirname")
-dir(dirname)
+dir(dirName)
 dir("dirname")
 dir("dirname")
 files = mtlb_dir()
-files1 = mtlb_dir(dirname)
+files1 = mtlb_dir(dirName)
 files2 = mtlb_dir("dirname")
@@ -7,16 +7,17 @@
 //
 // <-- CLI SHELL MODE -->
 // <-- ENGLISH IMPOSED -->
-//
-// <-- Non-regression test for bug 16181 -->
+// <-- LONG TIME EXECUTION -->
 //
 // <-- Bugzilla URL -->
 // http://bugzilla.scilab.org/16181
 //
+// <-- Short Description -->
+// Unit tests for replacing the "end" index
 if ~isdef("m2scikernellib") then
     load("SCI/modules/m2sci/macros/kernel/lib")
 end
-txt = mgetl("SCI/modules/m2sci/tests/nonreg_tests/bug_16181.m");
+txt = mgetl("SCI/modules/m2sci/tests/unit_tests/conversion/END_index_syntax.m");
 printf("%s\n", replace_end_dollar(txt));
 % end in comments
 % a($:-1:2) in comments
@@ -7,15 +7,17 @@
 //
 // <-- CLI SHELL MODE -->
 // <-- ENGLISH IMPOSED -->
-//
-// <-- Non-regression test for bug 16181 -->
+// <-- LONG TIME EXECUTION -->
 //
 // <-- Bugzilla URL -->
 // http://bugzilla.scilab.org/16181
 //
+// <-- Short Description -->
+// Unit tests for replacing the "end" index
+
 if ~isdef("m2scikernellib") then
     load("SCI/modules/m2sci/macros/kernel/lib")
 end
 
-txt = mgetl("SCI/modules/m2sci/tests/nonreg_tests/bug_16181.m");
+txt = mgetl("SCI/modules/m2sci/tests/unit_tests/conversion/END_index_syntax.m");
 printf("%s\n", replace_end_dollar(txt));
index 628dc71..832ee05 100644 (file)
@@ -38,5 +38,5 @@ TESTING M2SCI: creating varslist file...
 // Matlab version: 6.5.0.180913a (R13)
 // V.C.
 
-exist("item")
-exist("item","kind")
+mtlb_exist("item")
+mtlb_exist("item","kind")
index fe28f15..41293b7 100644 (file)
@@ -37,7 +37,7 @@ TESTING M2SCI: creating varslist file...
 // V.C.
 
 fid = 1
-message = merror(fid)
-message = mclearerr(fid)
-[message,errnum] = ferror(fid)
-[message,errnum] = ferror(fid)
+Message = merror(fid)
+Message = mclearerr(fid)
+[Message, errnum] = ferror(fid)
+[Message, errnum] = ferror(fid)
diff --git a/scilab/modules/m2sci/tests/unit_tests/conversion/ISMAC.dia.ref b/scilab/modules/m2sci/tests/unit_tests/conversion/ISMAC.dia.ref
new file mode 100644 (file)
index 0000000..793b599
--- /dev/null
@@ -0,0 +1,37 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2020 - Samuel GOUGEON
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- CLI SHELL MODE -->
+// <-- ENGLISH IMPOSED -->
+// <-- LONG TIME EXECUTION -->
+// Unitary test for conversion of Matlab function: ISMAC
+exec("SCI/modules/m2sci/tests/unit_tests/utils/m2sciTestConversionNoExe.sci", -1);
+mprintf("%s\n", m2sciTestConversionNoExe("ISMAC"));
+  ****** Beginning of mfile2sci() session ******
+  File to convert: SCI/modules/m2sci/tests/unit_tests/mfilesnoexec/ISMAC.m
+  Result file path: TMPDIR/
+  Recursive mode: OFF
+  Only double values used in M-file: NO
+  Verbose mode: -1
+  Generate formatted code: YES
+  M-file reading...
+  M-file reading: Done
+  Syntax modification...
+  Syntax modification: Done
+  Macro to tree conversion...
+  Conversion of M-tree...
+  L.6: Unknown variable ismac is a M-file.
+  L.7: Unknown variable ismac is a M-file.
+  Conversion of M-tree: Done
+TESTING M2SCI: creating varslist file...
+  Macro to tree conversion: Done
+  ****** End of mfile2sci() session ******
+// Test file for function ismac()
+// Copyright INRIA
+// Matlab version: 7.0.0.19901 (R14)
+// V.C.
+getos()=="Darwin"
+tf = getos()=="Darwin"
diff --git a/scilab/modules/m2sci/tests/unit_tests/conversion/ISMAC.tst b/scilab/modules/m2sci/tests/unit_tests/conversion/ISMAC.tst
new file mode 100644 (file)
index 0000000..b3a03e2
--- /dev/null
@@ -0,0 +1,16 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2020 - Samuel GOUGEON
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- CLI SHELL MODE -->
+// <-- ENGLISH IMPOSED -->
+// <-- LONG TIME EXECUTION -->
+
+// Unitary test for conversion of Matlab function: ISMAC
+
+exec("SCI/modules/m2sci/tests/unit_tests/utils/m2sciTestConversionNoExe.sci", -1);
+
+mprintf("%s\n", m2sciTestConversionNoExe("ISMAC"));
index 6cc79a6..28ea46c 100644 (file)
@@ -35,5 +35,5 @@ TESTING M2SCI: creating varslist file...
 // Matlab version: 7.0.0.19901 (R14)
 // V.C.
 
-MSDOS
-tf = MSDOS
+getos()=="Windows"
+tf = getos()=="Windows"
index 9569e46..58bd43b 100644 (file)
@@ -35,5 +35,5 @@ TESTING M2SCI: creating varslist file...
 // Matlab version: 7.0.0.19901 (R14)
 // V.C.
 
-~MSDOS
-tf = ~MSDOS
+getos()=="Linux"
+tf = getos()=="Linux"
index 57cce25..c83b007 100644 (file)
@@ -23,14 +23,13 @@ mprintf("%s\n", m2sciTestConversionNoExe("RETURN"));
   Syntax modification: Done
   Macro to tree conversion...
   Conversion of M-tree...
+  L.6: Unknown variable resume is a M-file.
   Conversion of M-tree: Done
 TESTING M2SCI: creating varslist file...
   Macro to tree conversion: Done
   ****** End of mfile2sci() session ******
-
 // Test file for function return
 // Copyright INRIA
 // Matlab version: 6.5.0.180913a (R13)
 // V.C.
-
-return;
+return
index f371b18..1503c67 100644 (file)
@@ -3,8 +3,8 @@
 % Matlab version: 6.5.0.180913a (R13)
 % V.C.
 
-dirname='~'
-cd(dirname)
+dirName = '~'
+cd(dirName)
 cd ~
 cd ..
 cd dirname
index ae9c81f..231955b 100644 (file)
@@ -3,14 +3,14 @@
 % Matlab version: 6.5.0.180913a (R13)
 % V.C.
 
-dirname='~';
+dirName = '~';
 dir
 dir dirname
-dir(dirname)
+dir(dirName)
 dir 'dirname'
 dir('dirname')
 files = dir
-files1 = dir(dirname)
+files1 = dir(dirName)
 files2 = dir('dirname')
 
 
index e52a859..865649e 100644 (file)
@@ -4,8 +4,8 @@
 % V.C.
 
 fid=1
-message = ferror(fid)
-message = ferror(fid,'clear')
-[message,errnum] = ferror(fid)
-[message,errnum] = ferror(fid,'clear')
+Message = ferror(fid)
+Message = ferror(fid,'clear')
+[Message, errnum] = ferror(fid)
+[Message, errnum] = ferror(fid,'clear')
 
diff --git a/scilab/modules/m2sci/tests/unit_tests/mfilesnoexec/ISMAC.m b/scilab/modules/m2sci/tests/unit_tests/mfilesnoexec/ISMAC.m
new file mode 100644 (file)
index 0000000..40186bc
--- /dev/null
@@ -0,0 +1,7 @@
+% Test file for function ismac()
+% Copyright INRIA
+% Matlab version: 7.0.0.19901 (R14)
+% V.C.
+
+ismac
+tf = ismac