Generate callback wrappers for more methods. Generate a callback wrapper for every novel, non-final method.
Project: http://git-wip-us.apache.org/repos/asf/lucy/repo Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/10262d39 Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/10262d39 Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/10262d39 Branch: refs/heads/master Commit: 10262d39704a5d73f68fa9346012c06fa01aeb46 Parents: 17b608b Author: Marvin Humphrey <[email protected]> Authored: Fri Nov 9 17:45:00 2012 -0800 Committer: Marvin Humphrey <[email protected]> Committed: Tue Nov 13 17:49:42 2012 -0800 ---------------------------------------------------------------------- clownfish/compiler/src/CFCBindClass.c | 3 +-- clownfish/compiler/src/CFCBindMethod.c | 10 ++++++++-- clownfish/compiler/src/CFCPerl.c | 3 +-- 3 files changed, 10 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lucy/blob/10262d39/clownfish/compiler/src/CFCBindClass.c ---------------------------------------------------------------------- diff --git a/clownfish/compiler/src/CFCBindClass.c b/clownfish/compiler/src/CFCBindClass.c index 1eb2560..2bebdc3 100644 --- a/clownfish/compiler/src/CFCBindClass.c +++ b/clownfish/compiler/src/CFCBindClass.c @@ -321,8 +321,7 @@ CFCBindClass_to_c_data(CFCBindClass *self) { } // Declare (but don't define) callback. - if ((CFCMethod_public(method) || CFCMethod_abstract(method)) - && CFCMethod_novel(method)) { + if (CFCMethod_novel(method) && !CFCMethod_final(method)) { char *cb_dec = CFCBindMeth_callback_dec(method); cb_funcs = CFCUtil_cat(cb_funcs, cb_dec, "\n", NULL); FREEMEM(cb_dec); http://git-wip-us.apache.org/repos/asf/lucy/blob/10262d39/clownfish/compiler/src/CFCBindMethod.c ---------------------------------------------------------------------- diff --git a/clownfish/compiler/src/CFCBindMethod.c b/clownfish/compiler/src/CFCBindMethod.c index 68ba38a..4e17be1 100644 --- a/clownfish/compiler/src/CFCBindMethod.c +++ b/clownfish/compiler/src/CFCBindMethod.c @@ -233,7 +233,7 @@ CFCBindMeth_spec_def(CFCMethod *method) { int is_novel = CFCMethod_novel(method); const char *full_override_sym = "NULL"; - if ((CFCMethod_public(method) || CFCMethod_abstract(method)) && is_novel) { + if (is_novel && !CFCMethod_final(method)) { full_override_sym = CFCMethod_full_override_sym(method); } @@ -375,9 +375,15 @@ CFCBindMeth_callback_def(CFCMethod *method) { else if (CFCType_is_object(return_type)) { callback_def = S_obj_callback_def(method, params, refcount_mods); } - else { + else if (CFCType_is_integer(return_type) + || CFCType_is_floating(return_type) + ) { callback_def = S_primitive_callback_def(method, params, refcount_mods); } + else { + // Can't map return type. + callback_def = S_invalid_callback_def(method); + } FREEMEM(params); FREEMEM(refcount_mods); http://git-wip-us.apache.org/repos/asf/lucy/blob/10262d39/clownfish/compiler/src/CFCPerl.c ---------------------------------------------------------------------- diff --git a/clownfish/compiler/src/CFCPerl.c b/clownfish/compiler/src/CFCPerl.c index 5c28f07..ca30ad2 100644 --- a/clownfish/compiler/src/CFCPerl.c +++ b/clownfish/compiler/src/CFCPerl.c @@ -535,8 +535,7 @@ CFCPerl_write_callbacks(CFCPerl *self) { CFCMethod *method = fresh_methods[meth_num]; // Define callback. - if ((CFCMethod_public(method) || CFCMethod_abstract(method)) - && CFCMethod_novel(method)) { + if (CFCMethod_novel(method) && !CFCMethod_final(method)) { char *cb_def = CFCBindMeth_callback_def(method); content = CFCUtil_cat(content, cb_def, "\n", NULL); FREEMEM(cb_def);
