Implement CFCMethod_is_fresh
Project: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/repo Commit: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/commit/587d26b2 Tree: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/tree/587d26b2 Diff: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/diff/587d26b2 Branch: refs/heads/master Commit: 587d26b2a4c96052a8bea114df057f8c36bc3b11 Parents: ee9fda0 Author: Nick Wellnhofer <[email protected]> Authored: Tue Apr 21 10:19:55 2015 +0200 Committer: Nick Wellnhofer <[email protected]> Committed: Thu May 7 21:19:37 2015 +0200 ---------------------------------------------------------------------- compiler/src/CFCBindClass.c | 7 ++----- compiler/src/CFCCHtml.c | 4 +--- compiler/src/CFCCMan.c | 4 +--- compiler/src/CFCMethod.c | 6 ++++++ compiler/src/CFCMethod.h | 5 +++++ compiler/src/CFCPerlClass.c | 4 ++-- 6 files changed, 17 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/587d26b2/compiler/src/CFCBindClass.c ---------------------------------------------------------------------- diff --git a/compiler/src/CFCBindClass.c b/compiler/src/CFCBindClass.c index 2f2b563..a69679f 100644 --- a/compiler/src/CFCBindClass.c +++ b/compiler/src/CFCBindClass.c @@ -268,7 +268,6 @@ S_to_c_header_dynamic(CFCBindClass *self) { char* CFCBindClass_to_c_data(CFCBindClass *self) { CFCClass *client = self->client; - const char *class_name = CFCClass_get_name(client); if (CFCClass_inert(client)) { return CFCUtil_strdup(""); @@ -295,8 +294,7 @@ CFCBindClass_to_c_data(CFCBindClass *self) { NULL); FREEMEM(full_offset_sym); - const char *meth_class_name = CFCMethod_get_class_name(method); - int is_fresh = strcmp(class_name, meth_class_name) == 0; + int is_fresh = CFCMethod_is_fresh(method, client); // Create a default implementation for abstract methods. if (is_fresh && CFCMethod_abstract(method)) { @@ -498,9 +496,8 @@ CFCBindClass_spec_def(CFCBindClass *self) { for (int meth_num = 0; methods[meth_num] != NULL; meth_num++) { CFCMethod *method = methods[meth_num]; - const char *meth_class_name = CFCMethod_get_class_name(method); - if (strcmp(class_name, meth_class_name) == 0) { + if (CFCMethod_is_fresh(method, client)) { if (CFCMethod_novel(method)) { ++num_novel; } http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/587d26b2/compiler/src/CFCCHtml.c ---------------------------------------------------------------------- diff --git a/compiler/src/CFCCHtml.c b/compiler/src/CFCCHtml.c index 571a0ae..0409a7b 100644 --- a/compiler/src/CFCCHtml.c +++ b/compiler/src/CFCCHtml.c @@ -564,7 +564,6 @@ static char* S_html_create_fresh_methods(CFCClass *klass, CFCClass *ancestor) { CFCMethod **fresh_methods = CFCClass_fresh_methods(klass); const char *prefix = CFCClass_get_prefix(klass); - const char *ancestor_name = CFCClass_get_name(ancestor); char *result = CFCUtil_strdup(""); for (int meth_num = 0; fresh_methods[meth_num] != NULL; meth_num++) { @@ -573,8 +572,7 @@ S_html_create_fresh_methods(CFCClass *klass, CFCClass *ancestor) { continue; } - const char *class_name = CFCMethod_get_class_name(method); - if (strcmp(class_name, ancestor_name) != 0) { + if (!CFCMethod_is_fresh(method, ancestor)) { // The method is implementated in a subclass and already // documented. continue; http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/587d26b2/compiler/src/CFCCMan.c ---------------------------------------------------------------------- diff --git a/compiler/src/CFCCMan.c b/compiler/src/CFCCMan.c index 9ebd086..354d91f 100644 --- a/compiler/src/CFCCMan.c +++ b/compiler/src/CFCCMan.c @@ -235,7 +235,6 @@ S_man_create_methods(CFCClass *klass) { static char* S_man_create_fresh_methods(CFCClass *klass, CFCClass *ancestor) { CFCMethod **fresh_methods = CFCClass_fresh_methods(klass); - const char *ancestor_name = CFCClass_get_name(ancestor); char *result = CFCUtil_strdup(""); for (int meth_num = 0; fresh_methods[meth_num] != NULL; meth_num++) { @@ -244,8 +243,7 @@ S_man_create_fresh_methods(CFCClass *klass, CFCClass *ancestor) { continue; } - const char *class_name = CFCMethod_get_class_name(method); - if (strcmp(class_name, ancestor_name) != 0) { + if (!CFCMethod_is_fresh(method, ancestor)) { // The method is implementated in a subclass and already // documented. continue; http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/587d26b2/compiler/src/CFCMethod.c ---------------------------------------------------------------------- diff --git a/compiler/src/CFCMethod.c b/compiler/src/CFCMethod.c index 78180b4..be17981 100644 --- a/compiler/src/CFCMethod.c +++ b/compiler/src/CFCMethod.c @@ -385,6 +385,12 @@ CFCMethod_get_class_name(CFCMethod *self) { } int +CFCMethod_is_fresh(CFCMethod *self, CFCClass *klass) { + const char *class_name = CFCClass_get_name(klass); + return strcmp(CFCMethod_get_class_name(self), class_name) == 0; +} + +int CFCMethod_public(CFCMethod *self) { return CFCSymbol_public((CFCSymbol*)self); } http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/587d26b2/compiler/src/CFCMethod.h ---------------------------------------------------------------------- diff --git a/compiler/src/CFCMethod.h b/compiler/src/CFCMethod.h index 3f64c12..fa4df9e 100644 --- a/compiler/src/CFCMethod.h +++ b/compiler/src/CFCMethod.h @@ -208,6 +208,11 @@ CFCMethod_get_exposure(CFCMethod *self); const char* CFCMethod_get_class_name(CFCMethod *self); +/** Return true if the method is fresh in `klass`. + */ +int +CFCMethod_is_fresh(CFCMethod *self, struct CFCClass *klass); + int CFCMethod_public(CFCMethod *self); http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/587d26b2/compiler/src/CFCPerlClass.c ---------------------------------------------------------------------- diff --git a/compiler/src/CFCPerlClass.c b/compiler/src/CFCPerlClass.c index dad5f72..6484c78 100644 --- a/compiler/src/CFCPerlClass.c +++ b/compiler/src/CFCPerlClass.c @@ -181,7 +181,7 @@ CFCPerlClass_bind_method(CFCPerlClass *self, const char *alias, CFCUtil_die("Can't bind_method %s -- can't find method %s in %s", alias, meth_name, self->class_name); } - if (strcmp(CFCMethod_get_class_name(method), self->class_name) != 0) { + if (!CFCMethod_is_fresh(method, self->client)) { CFCUtil_die("Can't bind_method %s -- method %s not fresh in %s", alias, meth_name, self->class_name); } @@ -199,7 +199,7 @@ CFCPerlClass_exclude_method(CFCPerlClass *self, const char *meth_name) { CFCUtil_die("Can't exclude_method %s -- method not found in %s", meth_name, self->class_name); } - if (strcmp(CFCMethod_get_class_name(method), self->class_name) != 0) { + if (!CFCMethod_is_fresh(method, self->client)) { CFCUtil_die("Can't exclude_method %s -- method not fresh in %s", meth_name, self->class_name); }
