Add classes to Python module object. For instance, make `clownfish.String` available on the Python `clownfish` module object.
Project: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/repo Commit: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/commit/49972c1c Tree: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/tree/49972c1c Diff: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/diff/49972c1c Branch: refs/heads/py_exp13 Commit: 49972c1cbc6b6f9ae4ad55c6d26b69e491e63741 Parents: 67b7630 Author: Marvin Humphrey <[email protected]> Authored: Mon Feb 1 17:13:37 2016 -0800 Committer: Marvin Humphrey <[email protected]> Committed: Wed Feb 24 15:20:38 2016 -0800 ---------------------------------------------------------------------- compiler/src/CFCPython.c | 10 +++++++++- runtime/python/test/test_clownfish.py | 2 ++ 2 files changed, 11 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/49972c1c/compiler/src/CFCPython.c ---------------------------------------------------------------------- diff --git a/compiler/src/CFCPython.c b/compiler/src/CFCPython.c index 068c9c4..d108b69 100644 --- a/compiler/src/CFCPython.c +++ b/compiler/src/CFCPython.c @@ -459,6 +459,7 @@ S_write_module_file(CFCPython *self, CFCParcel *parcel, const char *dest) { char *class_bindings = S_gen_class_bindings(self, parcel, pymod_name, ordered); char *parcel_boots = CFCUtil_strdup(""); char *pytype_ready_calls = CFCUtil_strdup(""); + char *module_adds = CFCUtil_strdup(""); // Add parcel bootstrapping calls. for (size_t i = 0; parcels[i]; ++i) { @@ -487,6 +488,10 @@ S_write_module_file(CFCPython *self, CFCParcel *parcel, const char *dest) { " if (PyType_Ready(&", struct_sym, "_pytype_struct) < 0) { return NULL; }\n", NULL); } + + module_adds = CFCUtil_cat(module_adds, " PyModule_AddObject(module, \"", + struct_sym, "\", (PyObject*)&", struct_sym, + "_pytype_struct);\n", NULL); } const char pattern[] = @@ -522,6 +527,8 @@ S_write_module_file(CFCPython *self, CFCParcel *parcel, const char *dest) { "%s\n" // parcel boots "\n" " PyObject *module = PyModule_Create(&module_def);\n" + "%s\n" // Add types to module + "\n" " return module;\n" "}\n" "\n" @@ -532,7 +539,7 @@ S_write_module_file(CFCPython *self, CFCParcel *parcel, const char *dest) { = CFCUtil_sprintf(pattern, self->header, pound_includes, callbacks, helper_mod_name, class_bindings, type_linkups, last_component, pytype_ready_calls, parcel_boots, - self->footer); + module_adds, self->footer); char *filepath = CFCUtil_sprintf("%s" CHY_DIR_SEP "_%s.c", dest, last_component); @@ -540,6 +547,7 @@ S_write_module_file(CFCPython *self, CFCParcel *parcel, const char *dest) { FREEMEM(filepath); FREEMEM(content); + FREEMEM(module_adds); FREEMEM(pytype_ready_calls); FREEMEM(parcel_boots); FREEMEM(class_bindings); http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/49972c1c/runtime/python/test/test_clownfish.py ---------------------------------------------------------------------- diff --git a/runtime/python/test/test_clownfish.py b/runtime/python/test/test_clownfish.py index fd124d3..d8f2594 100644 --- a/runtime/python/test/test_clownfish.py +++ b/runtime/python/test/test_clownfish.py @@ -21,6 +21,8 @@ class MyTest(unittest.TestCase): def testTrue(self): self.assertTrue(True, "True should be true") + def testClassesPresent(self): + self.assertIsInstance(clownfish.Hash, type) if __name__ == '__main__': unittest.main()
