changeset 24285:d22d2936f580

store subfunction names in scope instead of function object * symscope.h (symbol_scope::m_subfunction_names): New data member. (symbol_scope::has_subfunctions, symbol_scope::stash_subfunction_names, symbol_scope::subfunction_names): New functions. * ov-usr-fcn.h, ov-usr-fcn.cc (octave_user_function::has_subfunctions, octave_user_function::stash_subfunction_names, octave_user_function::subfunction_names): Forward to symbol_scope functions. (octave_user_function::subfcn_names): Delete data member.
author John W. Eaton <jwe@octave.org>
date Sun, 19 Nov 2017 21:17:25 -0500
parents 81557c74be7f
children 6bfb96ab73cb
files libinterp/corefcn/symscope.h libinterp/octave-value/ov-usr-fcn.cc libinterp/octave-value/ov-usr-fcn.h
diffstat 3 files changed, 30 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/corefcn/symscope.h	Sun Nov 19 16:01:05 2017 -0500
+++ b/libinterp/corefcn/symscope.h	Sun Nov 19 21:17:25 2017 -0500
@@ -525,6 +525,21 @@
 
     void mark_subfunctions_in_scope_as_private (const std::string& class_name);
 
+    bool has_subfunctions (void) const
+    {
+      return ! m_subfunction_names.empty ();
+    }
+
+    void stash_subfunction_names (const std::list<std::string>& names)
+    {
+      m_subfunction_names = names;
+    }
+
+    std::list<std::string> subfunction_names (void) const
+    {
+      return m_subfunction_names;
+    }
+
     std::list<workspace_element> workspace_info (void) const;
 
     octave_value dump (void) const;
@@ -562,6 +577,10 @@
     // Map from symbol names to subfunctions.
     std::map<std::string, octave_value> m_subfunctions;
 
+    // The list of subfunctions (if any) in the order they appear in
+    // the function file.
+    std::list<std::string> m_subfunction_names;
+
     // The associated user code (may be null).
     octave_user_function *m_fcn;
 
--- a/libinterp/octave-value/ov-usr-fcn.cc	Sun Nov 19 16:01:05 2017 -0500
+++ b/libinterp/octave-value/ov-usr-fcn.cc	Sun Nov 19 21:17:25 2017 -0500
@@ -460,14 +460,19 @@
 bool
 octave_user_function::has_subfunctions (void) const
 {
-  return ! subfcn_names.empty ();
+  return m_scope->has_subfunctions ();
 }
 
 void
-octave_user_function::stash_subfunction_names
-  (const std::list<std::string>& names)
+octave_user_function::stash_subfunction_names (const std::list<std::string>& names)
 {
-  subfcn_names = names;
+  m_scope->stash_subfunction_names (names);
+}
+
+std::list<std::string>
+octave_user_function::subfunction_names (void) const
+{
+  return m_scope->subfunction_names ();
 }
 
 octave_value_list
--- a/libinterp/octave-value/ov-usr-fcn.h	Sun Nov 19 16:01:05 2017 -0500
+++ b/libinterp/octave-value/ov-usr-fcn.h	Sun Nov 19 21:17:25 2017 -0500
@@ -311,10 +311,7 @@
 
   void stash_subfunction_names (const std::list<std::string>& names);
 
-  std::list<std::string> subfunction_names (void) const
-  {
-    return subfcn_names;
-  }
+  std::list<std::string> subfunction_names (void) const;
 
   octave_value_list all_va_args (const octave_value_list& args);
 
@@ -447,10 +444,6 @@
   // The name of the parent function, if any.
   std::string parent_name;
 
-  // The list of subfunctions (if any) in the order they appear in the
-  // file.
-  std::list<std::string> subfcn_names;
-
   // The time the file was parsed.
   octave::sys::time t_parsed;
 
@@ -469,7 +462,7 @@
   // The number of arguments that have names.
   int num_named_args;
 
-  // TRUE means this subfunction of a primary function.
+  // TRUE means this is a subfunction of a primary function.
   bool subfunction;
 
   // TRUE means this is an inline function.