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/10 02:30:36 UTC

[lucy-commits] svn commit: r1212708 - in /incubator/lucy/trunk/clownfish: lib/Clownfish.xs lib/Clownfish/Binding/Perl/Class.pm src/CFCPerlClass.c src/CFCPerlClass.h

Author: marvin
Date: Sat Dec 10 01:30:36 2011
New Revision: 1212708

URL: http://svn.apache.org/viewvc?rev=1212708&view=rev
Log:
Migrate pod_spec member of CFCPerlClass to C.

Modified:
    incubator/lucy/trunk/clownfish/lib/Clownfish.xs
    incubator/lucy/trunk/clownfish/lib/Clownfish/Binding/Perl/Class.pm
    incubator/lucy/trunk/clownfish/src/CFCPerlClass.c
    incubator/lucy/trunk/clownfish/src/CFCPerlClass.h

Modified: incubator/lucy/trunk/clownfish/lib/Clownfish.xs
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/lib/Clownfish.xs?rev=1212708&r1=1212707&r2=1212708&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/lib/Clownfish.xs (original)
+++ incubator/lucy/trunk/clownfish/lib/Clownfish.xs Sat Dec 10 01:30:36 2011
@@ -1986,17 +1986,18 @@ OUTPUT: RETVAL
 MODULE = Clownfish   PACKAGE = Clownfish::Binding::Perl::Class
 
 SV*
-_new(parcel, class_name, client, xs_code_sv)
+_new(parcel, class_name, client, xs_code_sv, pod_spec)
     CFCParcel  *parcel;
     const char *class_name;
     CFCClass   *client;
     SV         *xs_code_sv;
+    CFCPerlPod *pod_spec;
 CODE:
     const char *xs_code = SvOK(xs_code_sv)
                           ? SvPV_nolen(xs_code_sv)
                           : NULL;
     CFCPerlClass *self
-        = CFCPerlClass_new(parcel, class_name, client,xs_code);
+        = CFCPerlClass_new(parcel, class_name, client, xs_code, pod_spec);
     RETVAL = S_cfcbase_to_perlref(self);
     CFCBase_decref((CFCBase*)self);
 OUTPUT: RETVAL
@@ -2014,6 +2015,7 @@ ALIAS:
     get_class_name     = 2
     get_client         = 4
     get_xs_code        = 6
+    get_pod_spec       = 8
 PPCODE:
 {
     START_SET_OR_GET_SWITCH
@@ -2034,6 +2036,11 @@ PPCODE:
                          : newSV(0);
             }
             break;
+        case 8: {
+                CFCPerlPod *value = CFCPerlClass_get_pod_spec(self);
+                retval = S_cfcbase_to_perlref(value);
+            }
+            break;
     END_SET_OR_GET_SWITCH
 }
 

Modified: incubator/lucy/trunk/clownfish/lib/Clownfish/Binding/Perl/Class.pm
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/lib/Clownfish/Binding/Perl/Class.pm?rev=1212708&r1=1212707&r2=1212708&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/lib/Clownfish/Binding/Perl/Class.pm (original)
+++ incubator/lucy/trunk/clownfish/lib/Clownfish/Binding/Perl/Class.pm Sat Dec 10 01:30:36 2011
@@ -37,8 +37,6 @@ our %register_PARAMS = (
 
 our %bind_methods;
 our %bind_constructors;
-our %make_pod;
-our %pod_spec;
 
 sub register {
     my ( $either, %args ) = @_;
@@ -65,15 +63,16 @@ sub register {
             unless $args{client};
     }
 
+    # Create Pod spec if needed.
+    my $pod_spec;
+    if ( $args{make_pod} ) {
+        $pod_spec = Clownfish::Binding::Perl::Pod->new( %{ $args{make_pod} } );
+    }
+
     # Create object.
-    my $self = _new( @args{qw( parcel class_name client xs_code )} );
+    my $self = _new( @args{qw( parcel class_name client xs_code pod_spec )} );
     $bind_methods{$self}      = $args{bind_methods};
     $bind_constructors{$self} = $args{bind_constructors};
-    if ( $args{make_pod} ) {
-        $make_pod{$self} = $args{make_pod};
-        $pod_spec{$self}
-            = Clownfish::Binding::Perl::Pod->new( %{ $args{make_pod} } );
-    }
 
     # Add to registry.
     $registry{ $args{class_name} } = $self;
@@ -85,15 +84,11 @@ sub DESTROY {
     my $self = shift;
     delete $bind_methods{$self};
     delete $bind_constructors{$self};
-    delete $make_pod{$self};
-    delete $pod_spec{$self};
     _destroy($self);
 }
 
 sub get_bind_methods      { $bind_methods{ +shift } }
 sub get_bind_constructors { $bind_constructors{ +shift } }
-sub get_make_pod          { $make_pod{ +shift } }
-sub get_pod_spec          { $pod_spec{ +shift } }
 
 sub constructor_bindings {
     my $self  = shift;
@@ -168,8 +163,7 @@ sub method_bindings {
 
 sub create_pod {
     my $self       = shift;
-    my $pod_args   = $self->get_make_pod or return;
-    my $pod_spec   = $self->get_pod_spec;
+    my $pod_spec   = $self->get_pod_spec or return;
     my $class_name = $self->get_class_name;
     my $class      = $self->get_client or die "No client for $class_name";
     my $docucom    = $class->get_docucomment;

Modified: incubator/lucy/trunk/clownfish/src/CFCPerlClass.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCPerlClass.c?rev=1212708&r1=1212707&r2=1212708&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCPerlClass.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCPerlClass.c Sat Dec 10 01:30:36 2011
@@ -26,6 +26,7 @@
 #include "CFCFunction.h"
 #include "CFCDocuComment.h"
 #include "CFCSymbol.h"
+#include "CFCPerlPod.h"
 
 struct CFCPerlClass {
     CFCBase base;
@@ -33,25 +34,29 @@ struct CFCPerlClass {
     char *class_name;
     CFCClass *client;
     char *xs_code;
+    CFCPerlPod *pod_spec;
 };
 
 CFCPerlClass*
 CFCPerlClass_new(CFCParcel *parcel, const char *class_name, CFCClass *client, 
-                 const char *xs_code) {
+                 const char *xs_code, CFCPerlPod *pod_spec) {
     CFCPerlClass *self
         = (CFCPerlClass*)CFCBase_allocate(sizeof(CFCPerlClass),
                                           "Clownfish::Binding::Perl::Class");
-    return CFCPerlClass_init(self, parcel, class_name, client, xs_code);
+    return CFCPerlClass_init(self, parcel, class_name, client, xs_code,
+                             pod_spec);
 }
 
 CFCPerlClass*
-CFCPerlClass_init(CFCPerlClass *self, CFCParcel *parcel, const char *class_name,
-                  CFCClass *client, const char *xs_code) {
+CFCPerlClass_init(CFCPerlClass *self, CFCParcel *parcel,
+                  const char *class_name, CFCClass *client,
+                  const char *xs_code, CFCPerlPod *pod_spec) {
     CFCUTIL_NULL_CHECK(parcel);
     CFCUTIL_NULL_CHECK(class_name);
     self->parcel = (CFCParcel*)CFCBase_incref((CFCBase*)parcel);
     self->client = (CFCClass*)CFCBase_incref((CFCBase*)client);
     self->class_name = CFCUtil_strdup(class_name);
+    self->pod_spec = (CFCPerlPod*)CFCBase_incref((CFCBase*)pod_spec);
     self->xs_code = xs_code ? CFCUtil_strdup(xs_code) : NULL;
     return self;
 }
@@ -60,6 +65,7 @@ void
 CFCPerlClass_destroy(CFCPerlClass *self) {
     CFCBase_decref((CFCBase*)self->parcel);
     CFCBase_decref((CFCBase*)self->client);
+    CFCBase_decref((CFCBase*)self->pod_spec);
     FREEMEM(self->class_name);
     FREEMEM(self->xs_code);
     CFCBase_destroy((CFCBase*)self);
@@ -80,3 +86,8 @@ CFCPerlClass_get_xs_code(CFCPerlClass *s
     return self->xs_code;
 }
 
+CFCPerlPod*
+CFCPerlClass_get_pod_spec(CFCPerlClass *self) {
+    return self->pod_spec;
+}
+

Modified: incubator/lucy/trunk/clownfish/src/CFCPerlClass.h
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCPerlClass.h?rev=1212708&r1=1212707&r2=1212708&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCPerlClass.h (original)
+++ incubator/lucy/trunk/clownfish/src/CFCPerlClass.h Sat Dec 10 01:30:36 2011
@@ -25,15 +25,17 @@ typedef struct CFCPerlClass CFCPerlClass
 struct CFCParcel;
 struct CFCClass;
 struct CFCFunction;
+struct CFCPerlPod;
 
 CFCPerlClass*
 CFCPerlClass_new(struct CFCParcel *parcel, const char *class_name,
-                 struct CFCClass *client, const char *xs_code);
+                 struct CFCClass *client, const char *xs_code,
+                 struct CFCPerlPod *pod_spec);
 
 CFCPerlClass*
 CFCPerlClass_init(CFCPerlClass *self, struct CFCParcel *parcel,
                   const char *class_name, struct CFCClass *client,
-                  const char *xs_code);
+                  const char *xs_code, struct CFCPerlPod *pod_spec);
 
 void
 CFCPerlClass_destroy(CFCPerlClass *self);
@@ -47,6 +49,8 @@ CFCPerlClass_get_class_name(CFCPerlClass
 const char*
 CFCPerlClass_get_xs_code(CFCPerlClass *self);
 
+struct CFCPerlPod*
+CFCPerlClass_get_pod_spec(CFCPerlClass *self);
 
 #ifdef __cplusplus
 }