Mercurial > octave-antonio
diff libinterp/parse-tree/oct-parse.in.yy @ 18263:b5be1a2aa5ab
Initial implementation for classdef methods in separate files.
* libinterp/octave-value/ov-classdef.h (cdef_class::make_meta_class):
New argument to tell whether the class is loaded from a @-folder.
(cdef_method::cdef_method_rep::dispatch_type): New member used for
external methods.
(cdef_method::cdef_method_rep::cdef_method_rep): Initialize it.
(cdef_method::cdef_method_rep::is_external,
cdef_method::cdef_method_rep::mark_as_external): New methods, use it.
(cdef_method::is_external, cdef_method::mark_as_external): Likewise.
* libinterp/octave-value/ov-classdef.cc (is_dummy_method): New static
method.
(make_method): Use it to initialize "external" state of created method.
(cdef_class::make_meta_class): New argument to know whether we're
loading from a @-folder. Scan existing methods from load-path and
create corresponding method entries in the class definition.
(cdef_method::cdef_method_rep::check_method): Load external method if
required.
(cdef_method::cdef_method_rep::execute): Check error_state after calling
check_method.
* libinterp/parse-tree/pt-classdef.h (tree_classdef::make_meta_class):
New argument to tell whether the class is loaded from a @-folder.
* libinterp/parse-tree/pt-classdef.cc (tree_classdef::make_meta_class):
Likewise. Pass new argument to cdef_class::make_meta_class.
* libinterp/parse-tree/oct-parse.in.yy (parse_fcn_file): Pass new
is_at_folder argument.
author | Michael Goffioul <michael.goffioul@gmail.com> |
---|---|
date | Sun, 12 Jan 2014 15:54:44 -0500 |
parents | 69990d5edcc2 |
children | b0e8cc676396 |
line wrap: on
line diff
--- a/libinterp/parse-tree/oct-parse.in.yy Sun Jan 12 15:54:43 2014 -0500 +++ b/libinterp/parse-tree/oct-parse.in.yy Sun Jan 12 15:54:44 2014 -0500 @@ -3841,7 +3841,10 @@ if (fcn_ptr) panic_impossible (); - fcn_ptr = parser.classdef_object->make_meta_class (); + bool is_at_folder = ! dispatch_type.empty (); + + fcn_ptr = + parser.classdef_object->make_meta_class (is_at_folder); } else if (fcn_ptr) {