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