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/09 18:11:20 UTC
[03/12] lucy-clownfish git commit: Move `cfc` Python module to top
level.
Move `cfc` Python module to top level.
Moving the `cfc` module out from underneath `clownfish` gives the
runtime full control over what ends up in the `clownfish` module.
Project: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/commit/11d08c5b
Tree: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/tree/11d08c5b
Diff: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/diff/11d08c5b
Branch: refs/heads/master
Commit: 11d08c5b0a8a724ad7fd5ac7f10fb9ee065eea89
Parents: 47234c3
Author: Marvin Humphrey <ma...@rectangular.com>
Authored: Mon Dec 29 19:31:16 2014 -0800
Committer: Marvin Humphrey <ma...@rectangular.com>
Committed: Sat Feb 6 09:58:12 2016 -0800
----------------------------------------------------------------------
compiler/python/setup.py | 8 +-
compiler/python/src/cfc/__init__.py | 29 ++
compiler/python/src/cfc/_cfc.c | 400 +++++++++++++++++++++
compiler/python/src/clownfish/_cfc.c | 400 ---------------------
compiler/python/src/clownfish/cfc/__init__.py | 29 --
compiler/python/test/test_cfc.py | 2 +-
6 files changed, 434 insertions(+), 434 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/11d08c5b/compiler/python/setup.py
----------------------------------------------------------------------
diff --git a/compiler/python/setup.py b/compiler/python/setup.py
index e140161..7d8017e 100644
--- a/compiler/python/setup.py
+++ b/compiler/python/setup.py
@@ -53,7 +53,7 @@ CHARMONY_H_PATH = 'charmony.h'
LIBCFC_NAME = 'libcfc.a' # TODO portability
LIBCFC_PATH = os.path.abspath(os.path.join(os.curdir, LIBCFC_NAME))
-c_filepaths = [os.path.join('src', 'clownfish', '_cfc.c')]
+c_filepaths = [os.path.join('src', 'cfc', '_cfc.c')]
paths_to_clean = [
CHARMONIZER_EXE_PATH,
CHARMONY_H_PATH,
@@ -111,7 +111,7 @@ class libcfc(_Command):
self.run_command('charmony')
subprocess.check_call([make_command, '-j', 'static'])
# Touch Python binding file if the library has changed.
- cfc_c = os.path.join('src', 'clownfish', '_cfc.c')
+ cfc_c = os.path.join('src', 'cfc', '_cfc.c')
if newer_group(['libcfc.a'], cfc_c):
os.utime(cfc_c, None)
@@ -161,7 +161,7 @@ class test(_Command):
# restore sys.path
sys.path = orig_sys_path
-cfc_extension = Extension('clownfish._cfc',
+cfc_extension = Extension('cfc._cfc',
define_macros = [('CFCPYTHON', None)],
include_dirs = [
CFC_INCLUDE_DIR,
@@ -177,7 +177,7 @@ setup(name = 'clownfish-cfc',
author = 'Apache Lucy Project',
author_email = 'dev at lucy dot apache dot org',
url = 'http://lucy.apache.org',
- packages = ['clownfish.cfc',
+ packages = ['cfc',
],
cmdclass = {
'build': my_build,
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/11d08c5b/compiler/python/src/cfc/__init__.py
----------------------------------------------------------------------
diff --git a/compiler/python/src/cfc/__init__.py b/compiler/python/src/cfc/__init__.py
new file mode 100644
index 0000000..05afcc5
--- /dev/null
+++ b/compiler/python/src/cfc/__init__.py
@@ -0,0 +1,29 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import cfc._cfc
+from cfc._cfc import *
+import site
+import os.path
+
+def _get_inc_dirs():
+ dirs = []
+ for path in site.getsitepackages():
+ path = os.path.join(path, "clownfish/_include")
+ dirs.append(path)
+ return dirs
+
+cfc._cfc._get_inc_dirs = _get_inc_dirs
+
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/11d08c5b/compiler/python/src/cfc/_cfc.c
----------------------------------------------------------------------
diff --git a/compiler/python/src/cfc/_cfc.c b/compiler/python/src/cfc/_cfc.c
new file mode 100644
index 0000000..d20b5fa
--- /dev/null
+++ b/compiler/python/src/cfc/_cfc.c
@@ -0,0 +1,400 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "Python.h"
+#include "CFC.h"
+
+typedef struct {
+ PyObject_HEAD
+ void *cfc_obj;
+} CFCPyWrapper;
+
+static PyModuleDef cfc_module_def = {
+ PyModuleDef_HEAD_INIT,
+ "cfc._cfc",
+ "CFC: Clownfish compiler",
+ -1,
+ NULL, NULL, NULL, NULL, NULL
+};
+
+static PyModuleDef cfc_model_module_def = {
+ PyModuleDef_HEAD_INIT,
+ "cfc.model",
+ "CFC classes which model language constructs",
+ -1,
+ NULL, NULL, NULL, NULL, NULL
+};
+
+static PyModuleDef cfc_binding_module_def = {
+ PyModuleDef_HEAD_INIT,
+ "cfc.binding",
+ "CFC components which generate bindings",
+ -1,
+ NULL, NULL, NULL, NULL, NULL
+};
+
+static PyObject *cfc_module;
+static PyObject *cfc_model_module;
+static PyObject *cfc_binding_module;
+
+static PyObject*
+S_wrap_cfcbase(PyTypeObject *type, void *cfc_obj) {
+ if (cfc_obj == NULL) {
+ Py_RETURN_NONE;
+ }
+ CFCPyWrapper *wrapper = (CFCPyWrapper*)type->tp_alloc(type, 0);
+ if (wrapper == NULL) {
+ PyErr_SetString(PyExc_RuntimeError, "Failed to allocate object");
+ return NULL;
+ }
+ wrapper->cfc_obj = cfc_obj;
+ return (PyObject*)wrapper;
+}
+
+static void
+S_CFCBase_dealloc(CFCPyWrapper *wrapper) {
+ CFCBase *temp = (CFCBase*)wrapper->cfc_obj;
+ wrapper->cfc_obj = NULL;
+ CFCBase_decref(temp);
+ Py_TYPE(wrapper)->tp_free(wrapper);
+}
+
+void*
+S_to_cfc_something(PyObject *wrapper, const char *class_name) {
+ if (wrapper == NULL || wrapper == Py_None) {
+ return NULL;
+ }
+ CFCBase *obj = (CFCBase*)((CFCPyWrapper*)wrapper)->cfc_obj;
+ if (strcmp(CFCBase_get_cfc_class(obj), class_name) != 0) {
+ CFCUtil_die("Object is not a %s, it's a %s", class_name,
+ CFCBase_get_cfc_class(obj));
+ }
+ return obj;
+}
+
+static CFCHierarchy*
+S_to_Hierarchy(PyObject *wrapper) {
+ return (CFCHierarchy*)S_to_cfc_something(wrapper,
+ "Clownfish::CFC::Model::Hierarchy");
+}
+
+static CFCParcel*
+S_to_Parcel(PyObject *wrapper) {
+ return (CFCParcel*)S_to_cfc_something(wrapper,
+ "Clownfish::CFC::Model::Parcel");
+}
+
+static CFCBindCore*
+S_to_BindCore(PyObject *wrapper) {
+ return (CFCBindCore*)S_to_cfc_something(wrapper,
+ "Clownfish::CFC::Binding::Core");
+}
+
+static PyTypeObject *Hierarchy_pytype;
+static PyTypeObject *Parcel_pytype;
+static PyTypeObject *BindCore_pytype;
+
+/***************************** CFCHierarchy *****************************/
+
+static PyObject*
+S_CFCHierarchy_new(PyTypeObject *type, PyObject *args,
+ PyObject *keyword_args) {
+ char *dest = NULL;
+ char *keywords[] = {"dest", NULL};
+ int result = PyArg_ParseTupleAndKeywords(args, keyword_args, "|s",
+ keywords, &dest);
+ if (!result) { return NULL; }
+ if (!dest) {
+ PyErr_SetString(PyExc_TypeError, "Missing required arg 'dest'");
+ return NULL;
+ }
+ PyObject *inc_func = PyObject_GetAttrString(cfc_module, "_get_inc_dirs");
+ PyObject *dirs = NULL;
+ if (PyCallable_Check(inc_func)) {
+ dirs = PyObject_CallObject(inc_func, NULL);
+ }
+ if (dirs == NULL || !PyList_Check(dirs)) {
+ Py_XDECREF(inc_func);
+ Py_XDECREF(dirs);
+ PyErr_SetString(PyExc_RuntimeError, "_get_inc_dirs failed");
+ return NULL;
+ }
+ CFCHierarchy *hierarchy = CFCHierarchy_new(dest);
+ for (Py_ssize_t i = 0, max = PyList_Size(dirs); i < max; i++) {
+ PyObject *dir = PyList_GetItem(dirs, i);
+ if (PyUnicode_Check(dir)) {
+ char *dir_utf8 = PyUnicode_AsUTF8(dir);
+ CFCHierarchy_add_include_dir(hierarchy, dir_utf8);
+ }
+ else {
+ PyErr_SetString(PyExc_RuntimeError, "not a string");
+ return NULL;
+ }
+ }
+
+ Py_XDECREF(inc_func);
+ Py_XDECREF(dirs);
+
+ return S_wrap_cfcbase(Hierarchy_pytype, hierarchy);
+}
+
+static PyObject*
+S_CFCHierarchy_build(PyObject *wrapper, PyObject *unused) {
+ CHY_UNUSED_VAR(unused);
+ CFCHierarchy_build(S_to_Hierarchy(wrapper));
+ Py_RETURN_NONE;
+}
+
+static PyObject*
+S_CFCHierarchy_add_include_dir(PyObject *wrapper, PyObject *dir) {
+ CFCHierarchy_add_include_dir(S_to_Hierarchy(wrapper),
+ PyUnicode_AsUTF8(dir));
+ Py_RETURN_NONE;
+}
+
+static PyObject*
+S_CFCHierarchy_add_source_dir(PyObject *wrapper, PyObject *dir) {
+ CFCHierarchy_add_source_dir(S_to_Hierarchy(wrapper),
+ PyUnicode_AsUTF8(dir));
+ Py_RETURN_NONE;
+}
+
+static PyObject*
+S_CFCHierarchy_write_log(PyObject *wrapper, PyObject *unused) {
+ CHY_UNUSED_VAR(unused);
+ CFCHierarchy_write_log(S_to_Hierarchy(wrapper));
+ Py_RETURN_NONE;
+}
+
+static PyMethodDef hierarchy_methods[] = {
+ {"add_include_dir", (PyCFunction)S_CFCHierarchy_add_include_dir, METH_O, NULL},
+ {"add_source_dir", (PyCFunction)S_CFCHierarchy_add_source_dir, METH_O, NULL},
+ {"build", (PyCFunction)S_CFCHierarchy_build, METH_NOARGS, NULL},
+ {"write_log", (PyCFunction)S_CFCHierarchy_write_log, METH_NOARGS, NULL},
+ {NULL}
+};
+
+static PyTypeObject Hierarchy_pytype_struct = {
+ PyVarObject_HEAD_INIT(NULL, 0)
+ "cfc.model.Hierarchy", // tp_name
+ sizeof(CFCPyWrapper), // tp_basicsize
+ 0, // tp_itemsize
+ (destructor)S_CFCBase_dealloc, // tp_dealloc
+ 0, // tp_print
+ 0, // tp_getattr
+ 0, // tp_setattr
+ 0, // tp_reserved
+ 0, // tp_repr
+ 0, // tp_as_number
+ 0, // tp_as_sequence
+ 0, // tp_as_mapping
+ 0, // tp_hash
+ 0, // tp_call
+ 0, // tp_str
+ 0, // tp_getattro
+ 0, // tp_setattro
+ 0, // tp_as_buffer
+ Py_TPFLAGS_DEFAULT, // tp_flags
+ "CFCHierarchy", // tp_doc
+ 0, // tp_traverse
+ 0, // tp_clear
+ 0, // tp_richcompare
+ 0, // tp_weaklistoffset
+ 0, // tp_iter
+ 0, // tp_iternext
+ hierarchy_methods, // tp_methods
+ 0, // tp_members
+ 0, // tp_getset
+ 0, // tp_base
+ 0, // tp_dict
+ 0, // tp_descr_get
+ 0, // tp_descr_set
+ 0, // tp_dictoffset
+ 0, // tp_init
+ 0, // tp_allow
+ (newfunc)S_CFCHierarchy_new // tp_new
+};
+
+/***************************** CFCParcel *****************************/
+
+PyObject*
+S_CFCParcel_fetch(PyObject *ignored, PyObject *name) {
+ CFCParcel *parcel = CFCParcel_fetch(PyUnicode_AsUTF8(name));
+ return S_wrap_cfcbase(Parcel_pytype, parcel);
+}
+
+static PyMethodDef parcel_methods[] = {
+ {"fetch", (PyCFunction)S_CFCParcel_fetch, METH_STATIC, NULL},
+ {NULL}
+};
+
+static PyTypeObject Parcel_pytype_struct = {
+ PyVarObject_HEAD_INIT(NULL, 0)
+ "cfc.model.Parcel", // tp_name
+ sizeof(CFCPyWrapper), // tp_basicsize
+ 0, // tp_itemsize
+ (destructor)S_CFCBase_dealloc, // tp_dealloc
+ 0, // tp_print
+ 0, // tp_getattr
+ 0, // tp_setattr
+ 0, // tp_reserved
+ 0, // tp_repr
+ 0, // tp_as_number
+ 0, // tp_as_sequence
+ 0, // tp_as_mapping
+ 0, // tp_hash
+ 0, // tp_call
+ 0, // tp_str
+ 0, // tp_getattro
+ 0, // tp_setattro
+ 0, // tp_as_buffer
+ Py_TPFLAGS_DEFAULT, // tp_flags
+ "CFCParcel", // tp_doc
+ 0, // tp_traverse
+ 0, // tp_clear
+ 0, // tp_richcompare
+ 0, // tp_weaklistoffset
+ 0, // tp_iter
+ 0, // tp_iternext
+ parcel_methods, // tp_methods
+ 0, // tp_members
+ 0, // tp_getset
+ 0, // tp_base
+ 0, // tp_dict
+ 0, // tp_descr_get
+ 0, // tp_descr_set
+ 0, // tp_dictoffset
+ 0, // tp_init
+ 0, // tp_allow
+ 0 // tp_new
+};
+
+/***************************** CFCBindCore *****************************/
+
+static PyObject*
+S_CFCBindCore_new(PyTypeObject *type, PyObject *args,
+ PyObject *keyword_args) {
+ PyObject *hierarchy_wrapped;
+ char *header = "";
+ char *footer = "";
+ char *keywords[] = {"hierarchy", "header", "footer", NULL};
+ int result = PyArg_ParseTupleAndKeywords(args, keyword_args, "O!|ss",
+ keywords, Hierarchy_pytype,
+ &hierarchy_wrapped, &header,
+ &footer);
+ if (!result) { return NULL; }
+ CFCHierarchy *hierarchy = S_to_Hierarchy(hierarchy_wrapped);
+ CFCBindCore *obj = CFCBindCore_new(hierarchy, header, footer);
+ return S_wrap_cfcbase(BindCore_pytype, obj);
+}
+
+static PyObject*
+S_CFCBindCore_write_all_modified(PyObject *wrapper, PyObject *args) {
+ int modified = 0;
+ int result = PyArg_ParseTuple(args, "|p", &modified);
+ if (!result) { return NULL; }
+ CFCBindCore_write_all_modified(S_to_BindCore(wrapper), modified);
+ Py_RETURN_NONE;
+}
+
+static PyMethodDef bindcore_methods[] = {
+ {"write_all_modified", (PyCFunction)S_CFCBindCore_write_all_modified, METH_VARARGS, NULL},
+ {NULL}
+};
+
+static PyTypeObject BindCore_pytype_struct = {
+ PyVarObject_HEAD_INIT(NULL, 0)
+ "cfc.binding.BindCore", // tp_name
+ sizeof(CFCPyWrapper), // tp_basicsize
+ 0, // tp_itemsize
+ (destructor)S_CFCBase_dealloc, // tp_dealloc
+ 0, // tp_print
+ 0, // tp_getattr
+ 0, // tp_setattr
+ 0, // tp_reserved
+ 0, // tp_repr
+ 0, // tp_as_number
+ 0, // tp_as_sequence
+ 0, // tp_as_mapping
+ 0, // tp_hash
+ 0, // tp_call
+ 0, // tp_str
+ 0, // tp_getattro
+ 0, // tp_setattro
+ 0, // tp_as_buffer
+ Py_TPFLAGS_DEFAULT, // tp_flags
+ "CFCBindCore", // tp_doc
+ 0, // tp_traverse
+ 0, // tp_clear
+ 0, // tp_richcompare
+ 0, // tp_weaklistoffset
+ 0, // tp_iter
+ 0, // tp_iternext
+ bindcore_methods, // tp_methods
+ 0, // tp_members
+ 0, // tp_getset
+ 0, // tp_base
+ 0, // tp_dict
+ 0, // tp_descr_get
+ 0, // tp_descr_set
+ 0, // tp_dictoffset
+ 0, // tp_init
+ 0, // tp_allow
+ (newfunc)S_CFCBindCore_new // tp_new
+};
+
+/******************************* common ******************************/
+
+PyMODINIT_FUNC
+PyInit__cfc(void) {
+ // Initialize Python type objects.
+ Hierarchy_pytype = &Hierarchy_pytype_struct;
+ Parcel_pytype = &Parcel_pytype_struct;
+ BindCore_pytype = &BindCore_pytype_struct;
+ if (PyType_Ready(Hierarchy_pytype) < 0) {
+ return NULL;
+ }
+ if (PyType_Ready(Parcel_pytype) < 0) {
+ return NULL;
+ }
+ if (PyType_Ready(BindCore_pytype) < 0) {
+ return NULL;
+ }
+
+ // Initialize modules.
+ cfc_module = PyModule_Create(&cfc_module_def);
+ cfc_model_module = PyModule_Create(&cfc_model_module_def);
+ cfc_binding_module = PyModule_Create(&cfc_binding_module_def);
+ PyModule_AddObject(cfc_module, "model", (PyObject*)cfc_model_module);
+ PyModule_AddObject(cfc_module, "binding", (PyObject*)cfc_binding_module);
+
+ // Add type objects to "model" module.
+ Py_INCREF(Hierarchy_pytype);
+ PyModule_AddObject(cfc_model_module, "Hierarchy",
+ (PyObject*)Hierarchy_pytype);
+ Py_INCREF(Parcel_pytype);
+ PyModule_AddObject(cfc_model_module, "Parcel",
+ (PyObject*)Parcel_pytype);
+
+ // Add type objects to "binding" module.
+ Py_INCREF(BindCore_pytype);
+ PyModule_AddObject(cfc_binding_module, "BindCore",
+ (PyObject*)BindCore_pytype);
+
+ return cfc_module;
+}
+
+
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/11d08c5b/compiler/python/src/clownfish/_cfc.c
----------------------------------------------------------------------
diff --git a/compiler/python/src/clownfish/_cfc.c b/compiler/python/src/clownfish/_cfc.c
deleted file mode 100644
index 706943f..0000000
--- a/compiler/python/src/clownfish/_cfc.c
+++ /dev/null
@@ -1,400 +0,0 @@
-/* Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "Python.h"
-#include "CFC.h"
-
-typedef struct {
- PyObject_HEAD
- void *cfc_obj;
-} CFCPyWrapper;
-
-static PyModuleDef cfc_module_def = {
- PyModuleDef_HEAD_INIT,
- "clownfish._cfc",
- "CFC: Clownfish compiler",
- -1,
- NULL, NULL, NULL, NULL, NULL
-};
-
-static PyModuleDef cfc_model_module_def = {
- PyModuleDef_HEAD_INIT,
- "clownfish.cfc.model",
- "CFC classes which model language constructs",
- -1,
- NULL, NULL, NULL, NULL, NULL
-};
-
-static PyModuleDef cfc_binding_module_def = {
- PyModuleDef_HEAD_INIT,
- "clownfish.cfc.binding",
- "CFC components which generate bindings",
- -1,
- NULL, NULL, NULL, NULL, NULL
-};
-
-static PyObject *cfc_module;
-static PyObject *cfc_model_module;
-static PyObject *cfc_binding_module;
-
-static PyObject*
-S_wrap_cfcbase(PyTypeObject *type, void *cfc_obj) {
- if (cfc_obj == NULL) {
- Py_RETURN_NONE;
- }
- CFCPyWrapper *wrapper = (CFCPyWrapper*)type->tp_alloc(type, 0);
- if (wrapper == NULL) {
- PyErr_SetString(PyExc_RuntimeError, "Failed to allocate object");
- return NULL;
- }
- wrapper->cfc_obj = cfc_obj;
- return (PyObject*)wrapper;
-}
-
-static void
-S_CFCBase_dealloc(CFCPyWrapper *wrapper) {
- CFCBase *temp = (CFCBase*)wrapper->cfc_obj;
- wrapper->cfc_obj = NULL;
- CFCBase_decref(temp);
- Py_TYPE(wrapper)->tp_free(wrapper);
-}
-
-void*
-S_to_cfc_something(PyObject *wrapper, const char *class_name) {
- if (wrapper == NULL || wrapper == Py_None) {
- return NULL;
- }
- CFCBase *obj = (CFCBase*)((CFCPyWrapper*)wrapper)->cfc_obj;
- if (strcmp(CFCBase_get_cfc_class(obj), class_name) != 0) {
- CFCUtil_die("Object is not a %s, it's a %s", class_name,
- CFCBase_get_cfc_class(obj));
- }
- return obj;
-}
-
-static CFCHierarchy*
-S_to_Hierarchy(PyObject *wrapper) {
- return (CFCHierarchy*)S_to_cfc_something(wrapper,
- "Clownfish::CFC::Model::Hierarchy");
-}
-
-static CFCParcel*
-S_to_Parcel(PyObject *wrapper) {
- return (CFCParcel*)S_to_cfc_something(wrapper,
- "Clownfish::CFC::Model::Parcel");
-}
-
-static CFCBindCore*
-S_to_BindCore(PyObject *wrapper) {
- return (CFCBindCore*)S_to_cfc_something(wrapper,
- "Clownfish::CFC::Binding::Core");
-}
-
-static PyTypeObject *Hierarchy_pytype;
-static PyTypeObject *Parcel_pytype;
-static PyTypeObject *BindCore_pytype;
-
-/***************************** CFCHierarchy *****************************/
-
-static PyObject*
-S_CFCHierarchy_new(PyTypeObject *type, PyObject *args,
- PyObject *keyword_args) {
- char *dest = NULL;
- char *keywords[] = {"dest", NULL};
- int result = PyArg_ParseTupleAndKeywords(args, keyword_args, "|s",
- keywords, &dest);
- if (!result) { return NULL; }
- if (!dest) {
- PyErr_SetString(PyExc_TypeError, "Missing required arg 'dest'");
- return NULL;
- }
- PyObject *inc_func = PyObject_GetAttrString(cfc_module, "_get_inc_dirs");
- PyObject *dirs = NULL;
- if (PyCallable_Check(inc_func)) {
- dirs = PyObject_CallObject(inc_func, NULL);
- }
- if (dirs == NULL || !PyList_Check(dirs)) {
- Py_XDECREF(inc_func);
- Py_XDECREF(dirs);
- PyErr_SetString(PyExc_RuntimeError, "_get_inc_dirs failed");
- return NULL;
- }
- CFCHierarchy *hierarchy = CFCHierarchy_new(dest);
- for (Py_ssize_t i = 0, max = PyList_Size(dirs); i < max; i++) {
- PyObject *dir = PyList_GetItem(dirs, i);
- if (PyUnicode_Check(dir)) {
- char *dir_utf8 = PyUnicode_AsUTF8(dir);
- CFCHierarchy_add_include_dir(hierarchy, dir_utf8);
- }
- else {
- PyErr_SetString(PyExc_RuntimeError, "not a string");
- return NULL;
- }
- }
-
- Py_XDECREF(inc_func);
- Py_XDECREF(dirs);
-
- return S_wrap_cfcbase(Hierarchy_pytype, hierarchy);
-}
-
-static PyObject*
-S_CFCHierarchy_build(PyObject *wrapper, PyObject *unused) {
- CHY_UNUSED_VAR(unused);
- CFCHierarchy_build(S_to_Hierarchy(wrapper));
- Py_RETURN_NONE;
-}
-
-static PyObject*
-S_CFCHierarchy_add_include_dir(PyObject *wrapper, PyObject *dir) {
- CFCHierarchy_add_include_dir(S_to_Hierarchy(wrapper),
- PyUnicode_AsUTF8(dir));
- Py_RETURN_NONE;
-}
-
-static PyObject*
-S_CFCHierarchy_add_source_dir(PyObject *wrapper, PyObject *dir) {
- CFCHierarchy_add_source_dir(S_to_Hierarchy(wrapper),
- PyUnicode_AsUTF8(dir));
- Py_RETURN_NONE;
-}
-
-static PyObject*
-S_CFCHierarchy_write_log(PyObject *wrapper, PyObject *unused) {
- CHY_UNUSED_VAR(unused);
- CFCHierarchy_write_log(S_to_Hierarchy(wrapper));
- Py_RETURN_NONE;
-}
-
-static PyMethodDef hierarchy_methods[] = {
- {"add_include_dir", (PyCFunction)S_CFCHierarchy_add_include_dir, METH_O, NULL},
- {"add_source_dir", (PyCFunction)S_CFCHierarchy_add_source_dir, METH_O, NULL},
- {"build", (PyCFunction)S_CFCHierarchy_build, METH_NOARGS, NULL},
- {"write_log", (PyCFunction)S_CFCHierarchy_write_log, METH_NOARGS, NULL},
- {NULL}
-};
-
-static PyTypeObject Hierarchy_pytype_struct = {
- PyVarObject_HEAD_INIT(NULL, 0)
- "clownfish.cfc.model.Hierarchy", // tp_name
- sizeof(CFCPyWrapper), // tp_basicsize
- 0, // tp_itemsize
- (destructor)S_CFCBase_dealloc, // tp_dealloc
- 0, // tp_print
- 0, // tp_getattr
- 0, // tp_setattr
- 0, // tp_reserved
- 0, // tp_repr
- 0, // tp_as_number
- 0, // tp_as_sequence
- 0, // tp_as_mapping
- 0, // tp_hash
- 0, // tp_call
- 0, // tp_str
- 0, // tp_getattro
- 0, // tp_setattro
- 0, // tp_as_buffer
- Py_TPFLAGS_DEFAULT, // tp_flags
- "CFCHierarchy", // tp_doc
- 0, // tp_traverse
- 0, // tp_clear
- 0, // tp_richcompare
- 0, // tp_weaklistoffset
- 0, // tp_iter
- 0, // tp_iternext
- hierarchy_methods, // tp_methods
- 0, // tp_members
- 0, // tp_getset
- 0, // tp_base
- 0, // tp_dict
- 0, // tp_descr_get
- 0, // tp_descr_set
- 0, // tp_dictoffset
- 0, // tp_init
- 0, // tp_allow
- (newfunc)S_CFCHierarchy_new // tp_new
-};
-
-/***************************** CFCParcel *****************************/
-
-PyObject*
-S_CFCParcel_fetch(PyObject *ignored, PyObject *name) {
- CFCParcel *parcel = CFCParcel_fetch(PyUnicode_AsUTF8(name));
- return S_wrap_cfcbase(Parcel_pytype, parcel);
-}
-
-static PyMethodDef parcel_methods[] = {
- {"fetch", (PyCFunction)S_CFCParcel_fetch, METH_STATIC, NULL},
- {NULL}
-};
-
-static PyTypeObject Parcel_pytype_struct = {
- PyVarObject_HEAD_INIT(NULL, 0)
- "clownfish.cfc.model.Parcel", // tp_name
- sizeof(CFCPyWrapper), // tp_basicsize
- 0, // tp_itemsize
- (destructor)S_CFCBase_dealloc, // tp_dealloc
- 0, // tp_print
- 0, // tp_getattr
- 0, // tp_setattr
- 0, // tp_reserved
- 0, // tp_repr
- 0, // tp_as_number
- 0, // tp_as_sequence
- 0, // tp_as_mapping
- 0, // tp_hash
- 0, // tp_call
- 0, // tp_str
- 0, // tp_getattro
- 0, // tp_setattro
- 0, // tp_as_buffer
- Py_TPFLAGS_DEFAULT, // tp_flags
- "CFCParcel", // tp_doc
- 0, // tp_traverse
- 0, // tp_clear
- 0, // tp_richcompare
- 0, // tp_weaklistoffset
- 0, // tp_iter
- 0, // tp_iternext
- parcel_methods, // tp_methods
- 0, // tp_members
- 0, // tp_getset
- 0, // tp_base
- 0, // tp_dict
- 0, // tp_descr_get
- 0, // tp_descr_set
- 0, // tp_dictoffset
- 0, // tp_init
- 0, // tp_allow
- 0 // tp_new
-};
-
-/***************************** CFCBindCore *****************************/
-
-static PyObject*
-S_CFCBindCore_new(PyTypeObject *type, PyObject *args,
- PyObject *keyword_args) {
- PyObject *hierarchy_wrapped;
- char *header = "";
- char *footer = "";
- char *keywords[] = {"hierarchy", "header", "footer", NULL};
- int result = PyArg_ParseTupleAndKeywords(args, keyword_args, "O!|ss",
- keywords, Hierarchy_pytype,
- &hierarchy_wrapped, &header,
- &footer);
- if (!result) { return NULL; }
- CFCHierarchy *hierarchy = S_to_Hierarchy(hierarchy_wrapped);
- CFCBindCore *obj = CFCBindCore_new(hierarchy, header, footer);
- return S_wrap_cfcbase(BindCore_pytype, obj);
-}
-
-static PyObject*
-S_CFCBindCore_write_all_modified(PyObject *wrapper, PyObject *args) {
- int modified = 0;
- int result = PyArg_ParseTuple(args, "|p", &modified);
- if (!result) { return NULL; }
- CFCBindCore_write_all_modified(S_to_BindCore(wrapper), modified);
- Py_RETURN_NONE;
-}
-
-static PyMethodDef bindcore_methods[] = {
- {"write_all_modified", (PyCFunction)S_CFCBindCore_write_all_modified, METH_VARARGS, NULL},
- {NULL}
-};
-
-static PyTypeObject BindCore_pytype_struct = {
- PyVarObject_HEAD_INIT(NULL, 0)
- "clownfish.cfc.binding.BindCore", // tp_name
- sizeof(CFCPyWrapper), // tp_basicsize
- 0, // tp_itemsize
- (destructor)S_CFCBase_dealloc, // tp_dealloc
- 0, // tp_print
- 0, // tp_getattr
- 0, // tp_setattr
- 0, // tp_reserved
- 0, // tp_repr
- 0, // tp_as_number
- 0, // tp_as_sequence
- 0, // tp_as_mapping
- 0, // tp_hash
- 0, // tp_call
- 0, // tp_str
- 0, // tp_getattro
- 0, // tp_setattro
- 0, // tp_as_buffer
- Py_TPFLAGS_DEFAULT, // tp_flags
- "CFCBindCore", // tp_doc
- 0, // tp_traverse
- 0, // tp_clear
- 0, // tp_richcompare
- 0, // tp_weaklistoffset
- 0, // tp_iter
- 0, // tp_iternext
- bindcore_methods, // tp_methods
- 0, // tp_members
- 0, // tp_getset
- 0, // tp_base
- 0, // tp_dict
- 0, // tp_descr_get
- 0, // tp_descr_set
- 0, // tp_dictoffset
- 0, // tp_init
- 0, // tp_allow
- (newfunc)S_CFCBindCore_new // tp_new
-};
-
-/******************************* common ******************************/
-
-PyMODINIT_FUNC
-PyInit__cfc(void) {
- // Initialize Python type objects.
- Hierarchy_pytype = &Hierarchy_pytype_struct;
- Parcel_pytype = &Parcel_pytype_struct;
- BindCore_pytype = &BindCore_pytype_struct;
- if (PyType_Ready(Hierarchy_pytype) < 0) {
- return NULL;
- }
- if (PyType_Ready(Parcel_pytype) < 0) {
- return NULL;
- }
- if (PyType_Ready(BindCore_pytype) < 0) {
- return NULL;
- }
-
- // Initialize modules.
- cfc_module = PyModule_Create(&cfc_module_def);
- cfc_model_module = PyModule_Create(&cfc_model_module_def);
- cfc_binding_module = PyModule_Create(&cfc_binding_module_def);
- PyModule_AddObject(cfc_module, "model", (PyObject*)cfc_model_module);
- PyModule_AddObject(cfc_module, "binding", (PyObject*)cfc_binding_module);
-
- // Add type objects to "model" module.
- Py_INCREF(Hierarchy_pytype);
- PyModule_AddObject(cfc_model_module, "Hierarchy",
- (PyObject*)Hierarchy_pytype);
- Py_INCREF(Parcel_pytype);
- PyModule_AddObject(cfc_model_module, "Parcel",
- (PyObject*)Parcel_pytype);
-
- // Add type objects to "binding" module.
- Py_INCREF(BindCore_pytype);
- PyModule_AddObject(cfc_binding_module, "BindCore",
- (PyObject*)BindCore_pytype);
-
- return cfc_module;
-}
-
-
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/11d08c5b/compiler/python/src/clownfish/cfc/__init__.py
----------------------------------------------------------------------
diff --git a/compiler/python/src/clownfish/cfc/__init__.py b/compiler/python/src/clownfish/cfc/__init__.py
deleted file mode 100644
index f7f3e0b..0000000
--- a/compiler/python/src/clownfish/cfc/__init__.py
+++ /dev/null
@@ -1,29 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import clownfish._cfc
-from clownfish._cfc import *
-import site
-import os.path
-
-def _get_inc_dirs():
- dirs = []
- for path in site.getsitepackages():
- path = os.path.join(path, "clownfish/_include")
- dirs.append(path)
- return dirs
-
-clownfish._cfc._get_inc_dirs = _get_inc_dirs
-
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/11d08c5b/compiler/python/test/test_cfc.py
----------------------------------------------------------------------
diff --git a/compiler/python/test/test_cfc.py b/compiler/python/test/test_cfc.py
index c4091d8..5ac2b8f 100644
--- a/compiler/python/test/test_cfc.py
+++ b/compiler/python/test/test_cfc.py
@@ -1,5 +1,5 @@
import unittest
-import clownfish.cfc
+import cfc
class MyTest(unittest.TestCase):