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/06/23 21:29:49 UTC

[lucy-commits] svn commit: r1139043 - in /incubator/lucy/trunk/clownfish: lib/Clownfish.xs lib/Clownfish/Binding/Core/Class.pm src/CFCBindClass.c src/CFCBindClass.h src/CFCClass.c src/CFCClass.h

Author: marvin
Date: Thu Jun 23 19:29:49 2011
New Revision: 1139043

URL: http://svn.apache.org/viewvc?rev=1139043&view=rev
Log:
Port some properties of Clownfish::Binding::Core::Class to C.

Modified:
    incubator/lucy/trunk/clownfish/lib/Clownfish.xs
    incubator/lucy/trunk/clownfish/lib/Clownfish/Binding/Core/Class.pm
    incubator/lucy/trunk/clownfish/src/CFCBindClass.c
    incubator/lucy/trunk/clownfish/src/CFCBindClass.h
    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=1139043&r1=1139042&r2=1139043&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/lib/Clownfish.xs (original)
+++ incubator/lucy/trunk/clownfish/lib/Clownfish.xs Thu Jun 23 19:29:49 2011
@@ -1771,3 +1771,32 @@ DESTROY(self)
 PPCODE:
     CFCBindClass_destroy(self);
 
+void
+_set_or_get(self, ...)
+    CFCBindClass *self;
+ALIAS:
+    _full_callbacks_var = 2
+    _full_name_var      = 4
+    _short_names_macro  = 6
+PPCODE:
+{
+    START_SET_OR_GET_SWITCH
+        case 2: {
+                const char *value = CFCBindClass_full_callbacks_var(self);
+                retval = newSVpv(value, strlen(value));
+            }
+            break;
+        case 4: {
+                const char *value = CFCBindClass_full_name_var(self);
+                retval = newSVpv(value, strlen(value));
+            }
+            break;
+        case 6: {
+                const char *value = CFCBindClass_short_names_macro(self);
+                retval = newSVpv(value, strlen(value));
+            }
+            break;
+    END_SET_OR_GET_SWITCH
+}
+
+

Modified: incubator/lucy/trunk/clownfish/lib/Clownfish/Binding/Core/Class.pm
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/lib/Clownfish/Binding/Core/Class.pm?rev=1139043&r1=1139042&r2=1139043&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/lib/Clownfish/Binding/Core/Class.pm (original)
+++ incubator/lucy/trunk/clownfish/lib/Clownfish/Binding/Core/Class.pm Thu Jun 23 19:29:49 2011
@@ -30,10 +30,6 @@ sub new {
     return _new( $args{client} );
 }
 
-sub _full_callbacks_var { shift->_get_client->full_vtable_var . '_CALLBACKS' }
-sub _full_name_var      { shift->_get_client->full_vtable_var . '_CLASS_NAME' }
-sub _short_names_macro  { shift->_get_client->get_PREFIX . 'USE_SHORT_NAMES' }
-
 # C code defining the ZombieCharBuf which contains the class name for this
 # class.
 sub _name_var_definition {

Modified: incubator/lucy/trunk/clownfish/src/CFCBindClass.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCBindClass.c?rev=1139043&r1=1139042&r2=1139043&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCBindClass.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCBindClass.c Thu Jun 23 19:29:49 2011
@@ -31,6 +31,9 @@
 struct CFCBindClass {
     CFCBase base;
     CFCClass *client;
+    char *full_callbacks_var;
+    char *full_name_var;
+    char *short_names_macro;
 };
 
 CFCBindClass*
@@ -45,12 +48,25 @@ CFCBindClass*
 CFCBindClass_init(CFCBindClass *self, CFCClass *client) {
     CFCUTIL_NULL_CHECK(client);
     self->client = (CFCClass*)CFCBase_incref((CFCBase*)client);
+
+    const char *full_vtable_var = CFCClass_full_vtable_var(client);
+    const char *PREFIX = CFCClass_get_PREFIX(client);
+    self->full_callbacks_var = (char*)MALLOCATE(strlen(full_vtable_var) + 20);
+    self->full_name_var      = (char*)MALLOCATE(strlen(full_vtable_var) + 20);
+    self->short_names_macro  = (char*)MALLOCATE(strlen(PREFIX) + 20);
+    sprintf(self->full_callbacks_var, "%s_CALLBACKS", full_vtable_var);
+    sprintf(self->full_name_var, "%s_CLASS_NAME", full_vtable_var);
+    sprintf(self->short_names_macro, "%sUSE_SHORT_NAMES", PREFIX);
+
     return self;
 }
 
 void
 CFCBindClass_destroy(CFCBindClass *self)
 {
+    FREEMEM(self->full_callbacks_var);
+    FREEMEM(self->full_name_var);
+    FREEMEM(self->short_names_macro);
     CFCBase_decref((CFCBase*)self->client);
     CFCBase_destroy((CFCBase*)self);
 }
@@ -60,3 +76,21 @@ CFCBindClass_get_client(CFCBindClass *se
     return self->client;
 }
 
+const char*
+CFCBindClass_full_callbacks_var(CFCBindClass *self)
+{
+    return self->full_callbacks_var;
+}
+
+const char*
+CFCBindClass_full_name_var(CFCBindClass *self)
+{
+    return self->full_name_var;
+}
+
+const char*
+CFCBindClass_short_names_macro(CFCBindClass *self)
+{
+    return self->short_names_macro;
+}
+

Modified: incubator/lucy/trunk/clownfish/src/CFCBindClass.h
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCBindClass.h?rev=1139043&r1=1139042&r2=1139043&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCBindClass.h (original)
+++ incubator/lucy/trunk/clownfish/src/CFCBindClass.h Thu Jun 23 19:29:49 2011
@@ -37,6 +37,15 @@ CFCBindClass_destroy(CFCBindClass *self)
 struct CFCClass*
 CFCBindClass_get_client(struct CFCBindClass *self);
 
+const char*
+CFCBindClass_full_callbacks_var(CFCBindClass *self);
+
+const char*
+CFCBindClass_full_name_var(CFCBindClass *self);
+
+const char*
+CFCBindClass_short_names_macro(CFCBindClass *self);
+
 #ifdef __cplusplus
 }
 #endif

Modified: incubator/lucy/trunk/clownfish/src/CFCClass.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCClass.c?rev=1139043&r1=1139042&r2=1139043&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCClass.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCClass.c Thu Jun 23 19:29:49 2011
@@ -763,6 +763,16 @@ CFCClass_get_prefix(CFCClass *self) {
 }
 
 const char*
+CFCClass_get_Prefix(CFCClass *self) {
+    return CFCSymbol_get_Prefix((CFCSymbol*)self);
+}
+
+const char*
+CFCClass_get_PREFIX(CFCClass *self) {
+    return CFCSymbol_get_PREFIX((CFCSymbol*)self);
+}
+
+const char*
 CFCClass_get_class_name(CFCClass *self) {
     return CFCSymbol_get_class_name((CFCSymbol*)self);
 }

Modified: incubator/lucy/trunk/clownfish/src/CFCClass.h
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCClass.h?rev=1139043&r1=1139042&r2=1139043&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCClass.h (original)
+++ incubator/lucy/trunk/clownfish/src/CFCClass.h Thu Jun 23 19:29:49 2011
@@ -164,6 +164,12 @@ const char*
 CFCClass_get_prefix(CFCClass *self);
 
 const char*
+CFCClass_get_Prefix(CFCClass *self);
+
+const char*
+CFCClass_get_PREFIX(CFCClass *self);
+
+const char*
 CFCClass_get_class_name(CFCClass *self);
 
 struct CFCParcel*