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;
}