* Bug #14564 fixed - fieldnames failed for empty structs 34/18634/4
Nicolas [Wed, 26 Oct 2016 10:23:35 +0000 (12:23 +0200)]
Change-Id: I03d17878412e13ea8f4334763fa3aaac609e9460

scilab/CHANGES.md
scilab/modules/core/sci_gateway/cpp/sci_fieldnames.cpp
scilab/modules/types/tests/nonreg_tests/bug_14564.dia.ref [new file with mode: 0644]
scilab/modules/types/tests/nonreg_tests/bug_14564.tst [new file with mode: 0644]

index 2805f89..a50b17a 100644 (file)
@@ -349,6 +349,7 @@ Bug Fixes
 * [#14513](http://bugzilla.scilab.org/show_bug.cgi?id=14513): `isqual` comparing two built-in functions yielded an error.
 * [#14527](http://bugzilla.scilab.org/show_bug.cgi?id=14527): Calling pathconvert function without parameters crashed Scilab.
 * [#14557](http://bugzilla.scilab.org/show_bug.cgi?id=14557): `csim` failed when the system has no state.
+* [#14564](http://bugzilla.scilab.org/show_bug.cgi?id=14564): fieldnames failed for empty structs.
 * [#14582](http://bugzilla.scilab.org/show_bug.cgi?id=14582): `gettext`or it alias `_()` were sometimes applied to broken literal strings
 * [#14586](http://bugzilla.scilab.org/show_bug.cgi?id=14586): Xcos simulation stop button did not work.
 * [#14587](http://bugzilla.scilab.org/show_bug.cgi?id=14587): Datatip textbox wrong clipping when loaded from `*.scg` file.
index a800f24..e545d49 100644 (file)
@@ -51,8 +51,17 @@ types::Function::ReturnValue sci_fieldnames(types::typed_list &in, int _iRetCoun
         types::String* pFields = in[0]->getAs<types::Struct>()->getFieldNames();
         if (pFields)
         {
-            out.push_back(pFields);
-            //delete pFields;
+            if (pFields->getSize() == 0)
+            {
+                delete pFields;
+                out.push_back(types::Double::Empty());
+            }
+            else
+            {
+
+                out.push_back(pFields);
+                //delete pFields;
+            }
         }
         else
         {
diff --git a/scilab/modules/types/tests/nonreg_tests/bug_14564.dia.ref b/scilab/modules/types/tests/nonreg_tests/bug_14564.dia.ref
new file mode 100644 (file)
index 0000000..e84d5ba
--- /dev/null
@@ -0,0 +1,19 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2016 - Scilab Enterprises - Nicolas Carrez
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- Non-regression test for bug 14564 -->
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=14564
+//
+// <-- Short Description -->
+// fieldnames failed for empty struct
+a.r = 1;
+a.r = null();
+assert_checkequal(fieldnames(a), []);
diff --git a/scilab/modules/types/tests/nonreg_tests/bug_14564.tst b/scilab/modules/types/tests/nonreg_tests/bug_14564.tst
new file mode 100644 (file)
index 0000000..2d98da3
--- /dev/null
@@ -0,0 +1,21 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2016 - Scilab Enterprises - Nicolas Carrez
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- Non-regression test for bug 14564 -->
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=14564
+//
+// <-- Short Description -->
+// fieldnames failed for empty struct
+
+a.r = 1;
+a.r = null();
+assert_checkequal(fieldnames(a), []);
+