Mercurial > hg > octave-lyh
diff src/ov-class.cc @ 9767:0df32e0b2074
fix base class field assignment
author | Jaroslav Hajek <highegg@gmail.com> |
---|---|
date | Mon, 02 Nov 2009 10:28:57 +0100 |
parents | 318e0cdd31bd |
children | fbf15a0f30f0 |
line wrap: on
line diff
--- a/src/ov-class.cc +++ b/src/ov-class.cc @@ -794,7 +794,7 @@ std::string method_class = get_current_method_class (); - octave_base_value *obvp = find_parent_class (method_class); + octave_base_value *obvp = unique_parent_class (method_class); if (obvp) { @@ -930,6 +930,44 @@ return retval; } +octave_base_value * +octave_class::unique_parent_class (const std::string& parent_class_name) +{ + octave_base_value* retval = 0; + + if (parent_class_name == class_name ()) + retval = this; + else + { + for (std::list<std::string>::iterator pit = parent_list.begin (); + pit != parent_list.end (); + pit++) + { + Octave_map::iterator smap = map.seek (*pit); + + Cell& tmp = smap->second; + + octave_value& vtmp = tmp(0); + + octave_base_value *obvp = vtmp.internal_rep (); + + // Use find_parent_class first to avoid uniquifying if not necessary. + retval = obvp->find_parent_class (parent_class_name); + + if (retval) + { + vtmp.make_unique (); + obvp = vtmp.internal_rep (); + retval = obvp->unique_parent_class (parent_class_name); + + break; + } + } + } + + return retval; +} + void octave_class::print (std::ostream& os, bool) const {