You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by ma...@apache.org on 2011/02/27 21:38:01 UTC
[lucy-commits] svn commit: r1075140 -
/incubator/lucy/trunk/clownfish/lib/Clownfish/Dumpable.pm
Author: marvin
Date: Sun Feb 27 20:38:01 2011
New Revision: 1075140
URL: http://svn.apache.org/viewvc?rev=1075140&view=rev
Log:
Change Clownfish::Dumpable to use techniques which will be easier to port to
C, and also easier to adapt for a future multi-parcel environment.
Modified:
incubator/lucy/trunk/clownfish/lib/Clownfish/Dumpable.pm
Modified: incubator/lucy/trunk/clownfish/lib/Clownfish/Dumpable.pm
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/lib/Clownfish/Dumpable.pm?rev=1075140&r1=1075139&r2=1075140&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/lib/Clownfish/Dumpable.pm (original)
+++ incubator/lucy/trunk/clownfish/lib/Clownfish/Dumpable.pm Sun Feb 27 20:38:01 2011
@@ -54,23 +54,25 @@ sub _add_dump_method {
$class->add_method($method);
my $full_func_sym = $method->full_func_sym;
my $full_struct = $class->full_struct_sym;
- my $autocode;
my @members;
my $parent = $class->get_parent;
if ( $parent and $parent->has_attribute('dumpable') ) {
- my $super_dump = 'lucy_' . $parent->get_cnick . '_dump';
- my $super_type = $parent->full_struct_sym;
- $autocode = <<END_STUFF;
+ my $vtable_var = $class->full_vtable_var;
+ my $typedef = $method->full_typedef;
+ my $cnick = $class->get_cnick;
+ my $autocode = <<END_STUFF;
cfish_Obj*
$full_func_sym($full_struct *self)
{
- cfish_Hash *dump = (cfish_Hash*)$super_dump(($super_type*)self);
+ $typedef super_dump = ($typedef)SUPER_METHOD($vtable_var, $cnick, Dump);
+ cfish_Hash *dump = (cfish_Hash*)super_dump(self);
END_STUFF
+ $class->append_autocode($autocode);
@members = @{ $class->novel_member_vars };
}
else {
- $autocode = <<END_STUFF;
+ my $autocode = <<END_STUFF;
cfish_Obj*
$full_func_sym($full_struct *self)
{
@@ -78,16 +80,16 @@ $full_func_sym($full_struct *self)
Cfish_Hash_Store_Str(dump, "_class", 6,
(cfish_Obj*)Cfish_CB_Clone(Cfish_Obj_Get_Class_Name((cfish_Obj*)self)));
END_STUFF
+ $class->append_autocode($autocode);
@members = @{ $class->member_vars };
shift @members; # skip self->vtable
shift @members; # skip refcount self->ref
}
for my $member_var (@members) {
- $autocode .= _process_dump_member($member_var);
+ $class->append_autocode( _process_dump_member($member_var) );
}
- $autocode .= " return (cfish_Obj*)dump;\n}\n\n";
- $class->append_autocode($autocode);
+ $class->append_autocode(" return (cfish_Obj*)dump;\n}\n\n");
}
sub _add_load_method {
@@ -96,26 +98,26 @@ sub _add_load_method {
$class->add_method($method);
my $full_func_sym = $method->full_func_sym;
my $full_struct = $class->full_struct_sym;
- my $autocode;
my @members;
my $parent = $class->get_parent;
if ( $parent and $parent->has_attribute('dumpable') ) {
- my $super_load = 'lucy_' . $parent->get_cnick . '_load';
- my $super_type = $parent->full_struct_sym;
- $autocode = <<END_STUFF;
+ my $vtable_var = $class->full_vtable_var;
+ my $typedef = $method->full_typedef;
+ my $cnick = $class->get_cnick;
+ my $autocode = <<END_STUFF;
cfish_Obj*
$full_func_sym($full_struct *self, cfish_Obj *dump)
{
cfish_Hash *source = (cfish_Hash*)CFISH_CERTIFY(dump, CFISH_HASH);
- $full_struct *loaded
- = ($full_struct*)$super_load(($super_type*)self, dump);
- CHY_UNUSED_VAR(self);
+ $typedef super_load = ($typedef)SUPER_METHOD($vtable_var, $cnick, Load);
+ $full_struct *loaded = ($full_struct*)super_load(self, dump);
END_STUFF
+ $class->append_autocode($autocode);
@members = @{ $class->novel_member_vars };
}
else {
- $autocode = <<END_STUFF;
+ my $autocode = <<END_STUFF;
cfish_Obj*
$full_func_sym($full_struct *self, cfish_Obj *dump)
{
@@ -126,16 +128,16 @@ $full_func_sym($full_struct *self, cfish
$full_struct *loaded = ($full_struct*)Cfish_VTable_Make_Obj(vtable);
CHY_UNUSED_VAR(self);
END_STUFF
+ $class->append_autocode($autocode);
@members = @{ $class->member_vars };
shift @members; # skip self->vtable
shift @members; # skip refcount self->ref
}
for my $member_var (@members) {
- $autocode .= _process_load_member($member_var);
+ $class->append_autocode( _process_load_member($member_var) );
}
- $autocode .= " return (cfish_Obj*)loaded;\n}\n\n";
- $class->append_autocode($autocode);
+ $class->append_autocode(" return (cfish_Obj*)loaded;\n}\n\n");
}
1;