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/12/15 07:38:27 UTC

[lucy-commits] svn commit: r1214630 - /incubator/lucy/trunk/clownfish/src/

Author: marvin
Date: Thu Dec 15 06:38:26 2011
New Revision: 1214630

URL: http://svn.apache.org/viewvc?rev=1214630&view=rev
Log:
Use a basic metaclass struct for CFC objects.

In order to get rid of the Perl objects currently at the center of CFC's core,
we need to implement polymorphic destructors in our C code.  We may as well
use metaclass/vtable structs to store shared info like destructor pointers,
class names, etc.

Modified:
    incubator/lucy/trunk/clownfish/src/CFCBase.c
    incubator/lucy/trunk/clownfish/src/CFCBase.h
    incubator/lucy/trunk/clownfish/src/CFCBindClass.c
    incubator/lucy/trunk/clownfish/src/CFCBindCore.c
    incubator/lucy/trunk/clownfish/src/CFCCBlock.c
    incubator/lucy/trunk/clownfish/src/CFCClass.c
    incubator/lucy/trunk/clownfish/src/CFCDocuComment.c
    incubator/lucy/trunk/clownfish/src/CFCDumpable.c
    incubator/lucy/trunk/clownfish/src/CFCFile.c
    incubator/lucy/trunk/clownfish/src/CFCFunction.c
    incubator/lucy/trunk/clownfish/src/CFCHierarchy.c
    incubator/lucy/trunk/clownfish/src/CFCMemPool.c
    incubator/lucy/trunk/clownfish/src/CFCMethod.c
    incubator/lucy/trunk/clownfish/src/CFCParamList.c
    incubator/lucy/trunk/clownfish/src/CFCParcel.c
    incubator/lucy/trunk/clownfish/src/CFCParser.c
    incubator/lucy/trunk/clownfish/src/CFCPerlClass.c
    incubator/lucy/trunk/clownfish/src/CFCPerlConstructor.c
    incubator/lucy/trunk/clownfish/src/CFCPerlMethod.c
    incubator/lucy/trunk/clownfish/src/CFCPerlPod.c
    incubator/lucy/trunk/clownfish/src/CFCPerlSub.c
    incubator/lucy/trunk/clownfish/src/CFCPerlSub.h
    incubator/lucy/trunk/clownfish/src/CFCSymbol.c
    incubator/lucy/trunk/clownfish/src/CFCType.c
    incubator/lucy/trunk/clownfish/src/CFCVariable.c

Modified: incubator/lucy/trunk/clownfish/src/CFCBase.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCBase.c?rev=1214630&r1=1214629&r2=1214630&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCBase.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCBase.c Thu Dec 15 06:38:26 2011
@@ -25,16 +25,15 @@
 #include "CFCUtil.h"
 
 CFCBase*
-CFCBase_allocate(size_t size, const char *klass) {
-    CFCBase *self = (CFCBase*)CALLOCATE(size, 1);
-    self->perl_obj = CFCUtil_make_perl_obj(self, klass);
-    self->cfc_class = CFCUtil_strdup(klass);
+CFCBase_allocate(const CFCMeta *meta) {
+    CFCBase *self = (CFCBase*)CALLOCATE(meta->obj_alloc_size, 1);
+    self->perl_obj = CFCUtil_make_perl_obj(self, meta->cfc_class);
+    self->meta = meta;
     return self;
 }
 
 void
 CFCBase_destroy(CFCBase *self) {
-    FREEMEM(self->cfc_class);
     FREEMEM(self);
 }
 
@@ -70,7 +69,7 @@ CFCBase_get_perl_obj(CFCBase *self) {
 
 const char*
 CFCBase_get_cfc_class(CFCBase *self) {
-    return self->cfc_class;
+    return self->meta->cfc_class;
 }
 
 

Modified: incubator/lucy/trunk/clownfish/src/CFCBase.h
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCBase.h?rev=1214630&r1=1214629&r2=1214630&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCBase.h (original)
+++ incubator/lucy/trunk/clownfish/src/CFCBase.h Thu Dec 15 06:38:26 2011
@@ -24,13 +24,20 @@ extern "C" {
 #include <stddef.h>
 
 typedef struct CFCBase CFCBase;
+typedef struct CFCMeta CFCMeta;
+typedef void (*CFCBase_destroy_t)(CFCBase *self);
 
 #ifdef CFC_NEED_BASE_STRUCT_DEF
 struct CFCBase {
-    char *cfc_class;
+    const CFCMeta *meta;
     void *perl_obj;
 };
 #endif
+struct CFCMeta {
+    char *cfc_class;
+    size_t obj_alloc_size;
+    CFCBase_destroy_t destroy;
+};
 
 /** Allocate a new CFC object.
  *
@@ -38,7 +45,7 @@ struct CFCBase {
  * @param klass Class name.
  */
 CFCBase*
-CFCBase_allocate(size_t size, const char *klass);
+CFCBase_allocate(const CFCMeta *meta);
 
 /** Clean up CFCBase member variables as necessary and free the object blob
  * itself.

Modified: incubator/lucy/trunk/clownfish/src/CFCBindClass.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCBindClass.c?rev=1214630&r1=1214629&r2=1214630&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCBindClass.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCBindClass.c Thu Dec 15 06:38:26 2011
@@ -92,11 +92,15 @@ S_vt_singleton_def(CFCBindClass *self);
 static char*
 S_short_names(CFCBindClass *self);
 
+const static CFCMeta CFCBINDCLASS_META = {
+    "Clownfish::Binding::Core::Class", 
+    sizeof(CFCBindClass),
+    (CFCBase_destroy_t)CFCBindClass_destroy
+};
+
 CFCBindClass*
 CFCBindClass_new(CFCClass *client) {
-    CFCBindClass *self 
-        = (CFCBindClass*)CFCBase_allocate(sizeof(CFCBindClass),
-                                          "Clownfish::Binding::Core::Class");
+    CFCBindClass *self = (CFCBindClass*)CFCBase_allocate(&CFCBINDCLASS_META);
     return CFCBindClass_init(self, client);
 }
 

Modified: incubator/lucy/trunk/clownfish/src/CFCBindCore.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCBindCore.c?rev=1214630&r1=1214629&r2=1214630&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCBindCore.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCBindCore.c Thu Dec 15 06:38:26 2011
@@ -47,12 +47,16 @@ S_write_parcel_h(CFCBindCore *self);
 static void
 S_write_parcel_c(CFCBindCore *self);
 
+const static CFCMeta CFCBINDCORE_META = {
+    "Clownfish::Binding::Core",
+    sizeof(CFCBindCore),
+    (CFCBase_destroy_t)CFCBindCore_destroy
+};
+
 CFCBindCore*
 CFCBindCore_new(CFCHierarchy *hierarchy, const char *dest, const char *header,
                 const char *footer) {
-    CFCBindCore *self
-        = (CFCBindCore*)CFCBase_allocate(sizeof(CFCBindCore),
-                                         "Clownfish::Binding::Core");
+    CFCBindCore *self = (CFCBindCore*)CFCBase_allocate(&CFCBINDCORE_META);
     return CFCBindCore_init(self, hierarchy, dest, header, footer);
 }
 

Modified: incubator/lucy/trunk/clownfish/src/CFCCBlock.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCCBlock.c?rev=1214630&r1=1214629&r2=1214630&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCCBlock.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCCBlock.c Thu Dec 15 06:38:26 2011
@@ -24,10 +24,15 @@ struct CFCCBlock {
     char *contents;
 };
 
+const static CFCMeta CFCCBLOCK_META = {
+    "Clownfish::CBlock",
+    sizeof(CFCCBlock),
+    (CFCBase_destroy_t)CFCCBlock_destroy
+};
+
 CFCCBlock*
 CFCCBlock_new(const char *contents) {
-    CFCCBlock *self = (CFCCBlock*)CFCBase_allocate(sizeof(CFCCBlock),
-                                                   "Clownfish::CBlock");
+    CFCCBlock *self = (CFCCBlock*)CFCBase_allocate(&CFCCBLOCK_META);
     return CFCCBlock_init(self, contents);
 }
 

Modified: incubator/lucy/trunk/clownfish/src/CFCClass.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCClass.c?rev=1214630&r1=1214629&r2=1214630&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCClass.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCClass.c Thu Dec 15 06:38:26 2011
@@ -102,14 +102,19 @@ S_create_dumpables(CFCClass *self);
 static void
 S_bequeath_methods(CFCClass *self);
 
+const static CFCMeta CFCCLASS_META = {
+    "Clownfish::Class",
+    sizeof(CFCClass),
+    (CFCBase_destroy_t)CFCClass_destroy
+};
+
 CFCClass*
 CFCClass_create(struct CFCParcel *parcel, const char *exposure,
                 const char *class_name, const char *cnick,
                 const char *micro_sym, CFCDocuComment *docucomment,
                 const char *source_class, const char *parent_class_name,
                 int is_final, int is_inert) {
-    CFCClass *self = (CFCClass*)CFCBase_allocate(sizeof(CFCClass),
-                                                 "Clownfish::Class");
+    CFCClass *self = (CFCClass*)CFCBase_allocate(&CFCCLASS_META);
     return CFCClass_do_create(self, parcel, exposure, class_name, cnick,
                               micro_sym, docucomment, source_class,
                               parent_class_name, is_final, is_inert);

Modified: incubator/lucy/trunk/clownfish/src/CFCDocuComment.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCDocuComment.c?rev=1214630&r1=1214629&r2=1214630&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCDocuComment.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCDocuComment.c Thu Dec 15 06:38:26 2011
@@ -78,12 +78,17 @@ S_strip(char *comment) {
     FREEMEM(scratch);
 }
 
+const static CFCMeta CFCDOCUCOMMENT_META = {
+    "Clownfish::DocuComment",
+    sizeof(CFCDocuComment),
+    (CFCBase_destroy_t)CFCDocuComment_destroy
+};
+
 CFCDocuComment*
 CFCDocuComment_parse(const char *raw_text) {
     char *text = CFCUtil_strdup(raw_text);
     CFCDocuComment *self
-        = (CFCDocuComment*)CFCBase_allocate(sizeof(CFCDocuComment),
-                                            "Clownfish::DocuComment");
+        = (CFCDocuComment*)CFCBase_allocate(&CFCDOCUCOMMENT_META);
 
     // Strip whitespace, comment open, close, and left border.
     CFCUtil_trim_whitespace(text);

Modified: incubator/lucy/trunk/clownfish/src/CFCDumpable.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCDumpable.c?rev=1214630&r1=1214629&r2=1214630&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCDumpable.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCDumpable.c Thu Dec 15 06:38:26 2011
@@ -61,10 +61,15 @@ struct CFCDumpable {
     CFCBase base;
 };
 
+const static CFCMeta CFCDUMPABLE_META = {
+    "Clownfish::Dumpable",
+    sizeof(CFCDumpable),
+    (CFCBase_destroy_t)CFCDumpable_destroy
+};
+
 CFCDumpable*
 CFCDumpable_new(void) {
-    CFCDumpable *self = (CFCDumpable*)CFCBase_allocate(sizeof(CFCDumpable),
-                                                       "Clownfish::Dumpable");
+    CFCDumpable *self = (CFCDumpable*)CFCBase_allocate(&CFCDUMPABLE_META);
     return CFCDumpable_init(self);
 }
 

Modified: incubator/lucy/trunk/clownfish/src/CFCFile.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCFile.c?rev=1214630&r1=1214629&r2=1214630&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCFile.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCFile.c Thu Dec 15 06:38:26 2011
@@ -41,11 +41,16 @@ struct CFCFile {
     char *path_part;
 };
 
+const static CFCMeta CFCFILE_META = {
+    "Clownfish::File",
+    sizeof(CFCFile),
+    (CFCBase_destroy_t)CFCFile_destroy
+};
+
 CFCFile*
 CFCFile_new(const char *source_class) {
 
-    CFCFile *self = (CFCFile*)CFCBase_allocate(sizeof(CFCFile),
-                                               "Clownfish::File");
+    CFCFile *self = (CFCFile*)CFCBase_allocate(&CFCFILE_META);
     return CFCFile_init(self, source_class);
 }
 

Modified: incubator/lucy/trunk/clownfish/src/CFCFunction.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCFunction.c?rev=1214630&r1=1214629&r2=1214630&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCFunction.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCFunction.c Thu Dec 15 06:38:26 2011
@@ -30,14 +30,19 @@
 #include "CFCDocuComment.h"
 #include "CFCUtil.h"
 
+const static CFCMeta CFCFUNCTION_META = {
+    "Clownfish::Function",
+    sizeof(CFCFunction),
+    (CFCBase_destroy_t)CFCFunction_destroy
+};
+
 CFCFunction*
 CFCFunction_new(CFCParcel *parcel, const char *exposure,
                 const char *class_name, const char *class_cnick,
                 const char *micro_sym, CFCType *return_type,
                 CFCParamList *param_list, CFCDocuComment *docucomment,
                 int is_inline) {
-    CFCFunction *self = (CFCFunction*)CFCBase_allocate(sizeof(CFCFunction),
-                                                       "Clownfish::Function");
+    CFCFunction *self = (CFCFunction*)CFCBase_allocate(&CFCFUNCTION_META);
     return CFCFunction_init(self, parcel, exposure, class_name, class_cnick,
                             micro_sym, return_type, param_list, docucomment,
                             is_inline);

Modified: incubator/lucy/trunk/clownfish/src/CFCHierarchy.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCHierarchy.c?rev=1214630&r1=1214629&r2=1214630&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCHierarchy.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCHierarchy.c Thu Dec 15 06:38:26 2011
@@ -62,11 +62,15 @@ S_fetch_file(CFCHierarchy *self, const c
 static int
 S_do_propagate_modified(CFCHierarchy *self, CFCClass *klass, int modified);
 
+const static CFCMeta CFCHIERARCHY_META = {
+    "Clownfish::Hierarchy",
+    sizeof(CFCHierarchy),
+    (CFCBase_destroy_t)CFCHierarchy_destroy
+};
+
 CFCHierarchy*
 CFCHierarchy_new(const char *source, const char *dest, CFCParser *parser) {
-    CFCHierarchy *self
-        = (CFCHierarchy*)CFCBase_allocate(sizeof(CFCHierarchy),
-                                          "Clownfish::Hierarchy");
+    CFCHierarchy *self = (CFCHierarchy*)CFCBase_allocate(&CFCHIERARCHY_META);
     return CFCHierarchy_init(self, source, dest, parser);
 }
 

Modified: incubator/lucy/trunk/clownfish/src/CFCMemPool.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCMemPool.c?rev=1214630&r1=1214629&r2=1214630&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCMemPool.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCMemPool.c Thu Dec 15 06:38:26 2011
@@ -30,10 +30,15 @@ struct CFCMemPool {
     char **arenas;
 };
 
+const static CFCMeta CFCMEMPOOL_META = {
+    "Clownfish::MemPool",
+    sizeof(CFCMemPool),
+    (CFCBase_destroy_t)CFCMemPool_destroy
+};
+
 CFCMemPool*
 CFCMemPool_new(size_t arena_size) {
-    CFCMemPool *self = (CFCMemPool*)CFCBase_allocate(sizeof(CFCMemPool),
-                                                     "Clownfish::MemPool");
+    CFCMemPool *self = (CFCMemPool*)CFCBase_allocate(&CFCMEMPOOL_META);
     return CFCMemPool_init(self, arena_size);
 }
 

Modified: incubator/lucy/trunk/clownfish/src/CFCMethod.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCMethod.c?rev=1214630&r1=1214629&r2=1214630&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCMethod.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCMethod.c Thu Dec 15 06:38:26 2011
@@ -48,13 +48,18 @@ struct CFCMethod {
 static void
 S_update_typedefs(CFCMethod *self, const char *short_sym);
 
+const static CFCMeta CFCMETHOD_META = {
+    "Clownfish::Method",
+    sizeof(CFCMethod),
+    (CFCBase_destroy_t)CFCMethod_destroy
+};
+
 CFCMethod*
 CFCMethod_new(CFCParcel *parcel, const char *exposure, const char *class_name,
               const char *class_cnick, const char *macro_sym,
               CFCType *return_type, CFCParamList *param_list,
               CFCDocuComment *docucomment, int is_final, int is_abstract) {
-    CFCMethod *self = (CFCMethod*)CFCBase_allocate(sizeof(CFCMethod),
-                                                   "Clownfish::Method");
+    CFCMethod *self = (CFCMethod*)CFCBase_allocate(&CFCMETHOD_META);
     return CFCMethod_init(self, parcel, exposure, class_name, class_cnick,
                           macro_sym, return_type, param_list, docucomment,
                           is_final, is_abstract);

Modified: incubator/lucy/trunk/clownfish/src/CFCParamList.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCParamList.c?rev=1214630&r1=1214629&r2=1214630&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCParamList.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCParamList.c Thu Dec 15 06:38:26 2011
@@ -37,10 +37,15 @@ struct CFCParamList {
 static void
 S_generate_c_strings(CFCParamList *self);
 
+const static CFCMeta CFCPARAMLIST_META = {
+    "Clownfish::ParamList",
+    sizeof(CFCParamList),
+    (CFCBase_destroy_t)CFCParamList_destroy
+};
+
 CFCParamList*
 CFCParamList_new(int variadic) {
-    CFCParamList *self = (CFCParamList*)CFCBase_allocate(sizeof(CFCParamList),
-                                                         "Clownfish::ParamList");
+    CFCParamList *self = (CFCParamList*)CFCBase_allocate(&CFCPARAMLIST_META);
     return CFCParamList_init(self, variadic);
 }
 

Modified: incubator/lucy/trunk/clownfish/src/CFCParcel.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCParcel.c?rev=1214630&r1=1214629&r2=1214630&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCParcel.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCParcel.c Thu Dec 15 06:38:26 2011
@@ -99,10 +99,15 @@ S_validate_name_or_cnick(const char *ori
     return true;
 }
 
+const static CFCMeta CFCPARCEL_META = {
+    "Clownfish::Parcel",
+    sizeof(CFCParcel),
+    (CFCBase_destroy_t)CFCParcel_destroy
+};
+
 CFCParcel*
 CFCParcel_new(const char *name, const char *cnick) {
-    CFCParcel *self = (CFCParcel*)CFCBase_allocate(sizeof(CFCParcel),
-                                                   "Clownfish::Parcel");
+    CFCParcel *self = (CFCParcel*)CFCBase_allocate(&CFCPARCEL_META);
     return CFCParcel_init(self, name, cnick);
 }
 

Modified: incubator/lucy/trunk/clownfish/src/CFCParser.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCParser.c?rev=1214630&r1=1214629&r2=1214630&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCParser.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCParser.c Thu Dec 15 06:38:26 2011
@@ -43,10 +43,15 @@ struct CFCParser {
     CFCMemPool *pool;
 };
 
+const static CFCMeta CFCPARSER_META = {
+    "Clownfish::Parser",
+    sizeof(CFCParser),
+    (CFCBase_destroy_t)CFCParser_destroy
+};
+
 CFCParser*
 CFCParser_new(void) {
-    CFCParser *self = (CFCParser*)CFCBase_allocate(sizeof(CFCParser),
-                                                   "Clownfish::Parser");
+    CFCParser *self = (CFCParser*)CFCBase_allocate(&CFCPARSER_META);
     return CFCParser_init(self);
 }
 

Modified: incubator/lucy/trunk/clownfish/src/CFCPerlClass.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCPerlClass.c?rev=1214630&r1=1214629&r2=1214630&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCPerlClass.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCPerlClass.c Thu Dec 15 06:38:26 2011
@@ -42,12 +42,16 @@ static CFCPerlClass **registry = NULL;
 static size_t registry_size = 0;
 static size_t registry_cap  = 0;
 
+const static CFCMeta CFCPERLCLASS_META = {
+    "Clownfish::Binding::Perl::Class",
+    sizeof(CFCPerlClass),
+    (CFCBase_destroy_t)CFCPerlClass_destroy
+};
+
 CFCPerlClass*
 CFCPerlClass_new(CFCParcel *parcel, const char *class_name, CFCClass *client, 
                  const char *xs_code, CFCPerlPod *pod_spec) {
-    CFCPerlClass *self
-        = (CFCPerlClass*)CFCBase_allocate(sizeof(CFCPerlClass),
-                                          "Clownfish::Binding::Perl::Class");
+    CFCPerlClass *self = (CFCPerlClass*)CFCBase_allocate(&CFCPERLCLASS_META);
     return CFCPerlClass_init(self, parcel, class_name, client, xs_code,
                              pod_spec);
 }

Modified: incubator/lucy/trunk/clownfish/src/CFCPerlConstructor.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCPerlConstructor.c?rev=1214630&r1=1214629&r2=1214630&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCPerlConstructor.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCPerlConstructor.c Thu Dec 15 06:38:26 2011
@@ -38,11 +38,16 @@ struct CFCPerlConstructor {
     CFCFunction *init_func;
 };
 
+const static CFCMeta CFCPERLCONSTRUCTOR_META = {
+    "Clownfish::Binding::Perl::Constructor",
+    sizeof(CFCPerlConstructor),
+    (CFCBase_destroy_t)CFCPerlConstructor_destroy
+};
+
 CFCPerlConstructor*
 CFCPerlConstructor_new(CFCClass *klass, const char *alias) {
     CFCPerlConstructor *self
-        = (CFCPerlConstructor*)CFCBase_allocate(sizeof(CFCPerlConstructor),
-                                                "Clownfish::Binding::Perl::Constructor");
+        = (CFCPerlConstructor*)CFCBase_allocate(&CFCPERLCONSTRUCTOR_META);
     return CFCPerlConstructor_init(self, klass, alias);
 }
 

Modified: incubator/lucy/trunk/clownfish/src/CFCPerlMethod.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCPerlMethod.c?rev=1214630&r1=1214629&r2=1214630&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCPerlMethod.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCPerlMethod.c Thu Dec 15 06:38:26 2011
@@ -49,11 +49,16 @@ S_xsub_def_labeled_params(CFCPerlMethod 
 static char*
 S_xsub_def_positional_args(CFCPerlMethod *self);
 
+const static CFCMeta CFCPERLMETHOD_META = {
+    "Clownfish::Binding::Perl::Method",
+    sizeof(CFCPerlMethod),
+    (CFCBase_destroy_t)CFCPerlMethod_destroy
+};
+
 CFCPerlMethod*
 CFCPerlMethod_new(CFCMethod *method, const char *alias) {
     CFCPerlMethod *self
-        = (CFCPerlMethod*)CFCBase_allocate(sizeof(CFCPerlMethod),
-                                          "Clownfish::Binding::Perl::Method");
+        = (CFCPerlMethod*)CFCBase_allocate(&CFCPERLMETHOD_META);
     return CFCPerlMethod_init(self, method, alias);
 }
 

Modified: incubator/lucy/trunk/clownfish/src/CFCPerlPod.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCPerlPod.c?rev=1214630&r1=1214629&r2=1214630&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCPerlPod.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCPerlPod.c Thu Dec 15 06:38:26 2011
@@ -50,11 +50,16 @@ struct CFCPerlPod {
     size_t   num_constructors;
 };
 
+const static CFCMeta CFCPERLPOD_META = {
+    "Clownfish::Binding::Perl::Pod",
+    sizeof(CFCPerlPod),
+    (CFCBase_destroy_t)CFCPerlPod_destroy
+};
+
 CFCPerlPod*
 CFCPerlPod_new(const char *synopsis, const char *description) {
     CFCPerlPod *self
-        = (CFCPerlPod*)CFCBase_allocate(sizeof(CFCPerlPod),
-                                        "Clownfish::Binding::Perl::Pod");
+        = (CFCPerlPod*)CFCBase_allocate(&CFCPERLPOD_META);
     return CFCPerlPod_init(self, synopsis, description);
 }
 

Modified: incubator/lucy/trunk/clownfish/src/CFCPerlSub.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCPerlSub.c?rev=1214630&r1=1214629&r2=1214630&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCPerlSub.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCPerlSub.c Thu Dec 15 06:38:26 2011
@@ -31,16 +31,6 @@
 #endif
 
 CFCPerlSub*
-CFCPerlSub_new(const char *klass, CFCParamList *param_list,
-               const char *class_name, const char *alias,
-               int use_labeled_params) {
-    CFCPerlSub *self
-        = (CFCPerlSub*)CFCBase_allocate(sizeof(CFCPerlSub), klass);
-    return CFCPerlSub_init(self, param_list, class_name, alias,
-                           use_labeled_params);
-}
-
-CFCPerlSub*
 CFCPerlSub_init(CFCPerlSub *self, CFCParamList *param_list,
                 const char *class_name, const char *alias,
                 int use_labeled_params) {

Modified: incubator/lucy/trunk/clownfish/src/CFCPerlSub.h
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCPerlSub.h?rev=1214630&r1=1214629&r2=1214630&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCPerlSub.h (original)
+++ incubator/lucy/trunk/clownfish/src/CFCPerlSub.h Thu Dec 15 06:38:26 2011
@@ -40,11 +40,6 @@ struct CFCPerlSub {
 #endif
 
 CFCPerlSub*
-CFCPerlSub_new(const char *klass, struct CFCParamList *param_list,
-               const char *class_name, const char *alias,
-               int use_labeled_params);
-
-CFCPerlSub*
 CFCPerlSub_init(CFCPerlSub *self, struct CFCParamList *param_list,
                 const char *class_name, const char *alias,
                 int use_labeled_params);

Modified: incubator/lucy/trunk/clownfish/src/CFCSymbol.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCSymbol.c?rev=1214630&r1=1214629&r2=1214630&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCSymbol.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCSymbol.c Thu Dec 15 06:38:26 2011
@@ -27,12 +27,17 @@
 #include "CFCParcel.h"
 #include "CFCUtil.h"
 
+const static CFCMeta CFCSYMBOL_META = {
+    "Clownfish::Symbol",
+    sizeof(CFCSymbol),
+    (CFCBase_destroy_t)CFCSymbol_destroy
+};
+
 CFCSymbol*
 CFCSymbol_new(struct CFCParcel *parcel, const char *exposure,
               const char *class_name, const char *class_cnick,
               const char *micro_sym) {
-    CFCSymbol *self = (CFCSymbol*)CFCBase_allocate(sizeof(CFCSymbol),
-                                                   "Clownfish::Symbol");
+    CFCSymbol *self = (CFCSymbol*)CFCBase_allocate(&CFCSYMBOL_META);
     return CFCSymbol_init(self, parcel, exposure, class_name, class_cnick,
                           micro_sym);
 }

Modified: incubator/lucy/trunk/clownfish/src/CFCType.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCType.c?rev=1214630&r1=1214629&r2=1214630&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCType.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCType.c Thu Dec 15 06:38:26 2011
@@ -43,11 +43,16 @@ struct CFCType {
     struct CFCType *child;
 };
 
+const static CFCMeta CFCTYPE_META= {
+    "Clownfish::Type",
+    sizeof(CFCType),
+    (CFCBase_destroy_t)CFCType_destroy
+};
+
 CFCType*
 CFCType_new(int flags, struct CFCParcel *parcel, const char *specifier,
             int indirection, const char *c_string) {
-    CFCType *self = (CFCType*)CFCBase_allocate(sizeof(CFCType),
-                                               "Clownfish::Type");
+    CFCType *self = (CFCType*)CFCBase_allocate(&CFCTYPE_META);
     return CFCType_init(self, flags, parcel, specifier, indirection,
                         c_string);
 }

Modified: incubator/lucy/trunk/clownfish/src/CFCVariable.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCVariable.c?rev=1214630&r1=1214629&r2=1214630&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCVariable.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCVariable.c Thu Dec 15 06:38:26 2011
@@ -38,12 +38,17 @@ struct CFCVariable {
     int   inert;
 };
 
+const static CFCMeta CFCVARIABLE_META = {
+    "Clownfish::Variable",
+    sizeof(CFCVariable),
+    (CFCBase_destroy_t)CFCVariable_destroy
+};
+
 CFCVariable*
 CFCVariable_new(struct CFCParcel *parcel, const char *exposure,
                 const char *class_name, const char *class_cnick,
                 const char *micro_sym, struct CFCType *type, int inert) {
-    CFCVariable *self = (CFCVariable*)CFCBase_allocate(sizeof(CFCVariable),
-                                                       "Clownfish::Variable");
+    CFCVariable *self = (CFCVariable*)CFCBase_allocate(&CFCVARIABLE_META);
     return CFCVariable_init(self, parcel, exposure, class_name, class_cnick,
                             micro_sym, type, inert);
 }