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/06/21 04:07:25 UTC
[lucy-commits] svn commit: r1137842 - in /incubator/lucy/trunk/clownfish: lib/Clownfish.xs
lib/Clownfish/Binding/Core/Method.pm src/CFCBindMethod.c src/CFCBindMethod.h
Author: marvin
Date: Tue Jun 21 02:07:25 2011
New Revision: 1137842
URL: http://svn.apache.org/viewvc?rev=1137842&view=rev
Log:
Port callback_dec() and callback_obj_def() from
Clownfish::Binding::Core::Method to C.
Modified:
incubator/lucy/trunk/clownfish/lib/Clownfish.xs
incubator/lucy/trunk/clownfish/lib/Clownfish/Binding/Core/Method.pm
incubator/lucy/trunk/clownfish/src/CFCBindMethod.c
incubator/lucy/trunk/clownfish/src/CFCBindMethod.h
Modified: incubator/lucy/trunk/clownfish/lib/Clownfish.xs
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/lib/Clownfish.xs?rev=1137842&r1=1137841&r2=1137842&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/lib/Clownfish.xs (original)
+++ incubator/lucy/trunk/clownfish/lib/Clownfish.xs Tue Jun 21 02:07:25 2011
@@ -1706,3 +1706,19 @@ CODE:
RETVAL = S_sv_eat_c_string(CFCBindMeth_abstract_method_def(meth));
OUTPUT: RETVAL
+SV*
+callback_dec(unused, meth)
+ SV *unused;
+ CFCMethod *meth;
+CODE:
+ RETVAL = S_sv_eat_c_string(CFCBindMeth_callback_dec(meth));
+OUTPUT: RETVAL
+
+SV*
+_callback_obj_def(meth, offset)
+ CFCMethod *meth;
+ const char *offset;
+CODE:
+ RETVAL = S_sv_eat_c_string(CFCBindMeth_callback_obj_def(meth, offset));
+OUTPUT: RETVAL
+
Modified: incubator/lucy/trunk/clownfish/lib/Clownfish/Binding/Core/Method.pm
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/lib/Clownfish/Binding/Core/Method.pm?rev=1137842&r1=1137841&r2=1137842&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/lib/Clownfish/Binding/Core/Method.pm (original)
+++ incubator/lucy/trunk/clownfish/lib/Clownfish/Binding/Core/Method.pm Tue Jun 21 02:07:25 2011
@@ -84,22 +84,9 @@ sub _final_method_def {
END_STUFF
}
-sub callback_dec {
- my ( undef, $method ) = @_;
- my $callback_sym = $method->full_callback_sym;
- return qq|extern cfish_Callback $callback_sym;\n|;
-}
-
sub callback_obj_def {
my ( undef, %args ) = @_;
- my $method = $args{method};
- my $offset = $args{offset};
- my $macro_sym = $method->get_macro_sym;
- my $len = length($macro_sym);
- my $func_sym = $method->full_override_sym;
- my $callback_sym = $method->full_callback_sym;
- return qq|cfish_Callback $callback_sym = |
- . qq|{"$macro_sym", $len, (cfish_method_t)$func_sym, $offset};\n|;
+ return _callback_obj_def( @args{qw( method offset )} );
}
sub callback_def {
Modified: incubator/lucy/trunk/clownfish/src/CFCBindMethod.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCBindMethod.c?rev=1137842&r1=1137841&r2=1137842&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCBindMethod.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCBindMethod.c Tue Jun 21 02:07:25 2011
@@ -41,6 +41,36 @@ CFCBindMeth_typdef_dec(struct CFCMethod
}
char*
+CFCBindMeth_callback_dec(CFCMethod *method)
+{
+ const char *full_callback_sym = CFCMethod_full_callback_sym(method);
+ size_t size = strlen(full_callback_sym) + 50;
+ char *callback_dec = (char*)MALLOCATE(size);
+ sprintf(callback_dec, "extern cfish_Callback %s;\n", full_callback_sym);
+ return callback_dec;
+}
+
+char*
+CFCBindMeth_callback_obj_def(CFCMethod *method, const char *offset) {
+ const char *macro_sym = CFCMethod_get_macro_sym(method);
+ unsigned macro_sym_len = strlen(macro_sym);
+ const char *full_override_sym = CFCMethod_full_override_sym(method);
+ const char *full_callback_sym = CFCMethod_full_callback_sym(method);
+ char template[] =
+ "cfish_Callback %s = {\"%s\", %u, (cfish_method_t)%s, %s};\n";
+ size_t size = sizeof(template)
+ + macro_sym_len
+ + strlen(full_override_sym)
+ + strlen(full_callback_sym)
+ + strlen(offset)
+ + 30;
+ char *def = (char*)MALLOCATE(size);
+ sprintf(def, template, full_callback_sym, macro_sym, macro_sym_len,
+ full_override_sym, offset);
+ return def;
+}
+
+char*
CFCBindMeth_abstract_method_def(CFCMethod *method) {
CFCParamList *param_list = CFCMethod_get_param_list(method);
const char *params = CFCParamList_to_c(param_list);
Modified: incubator/lucy/trunk/clownfish/src/CFCBindMethod.h
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCBindMethod.h?rev=1137842&r1=1137841&r2=1137842&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCBindMethod.h (original)
+++ incubator/lucy/trunk/clownfish/src/CFCBindMethod.h Tue Jun 21 02:07:25 2011
@@ -27,6 +27,12 @@ char*
CFCBindMeth_typdef_dec(struct CFCMethod *method);
char*
+CFCBindMeth_callback_dec(struct CFCMethod *method);
+
+char*
+CFCBindMeth_callback_obj_def(struct CFCMethod *method, const char* offset);
+
+char*
CFCBindMeth_abstract_method_def(struct CFCMethod *method);
#ifdef __cplusplus