You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by ma...@apache.org on 2015/03/21 10:48:49 UTC
[1/4] lucy-clownfish git commit: Eliminate generation and usage of
callbacks.h.
Repository: lucy-clownfish
Updated Branches:
refs/heads/master d0babb78c -> f7960be90
Eliminate generation and usage of callbacks.h.
* Declare OVERRIDE symbols in per-class header files.
* Make signatures for invalid OVERRIDES match the original method.
* Generate OVERRIDE symbols centrally rather than for each host.
Project: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/commit/c3df5a6a
Tree: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/tree/c3df5a6a
Diff: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/diff/c3df5a6a
Branch: refs/heads/master
Commit: c3df5a6ac10a0a7872039cd800772eb30c1be022
Parents: d0babb7
Author: Marvin Humphrey <ma...@rectangular.com>
Authored: Tue Mar 17 11:03:28 2015 -0700
Committer: Marvin Humphrey <ma...@rectangular.com>
Committed: Thu Mar 19 08:59:01 2015 -0700
----------------------------------------------------------------------
compiler/src/CFCBindClass.c | 52 +++++++++++++++++++++++-
compiler/src/CFCBindCore.c | 1 -
compiler/src/CFCC.c | 44 ++------------------
compiler/src/CFCPerl.c | 85 +++++----------------------------------
compiler/src/CFCPerlMethod.c | 57 +++++++++++++-------------
5 files changed, 90 insertions(+), 149 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/c3df5a6a/compiler/src/CFCBindClass.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCBindClass.c b/compiler/src/CFCBindClass.c
index 2de2bd3..35b4efb 100644
--- a/compiler/src/CFCBindClass.c
+++ b/compiler/src/CFCBindClass.c
@@ -74,6 +74,10 @@ S_inert_var_declarations(CFCBindClass *self);
static char*
S_method_defs(CFCBindClass *self);
+// Declare override symbols for functions which wrap host callbacks.
+static char*
+S_override_decs(CFCBindClass *self);
+
// Define short names for all of the symbols associated with this class.
static char*
S_short_names(CFCBindClass *self);
@@ -195,6 +199,7 @@ S_to_c_header_dynamic(CFCBindClass *self) {
char *inert_var_defs = S_inert_var_declarations(self);
char *method_typedefs = S_method_typedefs(self);
char *method_defs = S_method_defs(self);
+ char *override_decs = S_override_decs(self);
char *short_names = S_short_names(self);
char pattern[] =
@@ -233,6 +238,11 @@ S_to_c_header_dynamic(CFCBindClass *self) {
"\n"
"%s\n"
"\n"
+ "/* Declare callbacks for wrapping host overrides.\n"
+ " */\n"
+ "\n"
+ "%s\n"
+ "\n"
"/* Define \"short names\" for this class's symbols.\n"
" */\n"
"\n"
@@ -242,7 +252,7 @@ S_to_c_header_dynamic(CFCBindClass *self) {
= CFCUtil_sprintf(pattern, parent_include, privacy_symbol, ivars,
struct_def, privacy_symbol, inert_var_defs,
sub_declarations, method_typedefs, method_defs,
- short_names);
+ override_decs, short_names);
FREEMEM(ivars);
FREEMEM(struct_def);
@@ -645,6 +655,46 @@ S_method_defs(CFCBindClass *self) {
return method_defs;
}
+static char*
+S_override_decs(CFCBindClass *self) {
+ CFCMethod **fresh_methods = CFCClass_fresh_methods(self->client);
+ char *decs = CFCUtil_strdup("");
+ char *nulls = CFCUtil_strdup("");
+
+ for (int i = 0; fresh_methods[i] != NULL; i++) {
+ CFCMethod *method = fresh_methods[i];
+ if (CFCMethod_final(method) || !CFCMethod_novel(method)) {
+ continue;
+ }
+ const char *override_sym = CFCMethod_full_override_sym(method);
+ CFCType *return_type = CFCMethod_get_return_type(method);
+ CFCParamList *param_list = CFCMethod_get_param_list(method);
+ const char *ret_type_str = CFCType_to_c(return_type);
+ const char *params = CFCParamList_to_c(param_list);
+ char pattern[] =
+ "%s\n"
+ "%s(%s);\n";
+ char *callback_dec
+ = CFCUtil_sprintf(pattern, ret_type_str, override_sym, params);
+ decs = CFCUtil_cat(decs, callback_dec, NULL);
+ FREEMEM(callback_dec);
+
+ nulls = CFCUtil_cat(nulls, "#define ", override_sym, " NULL\n", NULL);
+ }
+
+ char pattern[] =
+ "#ifdef CFISH_NO_DYNAMIC_OVERRIDES\n"
+ "%s"
+ "#else\n"
+ "%s"
+ "#endif\n"
+ ;
+ char *content = CFCUtil_sprintf(pattern, nulls, decs);
+
+ FREEMEM(nulls);
+ FREEMEM(decs);
+ return content;
+}
// Define short names for all of the symbols associated with this class.
static char*
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/c3df5a6a/compiler/src/CFCBindCore.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCBindCore.c b/compiler/src/CFCBindCore.c
index 5ad2ca2..5a55793 100644
--- a/compiler/src/CFCBindCore.c
+++ b/compiler/src/CFCBindCore.c
@@ -506,7 +506,6 @@ S_write_parcel_c(CFCBindCore *self, CFCParcel *parcel) {
"\n"
"%s"
"\n"
- "#include \"callbacks.h\"\n"
"#include \"Clownfish/Class.h\"\n" // Needed for bootstrap.
"%s\n"
"\n"
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/c3df5a6a/compiler/src/CFCC.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCC.c b/compiler/src/CFCC.c
index adc6013..fbc8930 100644
--- a/compiler/src/CFCC.c
+++ b/compiler/src/CFCC.c
@@ -85,47 +85,7 @@ CFCC_destroy(CFCC *self) {
*/
void
CFCC_write_callbacks(CFCC *self) {
- CFCHierarchy *hierarchy = self->hierarchy;
- CFCClass **ordered = CFCHierarchy_ordered_classes(hierarchy);
- char *all_cb_decs = CFCUtil_strdup("");
-
- for (int i = 0; ordered[i] != NULL; i++) {
- CFCClass *klass = ordered[i];
-
- if (!CFCClass_included(klass)) {
- char *cb_decs = S_callback_decs(klass);
- all_cb_decs = CFCUtil_cat(all_cb_decs, cb_decs, NULL);
- FREEMEM(cb_decs);
- }
- }
-
- FREEMEM(ordered);
-
- const char pattern[] =
- "%s\n"
- "#ifndef CFCCALLBACKS_H\n"
- "#define CFCCALLBACKS_H 1\n"
- "\n"
- "#include <stddef.h>\n"
- "\n"
- "%s"
- "\n"
- "#endif /* CFCCALLBACKS_H */\n"
- "\n"
- "%s\n"
- "\n";
- char *file_content = CFCUtil_sprintf(pattern, self->c_header, all_cb_decs,
- self->c_footer);
-
- // Unlink then write file.
- const char *inc_dest = CFCHierarchy_get_include_dest(hierarchy);
- char *filepath = CFCUtil_sprintf("%s" CHY_DIR_SEP "callbacks.h", inc_dest);
- remove(filepath);
- CFCUtil_write_file(filepath, file_content, strlen(file_content));
- FREEMEM(filepath);
-
- FREEMEM(all_cb_decs);
- FREEMEM(file_content);
+ return;
}
static char*
@@ -220,6 +180,8 @@ CFCC_write_hostdefs(CFCC *self) {
"#define CFISH_OBJ_HEAD \\\n"
" size_t refcount;\n"
"\n"
+ "#define CFISH_NO_DYNAMIC_OVERRIDES\n"
+ "\n"
"#endif /* H_CFISH_HOSTDEFS */\n"
"\n"
"%s\n";
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/c3df5a6a/compiler/src/CFCPerl.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCPerl.c b/compiler/src/CFCPerl.c
index 983eab6..6464bdf 100644
--- a/compiler/src/CFCPerl.c
+++ b/compiler/src/CFCPerl.c
@@ -54,9 +54,6 @@ static void
S_replace_double_colons(char *text, char replacement);
static void
-S_write_callbacks_h(CFCPerl *self);
-
-static void
S_write_callbacks_c(CFCPerl *self);
static const CFCMeta CFCPERL_META = {
@@ -506,22 +503,16 @@ CFCPerl_write_bindings(CFCPerl *self) {
void
CFCPerl_write_callbacks(CFCPerl *self) {
- S_write_callbacks_h(self);
S_write_callbacks_c(self);
}
-/* Write the "callbacks.h" header file, which contains declarations of host
- * callbacks.
- */
static void
-S_write_callbacks_h(CFCPerl *self) {
- CFCParcel **parcels = CFCParcel_all_parcels();
- CFCHierarchy *hierarchy = self->hierarchy;
- CFCClass **ordered = CFCHierarchy_ordered_classes(hierarchy);
- char *includes = CFCUtil_strdup("");
- char *cb_decs = CFCUtil_strdup("");
-
- for (int i = 0; parcels[i]; ++i) {
+S_write_callbacks_c(CFCPerl *self) {
+ CFCClass **ordered = CFCHierarchy_ordered_classes(self->hierarchy);
+ CFCParcel **parcels = CFCParcel_all_parcels();
+ char *includes = CFCUtil_strdup("");
+
+ for (int i = 0; parcels[i]; i++) {
CFCParcel *parcel = parcels[i];
if (!CFCParcel_included(parcel)) {
const char *prefix = CFCParcel_get_prefix(parcel);
@@ -530,72 +521,13 @@ S_write_callbacks_h(CFCPerl *self) {
}
}
- for (int i = 0; ordered[i] != NULL; i++) {
- CFCClass *klass = ordered[i];
- if (CFCClass_included(klass)) { continue; }
-
- 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];
-
- // Declare callback.
- if (CFCMethod_novel(method) && !CFCMethod_final(method)) {
- char *cb_dec = CFCPerlMethod_callback_dec(method);
- cb_decs = CFCUtil_cat(cb_decs, cb_dec, "\n", NULL);
- FREEMEM(cb_dec);
- }
- }
- }
-
- FREEMEM(ordered);
-
- const char pattern[] =
- "%s\n"
- "#ifndef CFCCALLBACKS_H\n"
- "#define CFCCALLBACKS_H 1\n"
- "\n"
- "#ifdef __cplusplus\n"
- "extern \"C\" {\n"
- "#endif\n"
- "\n"
- "%s"
- "\n"
- "%s"
- "\n"
- "#ifdef __cplusplus\n"
- "}\n"
- "#endif\n"
- "\n"
- "#endif /* CFCCALLBACKS_H */\n"
- "\n"
- "%s\n"
- "\n";
- char *file_content
- = CFCUtil_sprintf(pattern, self->c_header, includes, cb_decs,
- self->c_footer);
-
- // Unlink then write file.
- const char *inc_dest = CFCHierarchy_get_include_dest(hierarchy);
- char *filepath = CFCUtil_sprintf("%s" CHY_DIR_SEP "callbacks.h", inc_dest);
- remove(filepath);
- CFCUtil_write_file(filepath, file_content, strlen(file_content));
- FREEMEM(filepath);
-
- FREEMEM(includes);
- FREEMEM(cb_decs);
- FREEMEM(file_content);
-}
-
-static void
-S_write_callbacks_c(CFCPerl *self) {
- CFCClass **ordered = CFCHierarchy_ordered_classes(self->hierarchy);
static const char pattern[] =
"%s"
"\n"
"#include \"XSBind.h\"\n"
- "#include \"callbacks.h\"\n"
"#include \"Clownfish/Err.h\"\n"
"#include \"Clownfish/Obj.h\"\n"
+ "%s"
"\n"
"static void\n"
"S_finish_callback_void(const char *meth_name) {\n"
@@ -668,7 +600,7 @@ S_write_callbacks_c(CFCPerl *self) {
" return retval;\n"
"}\n"
"\n";
- char *content = CFCUtil_sprintf(pattern, self->c_header);
+ char *content = CFCUtil_sprintf(pattern, self->c_header, includes);
for (size_t i = 0; ordered[i] != NULL; i++) {
CFCClass *klass = ordered[i];
@@ -697,6 +629,7 @@ S_write_callbacks_c(CFCPerl *self) {
FREEMEM(filepath);
FREEMEM(content);
+ FREEMEM(includes);
FREEMEM(ordered);
}
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/c3df5a6a/compiler/src/CFCPerlMethod.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCPerlMethod.c b/compiler/src/CFCPerlMethod.c
index ef53b73..2a2aa5f 100644
--- a/compiler/src/CFCPerlMethod.c
+++ b/compiler/src/CFCPerlMethod.c
@@ -429,27 +429,15 @@ S_xsub_def_positional_args(CFCPerlMethod *self) {
char*
CFCPerlMethod_callback_dec(CFCMethod *method) {
const char *override_sym = CFCMethod_full_override_sym(method);
-
- char *callback_dec;
- if (!CFCPerlMethod_can_be_bound(method)) {
- char pattern[] =
- "void\n"
- "%s(cfish_Obj *self);\n";
- callback_dec = CFCUtil_sprintf(pattern, override_sym);
- }
- else {
- CFCType *return_type = CFCMethod_get_return_type(method);
- CFCParamList *param_list = CFCMethod_get_param_list(method);
- const char *ret_type_str = CFCType_to_c(return_type);
- const char *params = CFCParamList_to_c(param_list);
-
- char pattern[] =
- "%s\n"
- "%s(%s);\n";
- callback_dec
- = CFCUtil_sprintf(pattern, ret_type_str, override_sym, params);
- }
-
+ CFCType *return_type = CFCMethod_get_return_type(method);
+ CFCParamList *param_list = CFCMethod_get_param_list(method);
+ const char *ret_type_str = CFCType_to_c(return_type);
+ const char *params = CFCParamList_to_c(param_list);
+ char pattern[] =
+ "%s\n"
+ "%s(%s);\n";
+ char *callback_dec
+ = CFCUtil_sprintf(pattern, ret_type_str, override_sym, params);
return callback_dec;
}
@@ -605,19 +593,28 @@ S_callback_refcount_mods(CFCMethod *method) {
static char*
S_invalid_callback_def(CFCMethod *method) {
- const char *override_sym = CFCMethod_full_override_sym(method);
- char *full_method_sym = CFCMethod_full_method_sym(method, NULL);
-
+ const char *override_sym = CFCMethod_full_override_sym(method);
+ char *full_method_sym = CFCMethod_full_method_sym(method, NULL);
+ CFCType *return_type = CFCMethod_get_return_type(method);
+ CFCParamList *param_list = CFCMethod_get_param_list(method);
+ const char *ret_type_str = CFCType_to_c(return_type);
+ const char *params = CFCParamList_to_c(param_list);
+ char *maybe_ret
+ = CFCType_is_void(return_type)
+ ? CFCUtil_sprintf("")
+ : CFCUtil_sprintf("CFISH_UNREACHABLE_RETURN(%s);\n", ret_type_str);
char pattern[] =
- "void\n"
- "%s(cfish_Obj *self) {\n"
+ "%s\n"
+ "%s(%s) {\n"
" CFISH_UNUSED_VAR(self);\n"
" cfish_Err_invalid_callback(\"%s\");\n"
- "}\n";
- char *callback_def
- = CFCUtil_sprintf(pattern, override_sym, full_method_sym);
-
+ "%s"
+ "}\n"
+ ;
+ char *callback_def = CFCUtil_sprintf(pattern, ret_type_str, override_sym,
+ params, full_method_sym, maybe_ret);
FREEMEM(full_method_sym);
+ FREEMEM(maybe_ret);
return callback_def;
}
[2/4] lucy-clownfish git commit: Eliminate vestigial function to
write callbacks.h.
Posted by ma...@apache.org.
Eliminate vestigial function to write callbacks.h.
Project: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/commit/e45af211
Tree: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/tree/e45af211
Diff: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/diff/e45af211
Branch: refs/heads/master
Commit: e45af211522b700ae922474c716a8f1f1166fea9
Parents: c3df5a6
Author: Marvin Humphrey <ma...@rectangular.com>
Authored: Thu Mar 19 09:30:50 2015 -0700
Committer: Marvin Humphrey <ma...@rectangular.com>
Committed: Thu Mar 19 09:30:50 2015 -0700
----------------------------------------------------------------------
compiler/c/cfc.c | 1 -
compiler/go/cfc/cfc.go | 4 ----
compiler/src/CFCC.c | 7 -------
compiler/src/CFCC.h | 5 -----
runtime/go/build.go | 1 -
5 files changed, 18 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/e45af211/compiler/c/cfc.c
----------------------------------------------------------------------
diff --git a/compiler/c/cfc.c b/compiler/c/cfc.c
index 83dc5ed..9e36a5a 100644
--- a/compiler/c/cfc.c
+++ b/compiler/c/cfc.c
@@ -243,7 +243,6 @@ main(int argc, char **argv) {
c_binding = CFCC_new(hierarchy, header, footer);
CFCC_write_hostdefs(c_binding);
if (args.num_source_dirs != 0) {
- CFCC_write_callbacks(c_binding);
CFCC_write_html_docs(c_binding);
CFCC_write_man_pages(c_binding);
}
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/e45af211/compiler/go/cfc/cfc.go
----------------------------------------------------------------------
diff --git a/compiler/go/cfc/cfc.go b/compiler/go/cfc/cfc.go
index 7c12a6c..2944de5 100644
--- a/compiler/go/cfc/cfc.go
+++ b/compiler/go/cfc/cfc.go
@@ -152,10 +152,6 @@ func (obj *BindC) finalize() {
C.CFCBase_decref((*C.CFCBase)(unsafe.Pointer(obj.ref)))
}
-func (obj *BindC) WriteCallbacks() {
- C.CFCC_write_callbacks(obj.ref)
-}
-
func (obj *BindC) WriteHostDefs() {
C.CFCC_write_hostdefs(obj.ref)
}
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/e45af211/compiler/src/CFCC.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCC.c b/compiler/src/CFCC.c
index fbc8930..48d3128 100644
--- a/compiler/src/CFCC.c
+++ b/compiler/src/CFCC.c
@@ -81,13 +81,6 @@ CFCC_destroy(CFCC *self) {
CFCBase_destroy((CFCBase*)self);
}
-/* Write "callbacks.h" with NULL callbacks.
- */
-void
-CFCC_write_callbacks(CFCC *self) {
- return;
-}
-
static char*
S_callback_decs(CFCClass *klass) {
CFCMethod **fresh_methods = CFCClass_fresh_methods(klass);
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/e45af211/compiler/src/CFCC.h
----------------------------------------------------------------------
diff --git a/compiler/src/CFCC.h b/compiler/src/CFCC.h
index 093b043..b8c6c73 100644
--- a/compiler/src/CFCC.h
+++ b/compiler/src/CFCC.h
@@ -46,11 +46,6 @@ CFCC_init(CFCC *self, struct CFCHierarchy *hierarchy, const char *header,
void
CFCC_destroy(CFCC *self);
-/** Write the "callbacks.h" header file with dummy callbacks.
- */
-void
-CFCC_write_callbacks(CFCC *self);
-
/** Write the "cfish_hostdefs.h" header file.
*/
void
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/e45af211/runtime/go/build.go
----------------------------------------------------------------------
diff --git a/runtime/go/build.go b/runtime/go/build.go
index 8411504..51f4662 100644
--- a/runtime/go/build.go
+++ b/runtime/go/build.go
@@ -122,7 +122,6 @@ func runCFC() {
modified := coreBinding.WriteAllModified(false)
if modified {
cBinding := cfc.NewBindC(hierarchy, autogenHeader, "")
- cBinding.WriteCallbacks()
cBinding.WriteHostDefs()
hierarchy.WriteLog()
}
[4/4] lucy-clownfish git commit: Merge branch
'CLOWNFISH-30-kill-callbacks-h-v2'
Posted by ma...@apache.org.
Merge branch 'CLOWNFISH-30-kill-callbacks-h-v2'
Refactor CFC internals to eliminate an autogenerated file and centralize some
code generation rather than perform generation per-host.
This fixes CLOWNFISH-30.
This closes #5.
Project: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/commit/f7960be9
Tree: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/tree/f7960be9
Diff: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/diff/f7960be9
Branch: refs/heads/master
Commit: f7960be903580cda30c3d9ac0214bb4e9dbfe6f9
Parents: d0babb7 ecc65d7
Author: Marvin Humphrey <ma...@rectangular.com>
Authored: Sat Mar 21 02:37:11 2015 -0700
Committer: Marvin Humphrey <ma...@rectangular.com>
Committed: Sat Mar 21 02:37:11 2015 -0700
----------------------------------------------------------------------
compiler/c/cfc.c | 1 -
compiler/go/cfc/cfc.go | 2 +-
compiler/src/CFCBindClass.c | 52 +++++++++++++++++++++++-
compiler/src/CFCBindCore.c | 1 -
compiler/src/CFCC.c | 49 +---------------------
compiler/src/CFCC.h | 5 ---
compiler/src/CFCPerl.c | 85 +++++----------------------------------
compiler/src/CFCPerlMethod.c | 57 +++++++++++++-------------
runtime/go/build.go | 1 -
9 files changed, 90 insertions(+), 163 deletions(-)
----------------------------------------------------------------------
[3/4] lucy-clownfish git commit: Restore dummy func to prevent Lucy
from breaking.
Posted by ma...@apache.org.
Restore dummy func to prevent Lucy from breaking.
Project: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/commit/ecc65d72
Tree: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/tree/ecc65d72
Diff: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/diff/ecc65d72
Branch: refs/heads/master
Commit: ecc65d72efcf16c02916e6fba15dc6ef302b27db
Parents: e45af21
Author: Marvin Humphrey <ma...@rectangular.com>
Authored: Sat Mar 21 02:35:27 2015 -0700
Committer: Marvin Humphrey <ma...@rectangular.com>
Committed: Sat Mar 21 02:35:27 2015 -0700
----------------------------------------------------------------------
compiler/go/cfc/cfc.go | 4 ++++
1 file changed, 4 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/ecc65d72/compiler/go/cfc/cfc.go
----------------------------------------------------------------------
diff --git a/compiler/go/cfc/cfc.go b/compiler/go/cfc/cfc.go
index 2944de5..2a1e44f 100644
--- a/compiler/go/cfc/cfc.go
+++ b/compiler/go/cfc/cfc.go
@@ -152,6 +152,10 @@ func (obj *BindC) finalize() {
C.CFCBase_decref((*C.CFCBase)(unsafe.Pointer(obj.ref)))
}
+func (obj *BindC) WriteCallbacks() {
+ // no-op
+}
+
func (obj *BindC) WriteHostDefs() {
C.CFCC_write_hostdefs(obj.ref)
}