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/23 03:11:14 UTC
[lucy-commits] svn commit: r1073577 - in /incubator/lucy/trunk/clownfish: lib/Clownfish.xs
lib/Clownfish/Method.pm src/CFCMethod.c src/CFCMethod.h
Author: marvin
Date: Wed Feb 23 02:11:14 2011
New Revision: 1073577
URL: http://svn.apache.org/viewvc?rev=1073577&view=rev
Log:
Move some string symbols in CFCMethod from Perl to C.
Modified:
incubator/lucy/trunk/clownfish/lib/Clownfish.xs
incubator/lucy/trunk/clownfish/lib/Clownfish/Method.pm
incubator/lucy/trunk/clownfish/src/CFCMethod.c
incubator/lucy/trunk/clownfish/src/CFCMethod.h
Modified: incubator/lucy/trunk/clownfish/lib/Clownfish.xs
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/lib/Clownfish.xs?rev=1073577&r1=1073576&r2=1073577&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/lib/Clownfish.xs (original)
+++ incubator/lucy/trunk/clownfish/lib/Clownfish.xs Wed Feb 23 02:11:14 2011
@@ -584,10 +584,14 @@ ALIAS:
get_macro_sym = 2
_set_short_typedef = 3
short_typedef = 4
- abstract = 6
- _set_novel = 7
- novel = 8
- final = 10
+ full_typedef = 6
+ full_callback_sym = 8
+ full_override_sym = 10
+ abstract = 12
+ _set_novel = 13
+ novel = 14
+ final = 16
+ self_type = 18
PPCODE:
{
START_SET_OR_GET_SWITCH
@@ -604,18 +608,38 @@ PPCODE:
retval = newSVpvn(short_typedef, strlen(short_typedef));
}
break;
- case 6:
+ case 6: {
+ const char *value = CFCMethod_full_typedef(self);
+ retval = newSVpvn(value, strlen(value));
+ }
+ break;
+ case 8: {
+ const char *value = CFCMethod_full_callback_sym(self);
+ retval = newSVpvn(value, strlen(value));
+ }
+ break;
+ case 10: {
+ const char *value = CFCMethod_full_override_sym(self);
+ retval = newSVpvn(value, strlen(value));
+ }
+ break;
+ case 12:
retval = newSViv(CFCMethod_abstract(self));
break;
- case 7:
+ case 13:
CFCMethod_set_novel(self, !!SvIV(ST(1)));
break;
- case 8:
+ case 14:
retval = newSViv(CFCMethod_novel(self));
break;
- case 10:
+ case 16:
retval = newSViv(CFCMethod_final(self));
break;
+ case 18: {
+ CFCType *type = CFCMethod_self_type(self);
+ retval = newRV(CFCBase_get_perl_obj((CFCBase*)type));
+ }
+ break;
END_SET_OR_GET_SWITCH
}
Modified: incubator/lucy/trunk/clownfish/lib/Clownfish/Method.pm
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/lib/Clownfish/Method.pm?rev=1073577&r1=1073576&r2=1073577&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/lib/Clownfish/Method.pm (original)
+++ incubator/lucy/trunk/clownfish/lib/Clownfish/Method.pm Wed Feb 23 02:11:14 2011
@@ -73,8 +73,6 @@ sub new {
return $self;
}
-sub self_type { shift->get_param_list->get_variables->[0]->get_type }
-
sub short_method_sym {
my ( $self, $invoker ) = @_;
confess("Missing invoker") unless $invoker;
@@ -93,14 +91,6 @@ sub full_offset_sym {
return $self->full_method_sym($invoker) . '_OFFSET';
}
-sub full_callback_sym { shift->full_func_sym . "_CALLBACK" }
-sub full_override_sym { shift->full_func_sym . "_OVERRIDE" }
-
-sub full_typedef {
- my $self = shift;
- return $self->get_prefix . $self->short_typedef;
-}
-
sub override {
my ( $self, $orig ) = @_;
Modified: incubator/lucy/trunk/clownfish/src/CFCMethod.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCMethod.c?rev=1073577&r1=1073576&r2=1073577&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCMethod.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCMethod.c Wed Feb 23 02:11:14 2011
@@ -27,6 +27,7 @@
#include "CFCParamList.h"
#include "CFCParcel.h"
#include "CFCDocuComment.h"
+#include "CFCVariable.h"
#ifndef true
#define true 1
@@ -37,6 +38,9 @@ struct CFCMethod {
CFCFunction function;
char *macro_sym;
char *short_typedef;
+ char *full_typedef;
+ char *full_callback_sym;
+ char *full_override_sym;
int is_final;
int is_abstract;
int is_novel;
@@ -68,9 +72,23 @@ CFCMethod_init(CFCMethod *self, CFCParce
false);
self->macro_sym = CFCUtil_strdup(macro_sym);
self->short_typedef = NULL;
+ self->full_typedef = NULL;
self->is_final = is_final;
self->is_abstract = is_abstract;
+ const char *full_func_sym = CFCFunction_full_func_sym((CFCFunction*)self);
+ size_t amount = strlen(full_func_sym) + sizeof("_OVERRIDE") + 1;
+ self->full_callback_sym = (char*)malloc(amount);
+ self->full_override_sym = (char*)malloc(amount);
+ if (!self->full_callback_sym || !self->full_override_sym) {
+ croak("malloc failed");
+ }
+ int check = sprintf(self->full_callback_sym, "%s_CALLBACK",
+ full_func_sym);
+ if (check < 0) { croak("sprintf failed"); }
+ check = sprintf(self->full_override_sym, "%s_OVERRIDE", full_func_sym);
+ if (check < 0) { croak("sprintf failed"); }
+
// Assume that this method is novel until we discover when applying
// inheritance that it was overridden.
self->is_novel = 1;
@@ -83,6 +101,9 @@ CFCMethod_destroy(CFCMethod *self)
{
free(self->macro_sym);
free(self->short_typedef);
+ free(self->full_typedef);
+ free(self->full_callback_sym);
+ free(self->full_override_sym);
CFCFunction_destroy((CFCFunction*)self);
}
@@ -96,7 +117,21 @@ void
CFCMethod_set_short_typedef(CFCMethod *self, const char *short_typedef)
{
free(self->short_typedef);
- self->short_typedef = short_typedef ? CFCUtil_strdup(short_typedef) : NULL;
+ free(self->full_typedef);
+ if (short_typedef) {
+ self->short_typedef = CFCUtil_strdup(short_typedef);
+ const char *prefix = CFCSymbol_get_prefix((CFCSymbol*)self);
+ size_t amount = strlen(prefix) + strlen(short_typedef) + 1;
+ self->full_typedef = (char*)malloc(amount);
+ if (!self->full_typedef) { croak("malloc failed"); }
+ int check = sprintf(self->full_typedef, "%s%s", prefix,
+ short_typedef);
+ if (check < 0) { croak("sprintf failed"); }
+ }
+ else {
+ self->short_typedef = NULL;
+ self->full_typedef = NULL;
+ }
}
const char*
@@ -105,6 +140,24 @@ CFCMethod_short_typedef(CFCMethod *self)
return self->short_typedef;
}
+const char*
+CFCMethod_full_typedef(CFCMethod *self)
+{
+ return self->full_typedef;
+}
+
+const char*
+CFCMethod_full_callback_sym(CFCMethod *self)
+{
+ return self->full_callback_sym;
+}
+
+const char*
+CFCMethod_full_override_sym(CFCMethod *self)
+{
+ return self->full_override_sym;
+}
+
int
CFCMethod_final(CFCMethod *self)
{
@@ -129,3 +182,10 @@ CFCMethod_novel(CFCMethod *self)
return self->is_novel;
}
+CFCType*
+CFCMethod_self_type(CFCMethod *self)
+{
+ CFCVariable **vars = CFCParamList_get_variables(self->function.param_list);
+ return CFCVariable_get_type(vars[0]);
+}
+
Modified: incubator/lucy/trunk/clownfish/src/CFCMethod.h
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCMethod.h?rev=1073577&r1=1073576&r2=1073577&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCMethod.h (original)
+++ incubator/lucy/trunk/clownfish/src/CFCMethod.h Wed Feb 23 02:11:14 2011
@@ -51,6 +51,15 @@ CFCMethod_set_short_typedef(CFCMethod *s
const char*
CFCMethod_short_typedef(CFCMethod *self);
+const char*
+CFCMethod_full_typedef(CFCMethod *self);
+
+const char*
+CFCMethod_full_callback_sym(CFCMethod *self);
+
+const char*
+CFCMethod_full_override_sym(CFCMethod *self);
+
int
CFCMethod_final(CFCMethod *self);
@@ -63,5 +72,8 @@ CFCMethod_set_novel(CFCMethod *self, int
int
CFCMethod_novel(CFCMethod *self);
+struct CFCType*
+CFCMethod_self_type(CFCMethod *self);
+
#endif /* H_CFCMETHOD */