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/20 06:23:39 UTC
[lucy-commits] svn commit: r1072500 - in /incubator/lucy/trunk/clownfish: lib/Clownfish.xs
lib/Clownfish/Class.pm src/CFCClass.c src/CFCClass.h
Author: marvin
Date: Sun Feb 20 05:23:39 2011
New Revision: 1072500
URL: http://svn.apache.org/viewvc?rev=1072500&view=rev
Log:
Move more CFCClass member vars from Perl to C.
Modified:
incubator/lucy/trunk/clownfish/lib/Clownfish.xs
incubator/lucy/trunk/clownfish/lib/Clownfish/Class.pm
incubator/lucy/trunk/clownfish/src/CFCClass.c
incubator/lucy/trunk/clownfish/src/CFCClass.h
Modified: incubator/lucy/trunk/clownfish/lib/Clownfish.xs
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/lib/Clownfish.xs?rev=1072500&r1=1072499&r2=1072500&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/lib/Clownfish.xs (original)
+++ incubator/lucy/trunk/clownfish/lib/Clownfish.xs Sun Feb 20 05:23:39 2011
@@ -112,10 +112,22 @@ PPCODE:
CFCClass_destroy(self);
void
+append_autocode(self, autocode)
+ CFCClass *self;
+ const char *autocode;
+PPCODE:
+ CFCClass_append_autocode(self, autocode);
+
+void
_set_or_get(self, ...)
CFCClass *self;
ALIAS:
- get_cnick = 2
+ get_cnick = 2
+ _set_tree_grown = 3
+ _tree_grown = 4
+ set_parent = 5
+ get_parent = 6
+ get_autocode = 8
PPCODE:
{
START_SET_OR_GET_SWITCH
@@ -124,6 +136,35 @@ PPCODE:
retval = newSVpvn(value, strlen(value));
}
break;
+ case 3:
+ CFCClass_set_tree_grown(self, !!SvTRUE(ST(1)));
+ break;
+ case 4:
+ retval = newSViv(CFCClass_tree_grown(self));
+ break;
+ case 5: {
+ CFCClass *parent = NULL;
+ if ( SvOK(ST(1))
+ && sv_derived_from(ST(1), "Clownfish::Class")
+ ) {
+ IV objint = SvIV((SV*)SvRV(ST(1)));
+ parent = INT2PTR(CFCClass*, objint);
+ }
+ CFCClass_set_parent(self, parent);
+ break;
+ }
+ case 6: {
+ CFCClass *parent = CFCClass_get_parent(self);
+ retval = parent
+ ? newRV((SV*)CFCBase_get_perl_obj((CFCBase*)parent))
+ : newSV(0);
+ break;
+ }
+ case 8: {
+ const char *value = CFCClass_get_autocode(self);
+ retval = newSVpvn(value, strlen(value));
+ }
+ break;
END_SET_OR_GET_SWITCH
}
Modified: incubator/lucy/trunk/clownfish/lib/Clownfish/Class.pm
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/lib/Clownfish/Class.pm?rev=1072500&r1=1072499&r2=1072500&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/lib/Clownfish/Class.pm (original)
+++ incubator/lucy/trunk/clownfish/lib/Clownfish/Class.pm Sun Feb 20 05:23:39 2011
@@ -35,15 +35,12 @@ our %struct_sym;
our %parent_class_name;
our %source_class;
our %docucomment;
-our %parent;
our %children;
-our %autocode;
our %inert;
our %final;
our %attributes;
our %meth_by_name;
our %func_by_name;
-our %tree_grown;
our %functions;
our %methods;
our %member_vars;
@@ -172,9 +169,6 @@ sub create {
$source_class{$self} = $source_class;
$docucomment{$self} = $docucomment;
$children{$self} = [];
- $parent{$self} = undef;
- $autocode{$self} = '';
- $tree_grown{$self} = 0;
$inert{$self} = $inert;
$final{$self} = $final;
$attributes{$self} = $attributes;
@@ -205,15 +199,12 @@ sub DESTROY {
delete $parent_class_name{$self};
delete $source_class{$self};
delete $docucomment{$self};
- delete $parent{$self};
delete $children{$self};
- delete $autocode{$self};
delete $inert{$self};
delete $final{$self};
delete $attributes{$self};
delete $meth_by_name{$self};
delete $func_by_name{$self};
- delete $tree_grown{$self};
delete $functions{$self};
delete $methods{$self};
delete $member_vars{$self};
@@ -244,17 +235,12 @@ sub get_struct_sym { $struct_sym{
sub get_parent_class_name { $parent_class_name{ +shift } }
sub get_source_class { $source_class{ +shift } }
sub get_docucomment { $docucomment{ +shift } }
-sub get_parent { $parent{ +shift } }
-sub get_autocode { $autocode{ +shift } }
sub inert { $inert{ +shift } }
sub final { $final{ +shift } }
sub _get_attributes { $attributes{ +shift } }
sub _meth_by_name { $meth_by_name{ +shift } }
sub _func_by_name { $func_by_name{ +shift } }
-sub _tree_grown { $tree_grown{ +shift } }
-sub set_parent { $parent{ $_[0] } = $_[1] }
-sub _set_tree_grown { $tree_grown{ $_[0] } = $_[1] }
sub _set_methods { $methods{ $_[0] } = $_[1] }
sub full_struct_sym { $_[0]->get_prefix . $_[0]->get_struct_sym }
@@ -262,8 +248,6 @@ sub short_vtable_var { uc( shift->get_st
sub full_vtable_var { $_[0]->get_PREFIX . $_[0]->short_vtable_var }
sub full_vtable_type { shift->full_vtable_var . '_VT' }
-sub append_autocode { $autocode{ $_[0] } .= $_[1] }
-
sub functions { $functions{ +shift } }
sub methods { $methods{ +shift } }
sub member_vars { $member_vars{ +shift } }
Modified: incubator/lucy/trunk/clownfish/src/CFCClass.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCClass.c?rev=1072500&r1=1072499&r2=1072500&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCClass.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCClass.c Sun Feb 20 05:23:39 2011
@@ -33,6 +33,9 @@
struct CFCClass {
CFCSymbol symbol;
+ int tree_grown;
+ struct CFCClass *parent;
+ char *autocode;
};
CFCClass*
@@ -54,12 +57,17 @@ CFCClass_init(CFCClass *self, struct CFC
{
CFCSymbol_init((CFCSymbol*)self, parcel, exposure, class_name,
class_cnick, micro_sym);
+ self->parent = NULL;
+ self->tree_grown = false;
+ self->autocode = (char*)calloc(1, sizeof(char));
return self;
}
void
CFCClass_destroy(CFCClass *self)
{
+ CFCBase_decref((CFCBase*)self->parent);
+ free(self->autocode);
CFCSymbol_destroy((CFCSymbol*)self);
}
@@ -69,3 +77,43 @@ CFCClass_get_cnick(CFCClass *self)
return CFCSymbol_get_class_cnick((CFCSymbol*)self);
}
+void
+CFCClass_set_tree_grown(CFCClass *self, int tree_grown)
+{
+ self->tree_grown = !!tree_grown;
+}
+
+int
+CFCClass_tree_grown(CFCClass *self)
+{
+ return self->tree_grown;
+}
+
+void
+CFCClass_set_parent(CFCClass *self, CFCClass *parent)
+{
+ CFCBase_decref((CFCBase*)self->parent);
+ self->parent = (CFCClass*)CFCBase_incref((CFCBase*)parent);
+}
+
+CFCClass*
+CFCClass_get_parent(CFCClass *self)
+{
+ return self->parent;
+}
+
+void
+CFCClass_append_autocode(CFCClass *self, const char *autocode)
+{
+ size_t size = strlen(self->autocode) + strlen(autocode) + 1;
+ self->autocode = (char*)realloc(self->autocode, size);
+ if (!self->autocode) { croak("realloc failed"); }
+ strcat(self->autocode, autocode);
+}
+
+const char*
+CFCClass_get_autocode(CFCClass *self)
+{
+ return self->autocode;
+}
+
Modified: incubator/lucy/trunk/clownfish/src/CFCClass.h
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCClass.h?rev=1072500&r1=1072499&r2=1072500&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCClass.h (original)
+++ incubator/lucy/trunk/clownfish/src/CFCClass.h Sun Feb 20 05:23:39 2011
@@ -35,5 +35,23 @@ CFCClass_destroy(CFCClass *self);
const char*
CFCClass_get_cnick(CFCClass *self);
+void
+CFCClass_set_tree_grown(CFCClass *self, int tree_grown);
+
+int
+CFCClass_tree_grown(CFCClass *self);
+
+void
+CFCClass_set_parent(CFCClass *self, CFCClass *parent);
+
+CFCClass*
+CFCClass_get_parent(CFCClass *self);
+
+void
+CFCClass_append_autocode(CFCClass *self, const char *autocode);
+
+const char*
+CFCClass_get_autocode(CFCClass *self);
+
#endif /* H_CFCCLASS */