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/07/22 01:46:07 UTC
[lucy-commits] svn commit: r1149406 - in /incubator/lucy/trunk/clownfish: lib/Clownfish.xs
lib/Clownfish/Binding/Perl/Subroutine.pm src/CFCPerlSub.c src/CFCPerlSub.h
Author: marvin
Date: Thu Jul 21 23:46:06 2011
New Revision: 1149406
URL: http://svn.apache.org/viewvc?rev=1149406&view=rev
Log:
Move some variables from Perl-space to C.
As part of porting Clownfish::Binding::Perl::Subroutine, change some member
vars from inside-out Perl to C-struct.
Modified:
incubator/lucy/trunk/clownfish/lib/Clownfish.xs
incubator/lucy/trunk/clownfish/lib/Clownfish/Binding/Perl/Subroutine.pm
incubator/lucy/trunk/clownfish/src/CFCPerlSub.c
incubator/lucy/trunk/clownfish/src/CFCPerlSub.h
Modified: incubator/lucy/trunk/clownfish/lib/Clownfish.xs
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/lib/Clownfish.xs?rev=1149406&r1=1149405&r2=1149406&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/lib/Clownfish.xs (original)
+++ incubator/lucy/trunk/clownfish/lib/Clownfish.xs Thu Jul 21 23:46:06 2011
@@ -1851,17 +1851,55 @@ PPCODE:
MODULE = Clownfish PACKAGE = Clownfish::Binding::Perl::Subroutine
SV*
-_new(klass)
- const char *klass
+_new(klass, param_list, class_name, alias, retval_type, use_labeled_params)
+ const char *klass;
+ CFCParamList *param_list;
+ const char *class_name;
+ const char *alias;
+ CFCType *retval_type;
+ int use_labeled_params;
CODE:
- CFCPerlSub *self = CFCPerlSub_new(klass);
+ CFCPerlSub *self = CFCPerlSub_new(klass, param_list, class_name,
+ alias, retval_type, use_labeled_params);
RETVAL = S_cfcbase_to_perlref(self);
CFCBase_decref((CFCBase*)self);
OUTPUT: RETVAL
void
-_destroy(self)
+DESTROY(self)
CFCPerlSub *self;
PPCODE:
CFCPerlSub_destroy(self);
+void
+_set_or_get(self, ...)
+ CFCPerlSub *self;
+ALIAS:
+ get_class_name = 2
+ use_labeled_params = 4
+ perl_name = 6
+ get_param_list = 8
+PPCODE:
+{
+ START_SET_OR_GET_SWITCH
+ case 2: {
+ const char *value = CFCPerlSub_get_class_name(self);
+ retval = newSVpvn(value, strlen(value));
+ }
+ break;
+ case 4:
+ retval = newSViv(CFCPerlSub_use_labeled_params(self));
+ break;
+ case 6: {
+ const char *value = CFCPerlSub_perl_name(self);
+ retval = newSVpvn(value, strlen(value));
+ }
+ break;
+ case 8: {
+ CFCParamList *value = CFCPerlSub_get_param_list(self);
+ retval = S_cfcbase_to_perlref(value);
+ }
+ break;
+ END_SET_OR_GET_SWITCH
+}
+
Modified: incubator/lucy/trunk/clownfish/lib/Clownfish/Binding/Perl/Subroutine.pm
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/lib/Clownfish/Binding/Perl/Subroutine.pm?rev=1149406&r1=1149405&r2=1149406&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/lib/Clownfish/Binding/Perl/Subroutine.pm (original)
+++ incubator/lucy/trunk/clownfish/lib/Clownfish/Binding/Perl/Subroutine.pm Thu Jul 21 23:46:06 2011
@@ -44,35 +44,10 @@ our %perl_name;
sub new {
my ( $either, %args ) = @_;
verify_args( \%new_PARAMS, %args ) or confess $@;
- for (qw( param_list class_name alias retval_type )) {
- confess("$_ is required") unless defined $args{$_};
- }
- my $self = _new( ref($either) || $either );
- $param_list{$self} = $args{param_list};
- $alias{$self} = $args{alias};
- $class_name{$self} = $args{class_name};
- $retval_type{$self} = $args{retval_type};
- $use_labeled_params{$self} = $args{use_labeled_params};
- $perl_name{$self} = "$args{class_name}::$args{alias}";
- return $self;
+ return _new( ref($either) || $either,
+ @args{qw( param_list class_name alias retval_type use_labeled_params )} );
}
-sub DESTROY {
- my $self = shift;
- delete $param_list{$self};
- delete $class_name{$self};
- delete $alias{$self};
- delete $retval_type{$self};
- delete $use_labeled_params{$self};
- delete $perl_name{$self};
- $self->_destroy;
-}
-
-sub get_class_name { $class_name{ +shift } }
-sub use_labeled_params { $use_labeled_params{ +shift } }
-sub perl_name { $perl_name{ +shift } }
-sub get_param_list { $param_list{ +shift } }
-
sub c_name {
my $self = shift;
my $c_name = "XS_" . $self->perl_name;
Modified: incubator/lucy/trunk/clownfish/src/CFCPerlSub.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCPerlSub.c?rev=1149406&r1=1149405&r2=1149406&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCPerlSub.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCPerlSub.c Thu Jul 21 23:46:06 2011
@@ -18,25 +18,79 @@
#include "CFCBase.h"
#include "CFCPerlSub.h"
#include "CFCUtil.h"
+#include "CFCType.h"
+#include "CFCParamList.h"
struct CFCPerlSub {
CFCBase base;
+ CFCParamList *param_list;
+ char *class_name;
+ char *alias;
+ CFCType *retval_type;
+ int use_labeled_params;
+ char *perl_name;
};
CFCPerlSub*
-CFCPerlSub_new(const char *class_name) {
+CFCPerlSub_new(const char *klass, CFCParamList *param_list,
+ const char *class_name, const char *alias,
+ CFCType *retval_type, int use_labeled_params) {
CFCPerlSub *self
- = (CFCPerlSub*)CFCBase_allocate(sizeof(CFCPerlSub), class_name);
- return CFCPerlSub_init(self);
+ = (CFCPerlSub*)CFCBase_allocate(sizeof(CFCPerlSub), klass);
+ return CFCPerlSub_init(self, param_list, class_name, alias, retval_type,
+ use_labeled_params);
}
CFCPerlSub*
-CFCPerlSub_init(CFCPerlSub *self) {
+CFCPerlSub_init(CFCPerlSub *self, CFCParamList *param_list,
+ const char *class_name, const char *alias,
+ CFCType *retval_type, int use_labeled_params) {
+ CFCUTIL_NULL_CHECK(param_list);
+ CFCUTIL_NULL_CHECK(class_name);
+ CFCUTIL_NULL_CHECK(alias);
+ CFCUTIL_NULL_CHECK(retval_type);
+ self->param_list = (CFCParamList*)CFCBase_incref((CFCBase*)param_list);
+ self->class_name = CFCUtil_strdup(class_name);
+ self->alias = CFCUtil_strdup(alias);
+ self->retval_type = (CFCType*)CFCBase_incref((CFCBase*)retval_type);
+ self->use_labeled_params = use_labeled_params;
+ self->perl_name = CFCUtil_cat(CFCUtil_strdup(class_name), "::", alias,
+ NULL);
return self;
}
void
CFCPerlSub_destroy(CFCPerlSub *self) {
+ CFCBase_decref((CFCBase*)self->param_list);
+ FREEMEM(self->class_name);
+ FREEMEM(self->alias);
+ CFCBase_decref((CFCBase*)self->retval_type);
+ FREEMEM(self->perl_name);
CFCBase_destroy((CFCBase*)self);
}
+CFCParamList*
+CFCPerlSub_get_param_list(CFCPerlSub *self) {
+ return self->param_list;
+}
+
+const char*
+CFCPerlSub_get_class_name(CFCPerlSub *self) {
+ return self->class_name;
+}
+
+const char*
+CFCPerlSub_get_alias(CFCPerlSub *self) {
+ return self->alias;
+}
+
+int
+CFCPerlSub_use_labeled_params(CFCPerlSub *self) {
+ return self->use_labeled_params;
+}
+
+const char*
+CFCPerlSub_perl_name(CFCPerlSub *self) {
+ return self->perl_name;
+}
+
Modified: incubator/lucy/trunk/clownfish/src/CFCPerlSub.h
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCPerlSub.h?rev=1149406&r1=1149405&r2=1149406&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCPerlSub.h (original)
+++ incubator/lucy/trunk/clownfish/src/CFCPerlSub.h Thu Jul 21 23:46:06 2011
@@ -22,16 +22,34 @@ extern "C" {
#endif
typedef struct CFCPerlSub CFCPerlSub;
+struct CFCParamList;
+struct CFCType;
CFCPerlSub*
-CFCPerlSub_new(const char *class_name);
+CFCPerlSub_new(const char *klass, struct CFCParamList *param_list,
+ const char *class_name, const char *alias,
+ struct CFCType *retval_type, int use_labeled_params);
CFCPerlSub*
-CFCPerlSub_init(CFCPerlSub *self);
+CFCPerlSub_init(CFCPerlSub *self, struct CFCParamList *param_list,
+ const char *class_name, const char *alias,
+ struct CFCType *retval_type, int use_labeled_params);
void
CFCPerlSub_destroy(CFCPerlSub *self);
+struct CFCParamList*
+CFCPerlSub_get_param_list(CFCPerlSub *self);
+
+const char*
+CFCPerlSub_get_class_name(CFCPerlSub *self);
+
+int
+CFCPerlSub_use_labeled_params(CFCPerlSub *self);
+
+const char*
+CFCPerlSub_perl_name(CFCPerlSub *self);
+
#ifdef __cplusplus
}
#endif