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/26 12:45:15 UTC

[1/3] lucy-clownfish git commit: Add return value to generated Perl code samples

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


Add return value to generated 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/5f6a9cb5
Tree: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/tree/5f6a9cb5
Diff: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/diff/5f6a9cb5

Branch: refs/heads/master
Commit: 5f6a9cb5a63571123233f9e216281a30bcc5e7b0
Parents: ac9fc2b
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Thu Feb 11 13:58:00 2016 +0100
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Fri Feb 26 12:10:27 2016 +0100

----------------------------------------------------------------------
 compiler/src/CFCPerlPod.c                       | 66 ++++++++++++--------
 .../perl/buildlib/Clownfish/Build/Binding.pm    | 26 ++------
 2 files changed, 45 insertions(+), 47 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/5f6a9cb5/compiler/src/CFCPerlPod.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCPerlPod.c b/compiler/src/CFCPerlPod.c
index 632eb35..ec0bf87 100644
--- a/compiler/src/CFCPerlPod.c
+++ b/compiler/src/CFCPerlPod.c
@@ -71,15 +71,15 @@ S_gen_code_sample(CFCCallable *func, const char *alias, CFCClass *klass,
                   int is_constructor);
 
 static char*
-S_gen_positional_sample(const char *invocant, const char *alias,
-                        CFCParamList *param_list, size_t start);
+S_gen_positional_sample(const char *prologue, CFCParamList *param_list,
+                        size_t start);
 
 static char*
-S_gen_labeled_sample(const char *invocant, const char *alias,
-                     CFCParamList *param_list, size_t start);
+S_gen_labeled_sample(const char *prologue, CFCParamList *param_list,
+                     size_t start);
 
 static char*
-S_perl_var_name(CFCVariable *var);
+S_perl_var_name(CFCType *type);
 
 static char*
 S_camel_to_lower(const char *camel);
@@ -392,38 +392,54 @@ CFCPerlPod_gen_subroutine_pod(CFCCallable *func,
 static char*
 S_gen_code_sample(CFCCallable *func, const char *alias, CFCClass *klass,
                   int is_constructor) {
-    char *invocant = NULL;
+    char *prologue = CFCUtil_sprintf("");
+
+    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);
+            prologue = CFCUtil_cat(prologue, "my $", ret_name, " = ", NULL);
+            FREEMEM(ret_name);
+        }
+        else {
+            prologue = CFCUtil_cat(prologue, "my $retval = ", NULL);
+        }
+    }
 
     if (is_constructor) {
-        invocant = CFCUtil_strdup(CFCClass_get_name(klass));
+        const char *invocant = CFCClass_get_name(klass);
+        prologue = CFCUtil_cat(prologue, invocant, NULL);
     }
     else {
         char *lower = S_camel_to_lower(CFCClass_get_struct_sym(klass));
-        invocant = CFCUtil_sprintf("$%s", lower);
+        prologue = CFCUtil_cat(prologue, "$", lower, NULL);
         FREEMEM(lower);
     }
 
+    prologue = CFCUtil_cat(prologue, "->", alias, NULL);
+
     CFCParamList *param_list = CFCCallable_get_param_list(func);
     size_t        num_vars   = CFCParamList_num_vars(param_list);
     size_t        start      = is_constructor ? 0 : 1;
     char         *sample     = NULL;
 
     if (start == num_vars) {
-        sample = CFCUtil_sprintf("    %s->%s();\n", invocant, alias);
+        sample = CFCUtil_sprintf("    %s();\n", prologue);
     }
     else if (is_constructor || num_vars - start >= 2) {
-        sample = S_gen_labeled_sample(invocant, alias, param_list, start);
+        sample = S_gen_labeled_sample(prologue, param_list, start);
     }
     else {
-        sample = S_gen_positional_sample(invocant, alias, param_list, start);
+        sample = S_gen_positional_sample(prologue, param_list, start);
     }
 
+    FREEMEM(prologue);
     return sample;
 }
 
 static char*
-S_gen_positional_sample(const char *invocant, const char *alias,
-                        CFCParamList *param_list, size_t start) {
+S_gen_positional_sample(const char *prologue, CFCParamList *param_list,
+                        size_t start) {
     size_t        num_vars = CFCParamList_num_vars(param_list);
     CFCVariable **vars     = CFCParamList_get_variables(param_list);
     const char  **inits    = CFCParamList_get_initial_values(param_list);
@@ -434,14 +450,13 @@ S_gen_positional_sample(const char *invocant, const char *alias,
     }
 
     const char *name = CFCVariable_get_name(vars[start]);
-    char *sample
-        = CFCUtil_sprintf("    %s->%s($%s);\n", invocant, alias, name);
+    char *sample = CFCUtil_sprintf("    %s($%s);\n", prologue, name);
 
     const char *init = inits[start];
     if (init) {
         if (strcmp(init, "NULL") == 0) { init = "undef"; }
-        char *def_sample = CFCUtil_sprintf("    %s->%s();  # default: %s\n",
-                                           invocant, alias, init);
+        char *def_sample = CFCUtil_sprintf("    %s();  # default: %s\n",
+                                           prologue, init);
         sample = CFCUtil_cat(sample, def_sample, NULL);
         FREEMEM(def_sample);
     }
@@ -450,8 +465,8 @@ S_gen_positional_sample(const char *invocant, const char *alias,
 }
 
 static char*
-S_gen_labeled_sample(const char *invocant, const char *alias,
-                     CFCParamList *param_list, size_t start) {
+S_gen_labeled_sample(const char *prologue, CFCParamList *param_list,
+                     size_t start) {
     size_t        num_vars = CFCParamList_num_vars(param_list);
     CFCVariable **vars     = CFCParamList_get_variables(param_list);
     const char  **inits    = CFCParamList_get_initial_values(param_list);
@@ -467,7 +482,8 @@ S_gen_labeled_sample(const char *invocant, const char *alias,
         size_t label_len = strlen(label);
         if (label_len > max_label_len) { max_label_len = label_len; }
 
-        char *perl_var = S_perl_var_name(var);
+        CFCType *type = CFCVariable_get_type(var);
+        char *perl_var = S_perl_var_name(type);
         size_t perl_var_len = strlen(perl_var);
         if (perl_var_len > max_var_len) { max_var_len = perl_var_len; }
         FREEMEM(perl_var);
@@ -478,7 +494,8 @@ S_gen_labeled_sample(const char *invocant, const char *alias,
     for (size_t i = start; i < num_vars; i++) {
         CFCVariable *var      = vars[i];
         const char  *label    = CFCVariable_get_name(var);
-        char        *perl_var = S_perl_var_name(var);
+        CFCType     *type     = CFCVariable_get_type(var);
+        char        *perl_var = S_perl_var_name(type);
         perl_var = CFCUtil_cat(perl_var, ",", NULL);
 
         char       *comment = NULL;
@@ -503,18 +520,17 @@ S_gen_labeled_sample(const char *invocant, const char *alias,
     }
 
     const char pattern[] =
-        "    %s->%s(\n"
+        "    %s(\n"
         "%s"
         "    );\n";
-    char *sample = CFCUtil_sprintf(pattern, invocant, alias, params);
+    char *sample = CFCUtil_sprintf(pattern, prologue, params);
 
     FREEMEM(params);
     return sample;
 }
 
 static char*
-S_perl_var_name(CFCVariable *var) {
-    CFCType    *type      = CFCVariable_get_type(var);
+S_perl_var_name(CFCType *type) {
     const char *specifier = CFCType_get_specifier(type);
     char       *perl_name = NULL;
 

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/5f6a9cb5/runtime/perl/buildlib/Clownfish/Build/Binding.pm
----------------------------------------------------------------------
diff --git a/runtime/perl/buildlib/Clownfish/Build/Binding.pm b/runtime/perl/buildlib/Clownfish/Build/Binding.pm
index b58205a..1c5cb58 100644
--- a/runtime/perl/buildlib/Clownfish/Build/Binding.pm
+++ b/runtime/perl/buildlib/Clownfish/Build/Binding.pm
@@ -269,11 +269,8 @@ sub bind_charbuf {
     $buf->cat_char(ord("\n"));
     print $buf->to_string;
 END_SYNOPSIS
-    my $constructor = <<'END_CONSTRUCTOR';
-    my $buf = Clownfish::CharBuf->new( capacity => 256 );
-END_CONSTRUCTOR
     $pod_spec->set_synopsis($synopsis);
-    $pod_spec->add_constructor( sample => $constructor );
+    $pod_spec->add_constructor();
 
     my $binding = Clownfish::CFC::Binding::Perl::Class->new(
         parcel     => "Clownfish",
@@ -487,9 +484,6 @@ sub bind_hash {
     $hash->store($key, $value);
     my $value = $hash->fetch($key);
 END_SYNOPSIS
-    my $constructor = <<'END_CONSTRUCTOR';
-    my $hash = Clownfish::Hash->new( capacity => 256 );
-END_CONSTRUCTOR
     my $store_pod = <<'END_POD';
 =head2 store
 
@@ -498,7 +492,7 @@ END_CONSTRUCTOR
 Store a key-value pair.
 END_POD
     $pod_spec->set_synopsis($synopsis);
-    $pod_spec->add_constructor( sample => $constructor );
+    $pod_spec->add_constructor();
     $pod_spec->add_method(
         method => 'Store',
         alias  => 'store',
@@ -836,9 +830,6 @@ sub bind_vector {
     $vector->store($tick, $value);
     my $value = $vector->fetch($tick);
 END_SYNOPSIS
-    my $constructor = <<'END_CONSTRUCTOR';
-    my $vector = Clownfish::Vector->new( capacity => 256 );
-END_CONSTRUCTOR
     my $store_pod = <<'END_POD';
 =head2 store
 
@@ -847,7 +838,7 @@ END_CONSTRUCTOR
 Store an element at index C<tick>, possibly displacing an existing element.
 END_POD
     $pod_spec->set_synopsis($synopsis);
-    $pod_spec->add_constructor( sample => $constructor );
+    $pod_spec->add_constructor();
     $pod_spec->add_method(
         method => 'Store',
         alias  => 'store',
@@ -912,21 +903,12 @@ END_SYNOPSIS
     my $fetch_class_sample = <<'END_CONSTRUCTOR';
     my $class = Clownfish::Class->fetch_class($class_name);
 END_CONSTRUCTOR
-    my $singleton_sample = <<'END_CONSTRUCTOR';
-    my $class = Clownfish::Class->singleton(
-        class_name => $class_name,
-        parent     => $parent,
-    );
-END_CONSTRUCTOR
     $pod_spec->set_synopsis($synopsis);
     $pod_spec->add_constructor(
         alias  => 'fetch_class',
         sample => $fetch_class_sample,
     );
-    $pod_spec->add_constructor(
-        alias  => 'singleton',
-        sample => $singleton_sample,
-    );
+    $pod_spec->add_constructor( alias  => 'singleton' );
 
     my $xs_code = <<'END_XS_CODE';
 MODULE = Clownfish   PACKAGE = Clownfish::Class


[2/3] lucy-clownfish git commit: Change variable names in labeled sample params

Posted by nw...@apache.org.
Change variable names in labeled sample params

Derive the variable name from the parameter name, not the type.
Using types can lead to parameters with duplicate variable names,
or parameter variables matching the invocant.


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

Branch: refs/heads/master
Commit: 72f27b7b30e6db310622ccccc71a6b8442d8fd02
Parents: 5f6a9cb
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Fri Feb 26 12:20:46 2016 +0100
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Fri Feb 26 12:20:46 2016 +0100

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


http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/72f27b7b/compiler/src/CFCPerlPod.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCPerlPod.c b/compiler/src/CFCPerlPod.c
index ec0bf87..142ffdb 100644
--- a/compiler/src/CFCPerlPod.c
+++ b/compiler/src/CFCPerlPod.c
@@ -471,35 +471,21 @@ S_gen_labeled_sample(const char *prologue, CFCParamList *param_list,
     CFCVariable **vars     = CFCParamList_get_variables(param_list);
     const char  **inits    = CFCParamList_get_initial_values(param_list);
 
-    size_t max_label_len = 0;
-    size_t max_var_len   = 0;
+    size_t max_name_len = 0;
 
-    // Find maximum length of label and Perl variable.
+    // Find maximum length of parameter name.
     for (size_t i = start; i < num_vars; i++) {
-        CFCVariable *var = vars[i];
-
-        const char *label = CFCVariable_get_name(var);
-        size_t label_len = strlen(label);
-        if (label_len > max_label_len) { max_label_len = label_len; }
-
-        CFCType *type = CFCVariable_get_type(var);
-        char *perl_var = S_perl_var_name(type);
-        size_t perl_var_len = strlen(perl_var);
-        if (perl_var_len > max_var_len) { max_var_len = perl_var_len; }
-        FREEMEM(perl_var);
+        const char *name = CFCVariable_get_name(vars[i]);
+        size_t name_len = strlen(name);
+        if (name_len > max_name_len) { max_name_len = name_len; }
     }
 
     char *params = CFCUtil_strdup("");
 
     for (size_t i = start; i < num_vars; i++) {
-        CFCVariable *var      = vars[i];
-        const char  *label    = CFCVariable_get_name(var);
-        CFCType     *type     = CFCVariable_get_type(var);
-        char        *perl_var = S_perl_var_name(type);
-        perl_var = CFCUtil_cat(perl_var, ",", NULL);
-
-        char       *comment = NULL;
+        const char *name    = CFCVariable_get_name(vars[i]);
         const char *init    = inits[i];
+        char       *comment = NULL;
 
         if (init) {
             if (strcmp(init, "NULL") == 0) { init = "undef"; }
@@ -510,13 +496,12 @@ S_gen_labeled_sample(const char *prologue, CFCParamList *param_list,
         }
 
         char *line = CFCUtil_sprintf("        %-*s => $%-*s  # %s\n",
-                                     max_label_len, label,
-                                     max_var_len + 1, perl_var,
+                                     (int)max_name_len, name,
+                                     (int)max_name_len, name,
                                      comment);
         params = CFCUtil_cat(params, line, NULL);
         FREEMEM(line);
         FREEMEM(comment);
-        FREEMEM(perl_var);
     }
 
     const char pattern[] =


[3/3] lucy-clownfish git commit: Fix documentation of DocuComments

Posted by nw...@apache.org.
Fix documentation of DocuComments


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

Branch: refs/heads/master
Commit: fd74182c1f067392da659511dfdef0f587432bba
Parents: 72f27b7
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Fri Feb 26 12:43:48 2016 +0100
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Fri Feb 26 12:43:48 2016 +0100

----------------------------------------------------------------------
 runtime/core/Clownfish/Docs/WritingClasses.md | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/fd74182c/runtime/core/Clownfish/Docs/WritingClasses.md
----------------------------------------------------------------------
diff --git a/runtime/core/Clownfish/Docs/WritingClasses.md b/runtime/core/Clownfish/Docs/WritingClasses.md
index bbd4f6d..350a42d 100644
--- a/runtime/core/Clownfish/Docs/WritingClasses.md
+++ b/runtime/core/Clownfish/Docs/WritingClasses.md
@@ -535,17 +535,19 @@ DocuComments are multi-line C-style comments that start with `/**`. They
 immediately precede the documented class, inert function, or method.
 A left border consisting of whitespace and asterisks is stripped.
 
-The DocuComment for a class should start with a sentence (everything up until
-the first period `.`) in the format "class name - short description."
+The DocuComment for a class should start with a short description (everything
+up until the first period `.`) which may appear in the name section of a
+man page, for example.
 
 DocuComments for functions and methods may end with a series of `@param` and
 `@return` directives which document the parameters and return values.
 
 Example:
 
-    /** Train - Class describing a train.
+    /** Class describing a train.
      *
-     * The Train class describes a train.
+     * The Train class describes a train. It extends the Vehicle class and
+     * adds some useful properties specific to trains.
      */
     public class Train inherits Vehicle {
         /** Create a new Train object.