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