diff src/ov-class.cc @ 12178:a71c1aa9823e

fix construction of class exemplars
author John W. Eaton <jwe@octave.org>
date Thu, 27 Jan 2011 04:22:53 -0500
parents d08901c05c1b
children 7a5aacf65f81
line wrap: on
line diff
--- a/src/ov-class.cc	Thu Jan 27 00:15:40 2011 -0500
+++ b/src/ov-class.cc	Thu Jan 27 04:22:53 2011 -0500
@@ -1068,9 +1068,25 @@
     {
       octave_value ctor = symbol_table::find_method (c_name, c_name);
 
-      if (ctor.is_defined ())
+      bool have_ctor = false;
+
+      if (ctor.is_defined () && ctor.is_function ())
         {
-          octave_value_list result = feval (ctor, 1);
+          octave_function *fcn = ctor.function_value ();
+
+          if (fcn && fcn->is_class_constructor (c_name))
+            have_ctor = true;
+
+          // Something has gone terribly wrong if
+          // symbol_table::find_method (c_name, c_name) does not return
+          // a class constructor for the class c_name...
+          assert (have_ctor);
+        }
+
+      if (have_ctor)
+        {
+          octave_value_list result
+            = ctor.do_multi_index_op (1, octave_value_list ());
 
           if (result.length () == 1)
             retval = true;