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 2016/02/25 00:56:16 UTC
[15/36] lucy-clownfish git commit: Gen stub Py method wrappers.
Gen stub Py method wrappers.
Project: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/commit/cb25fd0b
Tree: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/tree/cb25fd0b
Diff: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/diff/cb25fd0b
Branch: refs/heads/py_exp13
Commit: cb25fd0bd79dfcd8097db6bf8c0319cb44a07531
Parents: a158003
Author: Marvin Humphrey <ma...@rectangular.com>
Authored: Mon Feb 1 19:13:00 2016 -0800
Committer: Marvin Humphrey <ma...@rectangular.com>
Committed: Wed Feb 24 15:20:39 2016 -0800
----------------------------------------------------------------------
compiler/src/CFCPyClass.c | 17 +++++++++++++++++
compiler/src/CFCPyMethod.c | 18 ++++++++++++++++++
compiler/src/CFCPyMethod.h | 3 +++
3 files changed, 38 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/cb25fd0b/compiler/src/CFCPyClass.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCPyClass.c b/compiler/src/CFCPyClass.c
index 9f46b60..11a4905 100644
--- a/compiler/src/CFCPyClass.c
+++ b/compiler/src/CFCPyClass.c
@@ -145,6 +145,23 @@ CFCPyClass_gen_binding_code(CFCPyClass *self) {
char *bindings = CFCUtil_strdup(self->pre_code ? self->pre_code : "");
char *meth_defs = CFCUtil_strdup(self->meth_defs);
+ // Instance methods.
+ CFCMethod **methods = CFCClass_fresh_methods(klass);
+ for (size_t j = 0; methods[j] != NULL; j++) {
+ CFCMethod *meth = methods[j];
+
+ if (CFCMethod_excluded_from_host(meth)
+ || !CFCMethod_can_be_bound(meth)
+ ) {
+ continue;
+ }
+
+ // Add the function wrapper.
+ char *wrapper = CFCPyMethod_wrapper(meth, klass);
+ bindings = CFCUtil_cat(bindings, wrapper, "\n", NULL);
+ FREEMEM(wrapper);
+ }
+
// Complete the PyMethodDef array.
const char *struct_sym = CFCClass_get_struct_sym(klass);
char *meth_defs_pattern =
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/cb25fd0b/compiler/src/CFCPyMethod.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCPyMethod.c b/compiler/src/CFCPyMethod.c
index 983df28..0a5cd27 100644
--- a/compiler/src/CFCPyMethod.c
+++ b/compiler/src/CFCPyMethod.c
@@ -215,3 +215,21 @@ S_maybe_unreachable(CFCType *return_type) {
return return_statement;
}
+char*
+CFCPyMethod_wrapper(CFCMethod *method, CFCClass *invoker) {
+ char *meth_sym = CFCMethod_full_method_sym(method, invoker);
+
+ char pattern[] =
+ "static PyObject*\n"
+ "S_%s(PyObject *unused1, PyObject *unused2) {\n"
+ " CFISH_UNUSED_VAR(unused1);\n"
+ " CFISH_UNUSED_VAR(unused2);\n"
+ " Py_RETURN_NONE;\n"
+ "}\n"
+ ;
+ char *wrapper = CFCUtil_sprintf(pattern, meth_sym);
+ FREEMEM(meth_sym);
+
+ return wrapper;
+}
+
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/cb25fd0b/compiler/src/CFCPyMethod.h
----------------------------------------------------------------------
diff --git a/compiler/src/CFCPyMethod.h b/compiler/src/CFCPyMethod.h
index 15fa1e6..53768e2 100644
--- a/compiler/src/CFCPyMethod.h
+++ b/compiler/src/CFCPyMethod.h
@@ -31,6 +31,9 @@ struct CFCClass;
char*
CFCPyMethod_callback_def(struct CFCMethod *method, struct CFCClass *invoker);
+char*
+CFCPyMethod_wrapper(struct CFCMethod *method, struct CFCClass *invoker);
+
#ifdef __cplusplus
}
#endif