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
}