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 2015/08/30 19:18:17 UTC

[1/2] lucy-clownfish git commit: Try to lookup constructor POD by alias

Repository: lucy-clownfish
Updated Branches:
  refs/heads/master 0bd951aa9 -> 6f4f79e20


Try to lookup constructor POD by alias


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

Branch: refs/heads/master
Commit: 6f4f79e20c450d8477379de69070201a1cc5481c
Parents: f71e072
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Tue Aug 25 12:23:40 2015 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Sun Aug 30 19:16:42 2015 +0200

----------------------------------------------------------------------
 compiler/src/CFCPerlPod.c | 7 +++++++
 1 file changed, 7 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/6f4f79e2/compiler/src/CFCPerlPod.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCPerlPod.c b/compiler/src/CFCPerlPod.c
index 3699acd..822ee69 100644
--- a/compiler/src/CFCPerlPod.c
+++ b/compiler/src/CFCPerlPod.c
@@ -268,6 +268,13 @@ CFCPerlPod_constructors_pod(CFCPerlPod *self, CFCClass *klass) {
         }
         else {
             CFCFunction *init_func = CFCClass_function(klass, slot.func);
+            if (!init_func) {
+                init_func = CFCClass_function(klass, slot.alias);
+            }
+            if (!init_func) {
+                CFCUtil_die("Can't find constructor '%s' in class '%s'",
+                            slot.alias, CFCClass_get_name(klass));
+            }
             char *sub_pod
                 = CFCPerlPod_gen_subroutine_pod(init_func, slot.alias, klass,
                                                 slot.sample, class_name, true);


[2/2] lucy-clownfish git commit: Add POD for public novel methods by default

Posted by nw...@apache.org.
Add POD for public novel methods by default


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

Branch: refs/heads/master
Commit: f71e072acca38540c5ee8a448ece5b8d10c31f04
Parents: 0bd951a
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Thu Aug 20 16:03:37 2015 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Sun Aug 30 19:16:42 2015 +0200

----------------------------------------------------------------------
 compiler/src/CFCPerlPod.c                       | 77 +++++++++++++++-----
 .../perl/buildlib/Clownfish/Build/Binding.pm    | 20 +++--
 2 files changed, 69 insertions(+), 28 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/f71e072a/compiler/src/CFCPerlPod.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCPerlPod.c b/compiler/src/CFCPerlPod.c
index 8b728e0..3699acd 100644
--- a/compiler/src/CFCPerlPod.c
+++ b/compiler/src/CFCPerlPod.c
@@ -29,6 +29,7 @@
 #include "CFCMethod.h"
 #include "CFCParcel.h"
 #include "CFCParamList.h"
+#include "CFCPerlMethod.h"
 #include "CFCFunction.h"
 #include "CFCDocuComment.h"
 #include "CFCUri.h"
@@ -168,6 +169,7 @@ CFCPerlPod_methods_pod(CFCPerlPod *self, CFCClass *klass) {
     const char *class_name = CFCClass_get_name(klass);
     char *abstract_pod = CFCUtil_strdup("");
     char *methods_pod  = CFCUtil_strdup("");
+
     for (size_t i = 0; i < self->num_methods; i++) {
         NamePod meth_spec = self->methods[i];
         CFCMethod *method = CFCClass_method(klass, meth_spec.func);
@@ -198,6 +200,47 @@ CFCPerlPod_methods_pod(CFCPerlPod *self, CFCClass *klass) {
         FREEMEM(meth_pod);
     }
 
+    // Add POD for public novel methods by default.
+    CFCMethod **fresh_methods = CFCClass_fresh_methods(klass);
+    for (int meth_num = 0; fresh_methods[meth_num] != NULL; meth_num++) {
+        CFCMethod *method = fresh_methods[meth_num];
+        if (!CFCMethod_public(method) || !CFCMethod_novel(method)) {
+            continue;
+        }
+        if (CFCMethod_excluded_from_host(method)) {
+            continue;
+        }
+        if (!CFCMethod_can_be_bound(method)) {
+            continue;
+        }
+
+        const char *name = CFCMethod_get_name(method);
+
+        // Skip methods that were added manually.
+        int found = false;
+        for (size_t j = 0; j < self->num_methods; j++) {
+            const char *other_name = self->methods[j].func;
+            if (other_name && strcmp(other_name, name) == 0) {
+                found = true;
+                break;
+            }
+        }
+        if (found) { continue; }
+
+        char *perl_name = CFCPerlMethod_perl_name(method);
+        char *meth_pod
+            = CFCPerlPod_gen_subroutine_pod((CFCFunction*)method, perl_name,
+                                            klass, NULL, class_name, false);
+        if (CFCMethod_abstract(method)) {
+            abstract_pod = CFCUtil_cat(abstract_pod, meth_pod, NULL);
+        }
+        else {
+            methods_pod = CFCUtil_cat(methods_pod, meth_pod, NULL);
+        }
+        FREEMEM(meth_pod);
+        FREEMEM(perl_name);
+    }
+
     char *pod = CFCUtil_strdup("");
     if (strlen(abstract_pod)) {
         pod = CFCUtil_cat(pod, "=head1 ABSTRACT METHODS\n\n", abstract_pod, NULL);
@@ -249,23 +292,6 @@ CFCPerlPod_gen_subroutine_pod(CFCFunction *func,
     int num_vars = (int)CFCParamList_num_vars(param_list);
     char *pod = CFCUtil_sprintf("=head2 %s", alias);
 
-    // Get documentation, which may be inherited.
-    CFCDocuComment *docucomment = CFCFunction_get_docucomment(func);
-    if (!docucomment) {
-        const char *func_name = CFCFunction_get_name(func);
-        CFCClass *parent = klass;
-        while (NULL != (parent = CFCClass_get_parent(parent))) {
-            CFCFunction *parent_func
-                = (CFCFunction*)CFCClass_method(parent, func_name);
-            if (!parent_func) { break; }
-            docucomment = CFCFunction_get_docucomment(parent_func);
-            if (docucomment) { break; }
-        }
-    }
-    if (!docucomment) {
-        CFCUtil_die("No DocuComment for '%s' in '%s'", alias, class_name);
-    }
-
     // Build string summarizing arguments to use in header.
     if (num_vars > 2 || (is_constructor && num_vars > 1)) {
         pod = CFCUtil_cat(pod, "( I<[labeled params]> )\n\n", NULL);
@@ -287,6 +313,23 @@ CFCPerlPod_gen_subroutine_pod(CFCFunction *func,
         pod = CFCUtil_cat(pod, code_sample, "\n", NULL);
     }
 
+    // Get documentation, which may be inherited.
+    CFCDocuComment *docucomment = CFCFunction_get_docucomment(func);
+    if (!docucomment) {
+        const char *func_name = CFCFunction_get_name(func);
+        CFCClass *parent = klass;
+        while (NULL != (parent = CFCClass_get_parent(parent))) {
+            CFCFunction *parent_func
+                = (CFCFunction*)CFCClass_method(parent, func_name);
+            if (!parent_func) { break; }
+            docucomment = CFCFunction_get_docucomment(parent_func);
+            if (docucomment) { break; }
+        }
+    }
+    if (!docucomment) {
+        return pod;
+    }
+
     // Incorporate "description" text from DocuComment.
     const char *long_doc = CFCDocuComment_get_description(docucomment);
     if (long_doc && strlen(long_doc)) {

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/f71e072a/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 2b07aee..417e966 100644
--- a/runtime/perl/buildlib/Clownfish/Build/Binding.pm
+++ b/runtime/perl/buildlib/Clownfish/Build/Binding.pm
@@ -354,11 +354,6 @@ END_XS_CODE
 }
 
 sub bind_obj {
-    my @exposed = qw(
-        To_String
-        Equals
-    );
-
     my $pod_spec = Clownfish::CFC::Binding::Perl::Pod->new;
     my $synopsis = <<'END_SYNOPSIS';
     package MyObj;
@@ -434,17 +429,20 @@ instantiate objects of class "Clownfish::Obj" directly causes an
 error.
 
 Takes no arguments; if any are supplied, an error will be reported.
-
-=head1 DESTRUCTOR
-
-=head2 DESTROY
+END_DESCRIPTION
+    my $destroy_pod = <<'END_POD';
+=head2 DESTROY()
 
 All Clownfish classes implement a DESTROY method; if you override it in a
 subclass, you must call C<< $self->SUPER::DESTROY >> to avoid leaking memory.
-END_DESCRIPTION
+END_POD
     $pod_spec->set_synopsis($synopsis);
     $pod_spec->set_description($description);
-    $pod_spec->add_method( method => $_, alias => lc($_) ) for @exposed;
+    $pod_spec->add_method(
+        method => 'Destroy',
+        alias  => 'DESTROY',
+        pod    => $destroy_pod,
+    );
 
     my $xs_code = <<'END_XS_CODE';
 MODULE = Clownfish     PACKAGE = Clownfish::Obj