changeset 10926:f687bd17ce21

fix field assignment from private class methods
author Jaroslav Hajek <highegg@gmail.com>
date Tue, 31 Aug 2010 08:04:05 +0200
parents 2f9de135e7f9
children a9e9659e1dca
files src/ChangeLog src/ov-class.cc src/ov-class.h
diffstat 3 files changed, 17 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Mon Aug 30 19:03:25 2010 -0400
+++ b/src/ChangeLog	Tue Aug 31 08:04:05 2010 +0200
@@ -1,3 +1,9 @@
+2010-08-31  Jaroslav Hajek  <highegg@gmail.com>
+
+	* ov-class.cc (get_current_method_class): Make it an octave_class
+	method. Return class_name as default.
+	(octave_class::dotref): Error on zero return value.
+
 2010-08-30  Ben Abbott <bpabbott@mac.com>
 
 	* gl-render.cc: Matlab compatible markers for the OpenGL.
--- a/src/ov-class.cc	Mon Aug 30 19:03:25 2010 -0400
+++ b/src/ov-class.cc	Tue Aug 31 08:04:05 2010 +0200
@@ -116,10 +116,10 @@
     }
 }
 
-static std::string
-get_current_method_class (void)
+std::string
+octave_class::get_current_method_class (void)
 {
-  std::string retval;
+  std::string retval = class_name ();
 
   octave_function *fcn = octave_call_stack::current ();
 
@@ -256,12 +256,15 @@
   // Find the class in which this method resides before attempting to access
   // the requested field.
 
-  octave_base_value *obvp
-    = method_class.empty () ? 0 : find_parent_class (method_class);
+  octave_base_value *obvp = find_parent_class (method_class);
 
-  octave_map my_map;
+  if (obvp == 0)
+    {
+      error ("malformed class");
+      return retval;
+    }
 
-  my_map = obvp ? obvp->map_value () : map;
+  octave_map my_map = (obvp == this) ? obvp->map_value () : map;
 
   std::string nm = idx(0).string_value ();
 
--- a/src/ov-class.h	Mon Aug 30 19:03:25 2010 -0400
+++ b/src/ov-class.h	Tue Aug 31 08:04:05 2010 +0200
@@ -200,6 +200,7 @@
   std::list<std::string> parent_list;
 
   bool in_class_method (void);
+  std::string get_current_method_class (void);
 
   int obsolete_copies;