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 2016/02/27 15:39:39 UTC

[1/2] lucy-clownfish git commit: Use $arrayref and $hashref in Perl code samples

Repository: lucy-clownfish
Updated Branches:
  refs/heads/master fd74182c1 -> 888627fda


Use $arrayref and $hashref in Perl code samples


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

Branch: refs/heads/master
Commit: 55a44b19a323f843c10d64dacbc3c7f92f9767b6
Parents: fd74182
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Sat Feb 27 15:03:10 2016 +0100
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Sat Feb 27 15:13:01 2016 +0100

----------------------------------------------------------------------
 compiler/src/CFCPerlPod.c | 30 +++++++++++++++++++-----------
 1 file changed, 19 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/55a44b19/compiler/src/CFCPerlPod.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCPerlPod.c b/compiler/src/CFCPerlPod.c
index 142ffdb..19a35b4 100644
--- a/compiler/src/CFCPerlPod.c
+++ b/compiler/src/CFCPerlPod.c
@@ -79,7 +79,7 @@ S_gen_labeled_sample(const char *prologue, CFCParamList *param_list,
                      size_t start);
 
 static char*
-S_perl_var_name(CFCType *type);
+S_perl_var_name(CFCType *type, int is_ctor_retval);
 
 static char*
 S_camel_to_lower(const char *camel);
@@ -397,7 +397,7 @@ S_gen_code_sample(CFCCallable *func, const char *alias, CFCClass *klass,
     CFCType *ret_type = CFCCallable_get_return_type(func);
     if (!CFCType_is_void(ret_type)) {
         if (is_constructor) {
-            char *ret_name = S_perl_var_name(ret_type);
+            char *ret_name = S_perl_var_name(ret_type, is_constructor);
             prologue = CFCUtil_cat(prologue, "my $", ret_name, " = ", NULL);
             FREEMEM(ret_name);
         }
@@ -515,22 +515,30 @@ S_gen_labeled_sample(const char *prologue, CFCParamList *param_list,
 }
 
 static char*
-S_perl_var_name(CFCType *type) {
+S_perl_var_name(CFCType *type, int is_ctor_retval) {
     const char *specifier = CFCType_get_specifier(type);
     char       *perl_name = NULL;
 
     if (CFCType_is_object(type)) {
-        // Skip parcel prefix.
-        if (islower(*specifier)) {
-            for (specifier++; *specifier; specifier++) {
-                if (*specifier == '_') {
-                    specifier++;
-                    break;
+        if (!is_ctor_retval && strcmp(specifier, "cfish_Vector") == 0) {
+            perl_name = CFCUtil_strdup("arrayref");
+        }
+        else if (!is_ctor_retval && strcmp(specifier, "cfish_Hash") == 0) {
+            perl_name = CFCUtil_strdup("hashref");
+        }
+        else {
+            // Skip parcel prefix.
+            if (islower(*specifier)) {
+                for (specifier++; *specifier; specifier++) {
+                    if (*specifier == '_') {
+                        specifier++;
+                        break;
+                    }
                 }
             }
-        }
 
-        perl_name = S_camel_to_lower(specifier);
+            perl_name = S_camel_to_lower(specifier);
+        }
     }
     else if (CFCType_is_integer(type)) {
         if (strcmp(specifier, "bool") == 0) {


[2/2] lucy-clownfish git commit: Derive variable name of return value from type

Posted by nw...@apache.org.
Derive variable name of return value from type

Only make an exception if the return type matches the invocant to
avoid confusing code samples like

    my $string = $string->trim;


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

Branch: refs/heads/master
Commit: 888627fdab9f19e364a024b0085d121b3b18cac7
Parents: 55a44b1
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Sat Feb 27 15:15:55 2016 +0100
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Sat Feb 27 15:15:55 2016 +0100

----------------------------------------------------------------------
 compiler/src/CFCPerlPod.c | 23 ++++++++++++++---------
 1 file changed, 14 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/888627fd/compiler/src/CFCPerlPod.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCPerlPod.c b/compiler/src/CFCPerlPod.c
index 19a35b4..855b698 100644
--- a/compiler/src/CFCPerlPod.c
+++ b/compiler/src/CFCPerlPod.c
@@ -392,18 +392,24 @@ CFCPerlPod_gen_subroutine_pod(CFCCallable *func,
 static char*
 S_gen_code_sample(CFCCallable *func, const char *alias, CFCClass *klass,
                   int is_constructor) {
-    char *prologue = CFCUtil_sprintf("");
+    char *prologue       = CFCUtil_sprintf("");
+    char *class_var_name = S_camel_to_lower(CFCClass_get_struct_sym(klass));
 
     CFCType *ret_type = CFCCallable_get_return_type(func);
     if (!CFCType_is_void(ret_type)) {
-        if (is_constructor) {
-            char *ret_name = S_perl_var_name(ret_type, is_constructor);
-            prologue = CFCUtil_cat(prologue, "my $", ret_name, " = ", NULL);
-            FREEMEM(ret_name);
+        char *ret_name = S_perl_var_name(ret_type, is_constructor);
+
+        if (!is_constructor && strcmp(ret_name, class_var_name) == 0) {
+            // Return type equals `klass`. Use a generic variable name
+            // to avoid confusing code samples like
+            // `my $string = $string->trim`.
+            prologue = CFCUtil_cat(prologue, "my $result = ", NULL);
         }
         else {
-            prologue = CFCUtil_cat(prologue, "my $retval = ", NULL);
+            prologue = CFCUtil_cat(prologue, "my $", ret_name, " = ", NULL);
         }
+
+        FREEMEM(ret_name);
     }
 
     if (is_constructor) {
@@ -411,9 +417,7 @@ S_gen_code_sample(CFCCallable *func, const char *alias, CFCClass *klass,
         prologue = CFCUtil_cat(prologue, invocant, NULL);
     }
     else {
-        char *lower = S_camel_to_lower(CFCClass_get_struct_sym(klass));
-        prologue = CFCUtil_cat(prologue, "$", lower, NULL);
-        FREEMEM(lower);
+        prologue = CFCUtil_cat(prologue, "$", class_var_name, NULL);
     }
 
     prologue = CFCUtil_cat(prologue, "->", alias, NULL);
@@ -433,6 +437,7 @@ S_gen_code_sample(CFCCallable *func, const char *alias, CFCClass *klass,
         sample = S_gen_positional_sample(prologue, param_list, start);
     }
 
+    FREEMEM(class_var_name);
     FREEMEM(prologue);
     return sample;
 }