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/03 20:48:55 UTC

[lucy-commits] svn commit: r1066927 - in /incubator/lucy/trunk/clownfish: lib/Clownfish.xs lib/Clownfish/Symbol.pm src/CFCSymbol.c src/CFCSymbol.h

Author: marvin
Date: Thu Feb  3 19:48:55 2011
New Revision: 1066927

URL: http://svn.apache.org/viewvc?rev=1066927&view=rev
Log:
Now that Clownfish::Parcel is largely functional within C, start using Parcel
objects directly within CFCSymbol.c instead of storing them within opaque Perl
scalars.  One wrinkle: since there's no refcounting for Parcel without an SV
wrapper, this commit causes us to leak Parcel objects.

Modified:
    incubator/lucy/trunk/clownfish/lib/Clownfish.xs
    incubator/lucy/trunk/clownfish/lib/Clownfish/Symbol.pm
    incubator/lucy/trunk/clownfish/src/CFCSymbol.c
    incubator/lucy/trunk/clownfish/src/CFCSymbol.h

Modified: incubator/lucy/trunk/clownfish/lib/Clownfish.xs
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/lib/Clownfish.xs?rev=1066927&r1=1066926&r2=1066927&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/lib/Clownfish.xs (original)
+++ incubator/lucy/trunk/clownfish/lib/Clownfish.xs Thu Feb  3 19:48:55 2011
@@ -242,7 +242,7 @@ MODULE = Clownfish    PACKAGE = Clownfis
 SV*
 _new(klass, parcel, exposure, class_name_sv, class_cnick_sv, micro_sym_sv)
     const char *klass;
-    SV *parcel;
+    CFCParcel *parcel;
     const char *exposure;
     SV *class_name_sv;
     SV *class_cnick_sv;
@@ -275,11 +275,16 @@ ALIAS:
     get_class_cnick = 6
     get_exposure    = 8
     micro_sym       = 10
+    get_prefix      = 12
+    get_Prefix      = 14
+    get_PREFIX      = 16
 PPCODE:
 {
     START_SET_OR_GET_SWITCH
-        case 2:
-            retval = newSVsv((SV*)CFCSymbol_get_parcel(self));
+        case 2: {
+                struct CFCParcel *parcel = CFCSymbol_get_parcel(self);
+                retval = newSVsv((SV*)CFCParcel_get_perl_object(parcel));
+            }
             break;
         case 4: {
                 const char *class_name = CFCSymbol_get_class_name(self);
@@ -305,6 +310,21 @@ PPCODE:
                 retval = newSVpvn(micro_sym, strlen(micro_sym));
             }
             break;
+        case 12: {
+                const char *value = CFCSymbol_get_prefix(self);
+                retval = newSVpvn(value, strlen(value));
+            }
+            break;
+        case 14: {
+                const char *value = CFCSymbol_get_Prefix(self);
+                retval = newSVpvn(value, strlen(value));
+            }
+            break;
+        case 16: {
+                const char *value = CFCSymbol_get_PREFIX(self);
+                retval = newSVpvn(value, strlen(value));
+            }
+            break;
     END_SET_OR_GET_SWITCH
 }
 

Modified: incubator/lucy/trunk/clownfish/lib/Clownfish/Symbol.pm
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/lib/Clownfish/Symbol.pm?rev=1066927&r1=1066926&r2=1066927&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/lib/Clownfish/Symbol.pm (original)
+++ incubator/lucy/trunk/clownfish/lib/Clownfish/Symbol.pm Thu Feb  3 19:48:55 2011
@@ -61,10 +61,6 @@ sub new {
         $micro_sym );
 }
 
-sub get_prefix { shift->get_parcel->get_prefix; }
-sub get_Prefix { shift->get_parcel->get_Prefix; }
-sub get_PREFIX { shift->get_parcel->get_PREFIX; }
-
 sub public  { shift->get_exposure eq 'public' }
 sub private { shift->get_exposure eq 'private' }
 sub parcel  { shift->get_exposure eq 'parcel' }

Modified: incubator/lucy/trunk/clownfish/src/CFCSymbol.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCSymbol.c?rev=1066927&r1=1066926&r2=1066927&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCSymbol.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCSymbol.c Thu Feb  3 19:48:55 2011
@@ -28,14 +28,12 @@
 
 #define CFC_NEED_SYMBOL_STRUCT_DEF
 #include "CFCSymbol.h"
+#include "CFCParcel.h"
 
 CFCSymbol*
-CFCSymbol_new(void *parcel, const char *exposure, const char *class_name, 
-              const char *class_cnick, const char *micro_sym);
-
-CFCSymbol*
-CFCSymbol_new(void *parcel, const char *exposure, const char *class_name, 
-              const char *class_cnick, const char *micro_sym)
+CFCSymbol_new(struct CFCParcel *parcel, const char *exposure, 
+              const char *class_name, const char *class_cnick, 
+              const char *micro_sym)
 {
     CFCSymbol *self = (CFCSymbol*)malloc(sizeof(CFCSymbol));
     if (!self) { croak("malloc failed"); }
@@ -122,11 +120,11 @@ S_validate_identifier(const char *identi
 }
 
 CFCSymbol*
-CFCSymbol_init(CFCSymbol *self, void *parcel, const char *exposure, 
-               const char *class_name, const char *class_cnick, 
-               const char *micro_sym)
+CFCSymbol_init(CFCSymbol *self, struct CFCParcel *parcel, 
+               const char *exposure, const char *class_name, 
+               const char *class_cnick, const char *micro_sym)
 {
-    self->parcel = newSVsv((SV*)parcel);
+    self->parcel = parcel;
 
     // Validate exposure.
     if (!S_validate_exposure(exposure)) {
@@ -173,7 +171,7 @@ CFCSymbol_init(CFCSymbol *self, void *pa
 void
 CFCSymbol_destroy(CFCSymbol *self)
 {
-    SvREFCNT_dec((SV*)self->parcel);
+    // SvREFCNT_dec((SV*)self->parcel);
     Safefree(self->exposure);
     Safefree(self->class_name);
     Safefree(self->class_cnick);
@@ -181,7 +179,7 @@ CFCSymbol_destroy(CFCSymbol *self)
     free(self);
 }
 
-void*
+struct CFCParcel*
 CFCSymbol_get_parcel(CFCSymbol *self)
 {
     return self->parcel;
@@ -211,3 +209,21 @@ CFCSymbol_micro_sym(CFCSymbol *self)
     return self->micro_sym;
 }
 
+const char*
+CFCSymbol_get_prefix(CFCSymbol *self)
+{
+    return CFCParcel_get_prefix(self->parcel);
+}
+
+const char*
+CFCSymbol_get_Prefix(CFCSymbol *self)
+{
+    return CFCParcel_get_Prefix(self->parcel);
+}
+
+const char*
+CFCSymbol_get_PREFIX(CFCSymbol *self)
+{
+    return CFCParcel_get_PREFIX(self->parcel);
+}
+

Modified: incubator/lucy/trunk/clownfish/src/CFCSymbol.h
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCSymbol.h?rev=1066927&r1=1066926&r2=1066927&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCSymbol.h (original)
+++ incubator/lucy/trunk/clownfish/src/CFCSymbol.h Thu Feb  3 19:48:55 2011
@@ -15,10 +15,11 @@
  */
 
 typedef struct CFCSymbol CFCSymbol;
+struct CFCParcel;
 
 #ifdef CFC_NEED_SYMBOL_STRUCT_DEF
 struct CFCSymbol {
-    void *parcel;
+    struct CFCParcel *parcel;
     const char *exposure;
     const char *class_name;
     const char *class_cnick;
@@ -27,18 +28,18 @@ struct CFCSymbol {
 #endif
 
 CFCSymbol*
-CFCSymbol_new(void *parcel, const char *exposure, const char *class_name, 
+CFCSymbol_new(struct CFCParcel *parcel, const char *exposure, const char *class_name, 
               const char *class_cnick, const char *micro_sym);
 
 CFCSymbol*
-CFCSymbol_init(CFCSymbol *self, void *parcel, const char *exposure, 
+CFCSymbol_init(CFCSymbol *self, struct CFCParcel *parcel, const char *exposure, 
                const char *class_name, const char *class_cnick, 
                const char *micro_sym);
 
 void
 CFCSymbol_destroy(CFCSymbol *self);
 
-void*
+struct CFCParcel*
 CFCSymbol_get_parcel(CFCSymbol *self);
 
 // May be NULL.
@@ -55,3 +56,12 @@ CFCSymbol_get_exposure(CFCSymbol *self);
 const char*
 CFCSymbol_micro_sym(CFCSymbol *self);
 
+const char*
+CFCSymbol_get_prefix(CFCSymbol *self);
+
+const char*
+CFCSymbol_get_Prefix(CFCSymbol *self);
+
+const char*
+CFCSymbol_get_PREFIX(CFCSymbol *self);
+