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/20 04:12:46 UTC
[lucy-commits] svn commit: r1072483 - in /incubator/lucy/trunk/clownfish: lib/Clownfish.xs
lib/Clownfish/Function.pm src/CFCFunction.c src/CFCFunction.h
Author: marvin
Date: Sun Feb 20 03:12:46 2011
New Revision: 1072483
URL: http://svn.apache.org/viewvc?rev=1072483&view=rev
Log:
Finish porting CFCFunction to C.
Modified:
incubator/lucy/trunk/clownfish/lib/Clownfish.xs
incubator/lucy/trunk/clownfish/lib/Clownfish/Function.pm
incubator/lucy/trunk/clownfish/src/CFCFunction.c
incubator/lucy/trunk/clownfish/src/CFCFunction.h
Modified: incubator/lucy/trunk/clownfish/lib/Clownfish.xs
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/lib/Clownfish.xs?rev=1072483&r1=1072482&r2=1072483&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/lib/Clownfish.xs (original)
+++ incubator/lucy/trunk/clownfish/lib/Clownfish.xs Sun Feb 20 03:12:46 2011
@@ -360,6 +360,9 @@ ALIAS:
get_param_list = 4
get_docucomment = 6
inline = 8
+ void = 10
+ full_func_sym = 12
+ short_func_sym = 14
PPCODE:
{
START_SET_OR_GET_SWITCH
@@ -388,6 +391,19 @@ PPCODE:
case 8:
retval = newSViv(CFCFunction_inline(self));
break;
+ case 10:
+ retval = newSViv(CFCFunction_void(self));
+ break;
+ case 12: {
+ const char *full_sym = CFCFunction_full_func_sym(self);
+ retval = newSVpv(full_sym, strlen(full_sym));
+ }
+ break;
+ case 14: {
+ const char *short_sym = CFCFunction_short_func_sym(self);
+ retval = newSVpv(short_sym, strlen(short_sym));
+ }
+ break;
END_SET_OR_GET_SWITCH
}
Modified: incubator/lucy/trunk/clownfish/lib/Clownfish/Function.pm
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/lib/Clownfish/Function.pm?rev=1072483&r1=1072482&r2=1072483&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/lib/Clownfish/Function.pm (original)
+++ incubator/lucy/trunk/clownfish/lib/Clownfish/Function.pm Sun Feb 20 03:12:46 2011
@@ -31,34 +31,24 @@ my %new_PARAMS = (
micro_sym => undef,
docucomment => undef,
parcel => undef,
- inline => 0,
- exposure => 'parcel',
+ inline => undef,
+ exposure => undef,
);
sub new {
my ( $either, %args ) = @_;
verify_args( \%new_PARAMS, %args ) or confess $@;
$args{inline} ||= 0;
- $args{parcel} = Clownfish::Parcel->acquire($args{parcel});
- my $class_class = ref($either) || $either;
- my $self = $class_class->_new(
- @args{ qw( parcel exposure class_name class_cnick micro_sym
- return_type param_list docucomment inline ) } );
-
- # Validate.
- confess("class_name is mandatory")
- unless defined $self->get_class_name;
- confess( "Invalid micro_sym: '" . $self->micro_sym . "'" )
- unless $self->micro_sym =~ /^[a-z0-9_]+$/;
-
- return $self;
+ $args{parcel} = Clownfish::Parcel->acquire( $args{parcel} );
+ my $package = ref($either) || $either;
+ return $package->_new(
+ @args{
+ qw( parcel exposure class_name class_cnick micro_sym
+ return_type param_list docucomment inline )
+ }
+ );
}
-sub void { shift->get_return_type->is_void }
-
-sub full_func_sym { shift->SUPER::full_sym }
-sub short_func_sym { shift->SUPER::short_sym }
-
1;
__END__
Modified: incubator/lucy/trunk/clownfish/src/CFCFunction.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCFunction.c?rev=1072483&r1=1072482&r2=1072483&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCFunction.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCFunction.c Sun Feb 20 03:12:46 2011
@@ -19,6 +19,11 @@
#include "perl.h"
#include "XSUB.h"
+#ifndef true;
+ #define true 1
+ #define false 0
+#endif
+
#define CFC_NEED_FUNCTION_STRUCT_DEF
#include "CFCFunction.h"
#include "CFCParcel.h"
@@ -40,6 +45,19 @@ CFCFunction_new(CFCParcel *parcel, const
micro_sym, return_type, param_list, docucomment, is_inline);
}
+static int
+S_validate_micro_sym(const char *micro_sym)
+{
+ size_t i;
+ size_t len = strlen(micro_sym);
+ if (!len) { return false; }
+ for (i = 0; i < len; i++) {
+ char c = micro_sym[i];
+ if (!islower(c) && !isdigit(c) && c != '_') { return false; }
+ }
+ return true;
+}
+
CFCFunction*
CFCFunction_init(CFCFunction *self, CFCParcel *parcel, const char *exposure,
const char *class_name, const char *class_cnick,
@@ -47,11 +65,16 @@ CFCFunction_init(CFCFunction *self, CFCP
CFCParamList *param_list, CFCDocuComment *docucomment,
int is_inline)
{
+
exposure = exposure ? exposure : "parcel";
CFCSymbol_init((CFCSymbol*)self, parcel, exposure, class_name,
class_cnick, micro_sym);
+ CFCUTIL_NULL_CHECK(class_name);
CFCUTIL_NULL_CHECK(return_type);
CFCUTIL_NULL_CHECK(param_list);
+ if (!S_validate_micro_sym(micro_sym)) {
+ croak("Invalid micro_sym: '%s'", micro_sym);
+ }
self->return_type = (CFCType*)CFCBase_incref((CFCBase*)return_type);
self->param_list = (CFCParamList*)CFCBase_incref((CFCBase*)param_list);
self->docucomment = (CFCDocuComment*)CFCBase_incref((CFCBase*)docucomment);
@@ -92,3 +115,21 @@ CFCFunction_inline(CFCFunction *self)
return self->is_inline;
}
+int
+CFCFunction_void(CFCFunction *self)
+{
+ return CFCType_is_void(self->return_type);
+}
+
+const char*
+CFCFunction_full_func_sym(CFCFunction *self)
+{
+ return CFCSymbol_full_sym((CFCSymbol*)self);
+}
+
+const char*
+CFCFunction_short_func_sym(CFCFunction *self)
+{
+ return CFCSymbol_short_sym((CFCSymbol*)self);
+}
+
Modified: incubator/lucy/trunk/clownfish/src/CFCFunction.h
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCFunction.h?rev=1072483&r1=1072482&r2=1072483&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCFunction.h (original)
+++ incubator/lucy/trunk/clownfish/src/CFCFunction.h Sun Feb 20 03:12:46 2011
@@ -65,5 +65,14 @@ CFCFunction_get_docucomment(CFCFunction
int
CFCFunction_inline(CFCFunction *self);
+int
+CFCFunction_void(CFCFunction *self);
+
+const char*
+CFCFunction_full_func_sym(CFCFunction *self);
+
+const char*
+CFCFunction_short_func_sym(CFCFunction *self);
+
#endif /* H_CFCFUNCTION */