You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by nw...@apache.org on 2013/09/28 19:33:04 UTC

[lucy-commits] [04/11] git commit: refs/heads/cfish-string-prep1 - Fix Perl typemap for non-const Strings

Fix Perl typemap for non-const Strings


Project: http://git-wip-us.apache.org/repos/asf/lucy/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/672419f9
Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/672419f9
Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/672419f9

Branch: refs/heads/cfish-string-prep1
Commit: 672419f928877c75fcecc3e600364bfc4f4a5e4f
Parents: 3accd4d
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Sat Sep 28 17:08:15 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Sat Sep 28 17:08:15 2013 +0200

----------------------------------------------------------------------
 clownfish/compiler/src/CFCPerlTypeMap.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy/blob/672419f9/clownfish/compiler/src/CFCPerlTypeMap.c
----------------------------------------------------------------------
diff --git a/clownfish/compiler/src/CFCPerlTypeMap.c b/clownfish/compiler/src/CFCPerlTypeMap.c
index 6ce222f..32fbc53 100644
--- a/clownfish/compiler/src/CFCPerlTypeMap.c
+++ b/clownfish/compiler/src/CFCPerlTypeMap.c
@@ -275,10 +275,19 @@ CFCPerlTypeMap_write_xs_typemap(CFCHierarchy *hierarchy) {
 
         start = CFCUtil_cat(start, full_struct_sym, "*\t", vtable_var, "_\n",
                             NULL);
+        const char *allocation;
+        if (strcmp(full_struct_sym, "cfish_String") == 0) {
+            // Share buffers rather than copy between Perl scalars and
+            // Clownfish string types.
+            allocation = "alloca(cfish_SStr_size())";
+        }
+        else {
+            allocation = "NULL";
+        }
         input = CFCUtil_cat(input, vtable_var, "_\n"
                             "    $var = (", full_struct_sym,
                             "*)XSBind_sv_to_cfish_obj($arg, ", vtable_var,
-                            ", NULL);\n\n", NULL);
+                            ", ", allocation, ");\n\n", NULL);
 
         output = CFCUtil_cat(output, vtable_var, "_\n"
                              "    $arg = (SV*)CFISH_Obj_To_Host((cfish_Obj*)$var);\n"