Mercurial > octave-libgccjit
view .hgsubstate @ 15909:b8bff84022d6 classdef
Use strong reference between objects and their class.
* libinterp/octave-value/ov-classdef.h (cdef_object_rep::cname): Remove member.
(cdef_object_rep::cdef_object_rep (void),
cdef_object_rep::cdef_object_rep (cdef_object_rep)): Do not initialize it.
(cdef_object_rep::cdef_object_rep (std::string)): Remove constructor.
(cdef_object_rep::set_class_name): Remove method.
(cdef_object_rep::grip_invalid_object): New private method.
(cdef_object_rep::set_class, cdef_object_rep::is_class,
cdef_object_rep::is_property, cdef_object_rep::is_method,
cdef_object_rep::is_package): New methods.
(cdef_object_rep::map, cdef_object_rep::ctor_list): Move members to
cdef_object_scalar.
(cdef_object_rep::put, cdef_object_rep::get, cdef_object_rep::subsref,
cdef_object_rep::subsasgn, cdef_object_rep::mark_for_construction,
cdef_object_rep::is_constructed_for, cdef_object_rep::mark_as_constructed,
cdef_object_rep::is_partially_constructed_for, cdef_object_rep::is_constructed):
Move implementation to cdef_object_scalar.
(cdef_object_rep::is_constructed_for, cdef_object_rep::mark_as_constructed,
cdef_object_rep::is_partially_constructed_for): Change signature, use cdef_class
argument instead of std::string.
(cdef_object_rep::class_name): Use get_class () and move inline definition
after cdef_class declaration.
(cdef_object::set_class_name): Remove method.
(cdef_object::is_class, cdef_object::is_property, cdef_object::is_method,
cdef_object::is_package): New methods.
(cdef_object::is_constructed_for, cdef_object::mark_as_constructed,
cdef_object::is_partially_constructed_for): Change signature, use cdef_class
instead of std::string.
(class cdef_object_base, class cdef_object_scalar): New classes.
(class handle_cdef_object, class value_cdef_object): Inherits from
cdef_object_scalar.
(handle_cdef_object::handle_cdef_object (std::string)): Remove constructor.
(value_cdef_object::value_cdef_object (std::string)): Likewise.
(value_cdef_object::value_cdef_object (value_cdef_object)): Implement copy
constructor.
(value_cdef_object::clone): Use it.
(cdef_class::cdef_class_rep::cdef_class_rep): Remove first string argument.
(cdef_class::cdef_class_rep::is_class, cdef_class::cdef_class_rep::set_name,
cdef_class::cdef_class_rep::wrap): New methods.
(cdef_class::cdef_class_rep::implicit_ctor_list): Change type to
std::list<cdef_class>.
(cdef_class::cdef_class (std::string): Remove constructor.
(cdef_class::cdef_class (std::list<cdef_class>)): Use string argument as
the class name.
(cdef_class::cdef_class (cdef_object), cdef_class::operator= (cdef_object)):
Use is_class method.
(cdef_class::_meta_class, cdef_class::_meta_property, cdef_class::_meta_method,
cdef_class::_meta_package): New static members.
(cdef_class::meta_class, cdef_class::meta_property, cdef_class::meta_method,
cdef_class::meta_package): New static methods.
(operator< (cdef_cass, cdef_class)): New function.
(cdef_property::cdef_property_rep::cdef_property_rep): Remove first argument
string.
(cdef_property::cdef_property_rep::is_property,
cdef_property::cdef_property_rep::get_name,
cdef_property::cdef_property_rep::set_name,
cdef_property::cdef_property_rep::is_constant): New methods.
(cdef_property::get_name, cdef_property::is_constant): Use them.
(cdef_property::cdef_property (std::string)): Use string argument as property
name.
(cdef_property::cdef_property (cdef_object)): Use is_property method.
(cdef_method::cdef_method_rep::cdef_method_rep): Remove first argument
string.
(cdef_method::cdef_method_rep::is_method,
cdef_method::cdef_method_rep::get_name, cdef_method::cdef_method_rep::set_name,
cdef_method::cdef_method_rep::is_static): New methods.
(cdef_method::get_name, cdef_method::is_static): Use them.
(cdef_method::cdef_method (std::string)): Use string argument as method name.
(cdef_method::cdef_method (cdef_object)): Use is_method method.
(cdef_package::cdef_package_rep::cdef_package_rep): Remove first argument
string.
(cdef_package::cdef_package_rep::is_package,
cdef_package::cdef_package_rep::get_name,
cdef_package::cdef_package_rep::set_name): New methods.
(cdef_package::get_name): Likewise.
(cdef_package::cdef_package (std::string)): Use string argument as package name.
(cdef_package::cdef_package (cdef_object)): Use is_package method.
(cdef_package::_meta): New static member.
(cdef_package::meta): New static method.
* libinterp/octave-value/ov-classdef.cc (lookup_class (cdef_class),
lookup_class (octave_value)): New static function overloads.
(lookup_classes): Change argument name to reflect the fact we're using now a
list of cdef_class objects, not a list of names.
(make_class, make_property, make_method, make_package): Use name as constructor
argument. Set object class.
(cdef_object_rep::get_class): Move implementation to header.
(cdef_object_rep::subsref, cdef_object_rep::subsasgn,
cdef_object_rep::mark_for_construction): Move implementation to
cdef_object_scalar.
(cdef_object_scalar::is_constructed_for,
cdef_object_scalar::is_partially_constructed_for): Moved from cdef_object_rep.
(handle_cdef_object::~handle_cdef_object,
value_cdef_object::~value_cdef_object): Do not use cname.
(cdef_class::cdef_class_rep::cdef_class_rep (std::list<cdef_class>)):
Remove first string argument. Keep strong references to cdef_class superclass
objects.
(cdef_class::cdef_class_rep::find_method,
cdef_class::cdef_class_rep::find_methods,
cdef_class::cdef_class_rep::find_property,
cdef_class::cdef_class_rep::find_properties,
cdef_class::cdef_class_rep::find_names,
cdef_class::cdef_class_rep::delete_object): Superclasses are now strong
references for cdef_class objects.
(ctor_analyzer::available_ctor_list): Remove member.
(ctor_analyzer::ctor_analyzer): Do not use it.
(ctor_analyzer::ctor_list): Change type to std::list<cdef_class>.
(ctor_analyzer::visit_funcall): Use it. Do not produce any error.
(cdef_class::cdef_class_rep::install_method): Use strong references to cdef_class
superclass objects.
(cdef_class::cdef_class_rep::run_constructor): Likewise.
(cdef_class::cdef_class_rep::construct): Use strong reference to cdef_class
object.
(cdef_property::cdef_property_rep::get_value,
cdef_property::cdef_property_rep::set_value): Likewise.
(cdef_class::_meta_class, cdef_class::_meta_property,
cdef_class::_meta_method, cdef_class::_meta_package): Initialize static members.
(cdef_package::_meta): Likewise.
(install_classdef): Bootstrap meta classes with strong references to cdef_class.
Assign cdef_class and cdef_package static members.
author | Michael Goffioul <michael.goffioul@gmail.com> |
---|---|
date | Sun, 06 Jan 2013 12:19:16 -0500 |
parents | 44f30dcd87e0 |
children | d2774d202323 |