changeset 27188:792fe198c105

don't print hidden or protected/private classdef properties (bug #55766) * ov-classdef.cc (octave_classdef::print_raw): Skip hidden, protected, and private properties in default display.
author John W. Eaton <jwe@octave.org>
date Fri, 14 Jun 2019 15:34:44 -0500
parents 42efd1e986c7
children 946c6f117091
files libinterp/octave-value/ov-classdef.cc
diffstat 1 files changed, 37 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/octave-value/ov-classdef.cc	Fri Jun 14 15:32:50 2019 -0500
+++ b/libinterp/octave-value/ov-classdef.cc	Fri Jun 14 15:34:44 2019 -0500
@@ -266,14 +266,28 @@
 
       increment_indent_level ();
 
-      std::map<std::string, octave::cdef_property> props;
-
-      props = cls.get_property_map ();
+      std::map<std::string, octave::cdef_property> property_map
+        = cls.get_property_map ();
 
       size_t max_len = 0;
-      for (const auto& nm_prop : props)
+      for (const auto& pname_prop : property_map)
         {
-          const std::string& nm = nm_prop.first;
+          // FIXME: this loop duplicates a significant portion of the
+          // loop below and the loop in Fproperties.
+
+          const octave::cdef_property& prop = pname_prop.second;
+
+          const std::string nm = prop.get_name ();
+
+          octave_value acc = prop.get ("GetAccess");
+
+          if (! acc.is_string () || acc.string_value () != "public")
+            continue;
+
+          octave_value hid = prop.get ("Hidden");
+
+          if (hid.bool_value ())
+            continue;
 
           size_t sz = nm.size ();
 
@@ -281,18 +295,28 @@
             max_len = sz;
         }
 
-      for (auto& nm_prop : props)
+      for (auto& pname_prop : property_map)
         {
+          const octave::cdef_property& prop = pname_prop.second;
+
+          const std::string nm = prop.get_name ();
+
+          octave_value acc = prop.get ("GetAccess");
+
+          if (! acc.is_string () || acc.string_value () != "public")
+            continue;
+
+          octave_value hid = prop.get ("Hidden");
+
+          if (hid.bool_value ())
+            continue;
+
           indent (os);
 
-          const std::string& nm = nm_prop.first;
-
           if (is_array)
             os << "  " << nm;
           else
             {
-              octave::cdef_property& prop = nm_prop.second;
-
               octave_value val = prop.get_value (object, false);
               dim_vector dims = val.dims ();
 
@@ -562,6 +586,9 @@
 
   for (const auto& pname_prop : property_map)
     {
+      // FIXME: this loop duplicates a significant portion of the loops
+      // in octave_classdef::print_raw.
+
       const octave::cdef_property& prop = pname_prop.second;
 
       std::string nm = prop.get_name ();