diff options
Diffstat (limited to 'weave/common_info.py')
-rw-r--r-- | weave/common_info.py | 145 |
1 files changed, 17 insertions, 128 deletions
diff --git a/weave/common_info.py b/weave/common_info.py index da2278845..914134aea 100644 --- a/weave/common_info.py +++ b/weave/common_info.py @@ -7,148 +7,37 @@ import base_info # Basic module support code ############################################################# -module_support_code = \ -""" - -char* find_type(PyObject* py_obj) -{ - if(py_obj == NULL) return "C NULL value"; - if(PyCallable_Check(py_obj)) return "callable"; - if(PyString_Check(py_obj)) return "string"; - if(PyInt_Check(py_obj)) return "int"; - if(PyFloat_Check(py_obj)) return "float"; - if(PyDict_Check(py_obj)) return "dict"; - if(PyList_Check(py_obj)) return "list"; - if(PyTuple_Check(py_obj)) return "tuple"; - if(PyFile_Check(py_obj)) return "file"; - if(PyModule_Check(py_obj)) return "module"; - - //should probably do more intergation (and thinking) on these. - if(PyCallable_Check(py_obj) && PyInstance_Check(py_obj)) return "callable"; - if(PyInstance_Check(py_obj)) return "instance"; - if(PyCallable_Check(py_obj)) return "callable"; - return "unkown type"; -} - -void handle_bad_type(PyObject* py_obj, char* good_type, char* var_name) -{ - char msg[500]; - sprintf(msg,"received '%s' type instead of '%s' for variable '%s'", - find_type(py_obj),good_type,var_name); - throw Py::TypeError(msg); -} -""" +from conversion_code import module_support_code +from conversion_code import file_convert_code +from conversion_code import instance_convert_code +from conversion_code import callable_convert_code +from conversion_code import module_convert_code +from conversion_code import scalar_support_code +from conversion_code import non_template_scalar_support_code class basic_module_info(base_info.base_info): _headers = ['"Python.h"'] _support_code = [module_support_code] -############################################################# -# File conversion support code -############################################################# - -file_convert_code = \ -""" -FILE* py_to_file(PyObject* py_obj, char* name) -{ - if (!py_obj || !PyFile_Check(py_obj)) - handle_bad_type(py_obj,"file", name); - - // Cleanup code should call DECREF - Py_INCREF(py_obj); - return PyFile_AsFile(py_obj); -} - -PyObject* file_to_py(FILE* file, char* name, char* mode) -{ - PyObject* py_obj = NULL; - //extern int fclose(FILE *); - return (PyObject*) PyFile_FromFile(file, name, mode, fclose); -} - -""" - class file_info(base_info.base_info): _headers = ['<stdio.h>'] _support_code = [file_convert_code] -############################################################# -# Instance info code -############################################################# - -instance_convert_code = \ -""" -PyObject* py_to_instance(PyObject* py_obj, char* name) -{ - if (!py_obj || !PyFile_Check(py_obj)) - handle_bad_type(py_obj,"instance", name); - - // Should I INCREF??? - // Py_INCREF(py_obj); - // just return the raw python pointer. - return py_obj; -} - -PyObject* instance_to_py(PyObject* instance) -{ - // Don't think I need to do anything... - return (PyObject*) instance; -} - -""" class instance_info(base_info.base_info): _support_code = [instance_convert_code] -############################################################# -# Callable info code -############################################################# - -callable_convert_code = \ -""" -PyObject* py_to_callable(PyObject* py_obj, char* name) -{ - if (!py_obj || !PyCallable_Check(py_obj)) - handle_bad_type(py_obj,"callable", name); - - // Should I INCREF??? - // Py_INCREF(py_obj); - // just return the raw python pointer. - return py_obj; -} - -PyObject* callable_to_py(PyObject* callable) -{ - // Don't think I need to do anything... - return (PyObject*) callable; -} - -""" class callable_info(base_info.base_info): _support_code = [callable_convert_code] -############################################################# -# Module info code -############################################################# - -module_convert_code = \ -""" -PyObject* py_to_module(PyObject* py_obj, char* name) -{ - if (!py_obj || !PyModule_Check(py_obj)) - handle_bad_type(py_obj,"module", name); - - // Should I INCREF??? - // Py_INCREF(py_obj); - // just return the raw python pointer. - return py_obj; -} - -PyObject* module_to_py(PyObject* module) -{ - // Don't think I need to do anything... - return (PyObject*) module; -} - -""" class module_info(base_info.base_info): _support_code = [module_convert_code] + +class scalar_info(base_info.base_info): + _warnings = ['disable: 4275', 'disable: 4101'] + _headers = ['<complex>','<math.h>'] + def support_code(self): + if self.compiler != 'msvc': + # maybe this should only be for gcc... + return [scalar_support_code,non_template_scalar_support_code] + else: + return [non_template_scalar_support_code] |