diff options
Diffstat (limited to 'catapult/common/py_vulcanize/third_party/rjsmin/_setup/include/cext.h')
-rw-r--r-- | catapult/common/py_vulcanize/third_party/rjsmin/_setup/include/cext.h | 286 |
1 files changed, 286 insertions, 0 deletions
diff --git a/catapult/common/py_vulcanize/third_party/rjsmin/_setup/include/cext.h b/catapult/common/py_vulcanize/third_party/rjsmin/_setup/include/cext.h new file mode 100644 index 00000000..78fa7f53 --- /dev/null +++ b/catapult/common/py_vulcanize/third_party/rjsmin/_setup/include/cext.h @@ -0,0 +1,286 @@ +/* + * Copyright 2006 - 2014 + * Andr\xe9 Malo or his licensors, as applicable + * + * Licensed 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. + */ + +/* + * central naming stuff + */ + +#ifndef SETUP_CEXT_H +#define SETUP_CEXT_H + +#ifndef EXT_MODULE +#error EXT_MODULE must be defined outside of this file (-DEXT_MODULE=...) +#endif + +/* + * include core header files + */ +#define PY_SSIZE_T_CLEAN + +#include "Python.h" +#include "structmember.h" + +/* + * define our helper macros depending on the stuff above + */ +#define STRINGIFY(n) STRINGIFY_HELPER(n) +#define STRINGIFY_HELPER(n) #n +#define CONCATENATE(first, second) CONCATENATE_HELPER(first, second) +#define CONCATENATE_HELPER(first, second) first##second + +#define EXT_MODULE_NAME STRINGIFY(EXT_MODULE) +#ifdef EXT_PACKAGE +#define EXT_PACKAGE_NAME STRINGIFY(EXT_PACKAGE) +#define EXT_MODULE_PATH EXT_PACKAGE_NAME "." EXT_MODULE_NAME +#else +#define EXT_PACKAGE_NAME "" +#define EXT_MODULE_PATH EXT_MODULE_NAME +#endif + +#define EXT_DOCS_VAR CONCATENATE(var, CONCATENATE(EXT_MODULE, __doc__)) +#define EXT_METHODS_VAR CONCATENATE(var, CONCATENATE(EXT_MODULE, _methods)) +#define EXT_METHODS static PyMethodDef EXT_METHODS_VAR[] + +#define EXT_DEFINE_VAR CONCATENATE(var, CONCATENATE(EXT_MODULE, _module)) + +/* Py3K Support */ +#if PY_MAJOR_VERSION >= 3 + +#define EXT3 + +#ifndef Py_TPFLAGS_HAVE_CLASS +#define Py_TPFLAGS_HAVE_CLASS (0) +#endif + +#ifndef Py_TPFLAGS_HAVE_WEAKREFS +#define Py_TPFLAGS_HAVE_WEAKREFS (0) +#endif + +#ifndef Py_TPFLAGS_HAVE_ITER +#define Py_TPFLAGS_HAVE_ITER (0) +#endif + +#ifndef PyMODINIT_FUNC +#define EXT_INIT_FUNC PyObject *CONCATENATE(PyInit_, EXT_MODULE)(void) +#else +#define EXT_INIT_FUNC PyMODINIT_FUNC CONCATENATE(PyInit_, EXT_MODULE)(void) +#endif + +#define EXT_DEFINE(name, methods, doc) \ +static struct PyModuleDef EXT_DEFINE_VAR = { \ + PyModuleDef_HEAD_INIT, \ + name, \ + doc, \ + -1, \ + methods, \ + NULL, \ + NULL, \ + NULL, \ + NULL \ +} + +#define EXT_CREATE(def) (PyModule_Create(def)) +#define EXT_INIT_ERROR(module) do {Py_XDECREF(module); return NULL;} while(0) +#define EXT_INIT_RETURN(module) return module + +#define EXT_DOC_UNICODE(m) + +#else /* end py3k */ + +#define EXT2 + +#ifndef PyVarObject_HEAD_INIT + #define PyVarObject_HEAD_INIT(type, size) \ + PyObject_HEAD_INIT(type) size, +#endif + +#ifndef PyMODINIT_FUNC +#define EXT_INIT_FUNC void CONCATENATE(init, EXT_MODULE)(void) +#else +#define EXT_INIT_FUNC PyMODINIT_FUNC CONCATENATE(init, EXT_MODULE)(void) +#endif + +#define EXT_DEFINE__STRUCT \ + CONCATENATE(struct, CONCATENATE(EXT_MODULE, _module)) + +struct EXT_DEFINE__STRUCT { + char *m_name; + char *m_doc; + PyMethodDef *m_methods; +}; +#define EXT_DEFINE(name, methods, doc) \ +static struct EXT_DEFINE__STRUCT EXT_DEFINE_VAR = { \ + name, \ + doc, \ + methods \ +} + +#define EXT_CREATE(def) ((def)->m_doc \ + ? Py_InitModule3((def)->m_name, (def)->m_methods, (def)->m_doc) \ + : Py_InitModule((def)->m_name, (def)->m_methods) \ +) +#define EXT_INIT_ERROR(module) return +#define EXT_INIT_RETURN(module) return + +#define EXT_DOC_UNICODE(m) do { \ + PyObject *doc__, *uni__; \ + int res__; \ + \ + if ((doc__ = PyObject_GetAttrString(m, "__doc__"))) { \ + uni__ = PyUnicode_FromEncodedObject(doc__, "utf-8", "strict"); \ + Py_DECREF(doc__); \ + if (!uni__) \ + EXT_INIT_ERROR(m); \ + res__ = PyObject_SetAttrString(m, "__doc__", uni__); \ + Py_DECREF(uni__); \ + if (res__ == -1) \ + EXT_INIT_ERROR(m); \ + } \ + else if (!(PyErr_Occurred() \ + && PyErr_ExceptionMatches(PyExc_AttributeError))) \ + EXT_INIT_ERROR(m); \ +} while(0) + +#endif /* end py2K */ + +#define EXT_INIT_TYPE(module, type) do { \ + if (PyType_Ready(type) < 0) \ + EXT_INIT_ERROR(module); \ +} while (0) + +#define EXT_ADD_TYPE(module, name, type) do { \ + Py_INCREF(type); \ + if (PyModule_AddObject(module, name, (PyObject *)(type)) < 0) \ + EXT_INIT_ERROR(module); \ +} while (0) + +#define EXT_ADD_UNICODE(module, name, string, encoding) do { \ + if (PyModule_AddObject( \ + module, \ + name, \ + PyUnicode_Decode( \ + string, \ + sizeof(string) - 1, \ + encoding, \ + "strict" \ + )) < 0) \ + EXT_INIT_ERROR(module); \ +} while (0) + +#define EXT_ADD_STRING(module, name, string) do { \ + if (PyModule_AddStringConstant(module, name, string) < 0) \ + EXT_INIT_ERROR(module); \ +} while (0) + +#define EXT_ADD_INT(module, name, number) do { \ + if (PyModule_AddIntConstant(module, name, number) < 0) \ + EXT_INIT_ERROR(module); \ +} while (0) + + +/* PEP 353 support, implemented as of python 2.5 */ +#if PY_VERSION_HEX < 0x02050000 +typedef int Py_ssize_t; +#define PyInt_FromSsize_t(arg) PyInt_FromLong((long)arg) +#define PyInt_AsSsize_t(arg) (int)PyInt_AsLong(arg) +#define PY_SSIZE_T_MAX ((Py_ssize_t)INT_MAX) +#endif + +/* + * some helper macros (Python 2.4) + */ +#ifndef Py_VISIT +#define Py_VISIT(op) do { \ + if (op) { \ + int vret = visit((op), arg); \ + if (vret) return vret; \ + } \ +} while (0) +#endif + +#ifdef Py_CLEAR +#undef Py_CLEAR +#endif +#define Py_CLEAR(op) do { \ + if (op) { \ + PyObject *tmp__ = (PyObject *)(op); \ + (op) = NULL; \ + Py_DECREF(tmp__); \ + } \ +} while (0) + +#ifndef Py_RETURN_NONE +#define Py_RETURN_NONE return Py_INCREF(Py_None), Py_None +#endif + +#ifndef Py_RETURN_FALSE +#define Py_RETURN_FALSE return Py_INCREF(Py_False), Py_False +#endif + +#ifndef Py_RETURN_TRUE +#define Py_RETURN_TRUE return Py_INCREF(Py_True), Py_True +#endif + +/* Macros for inline documentation. (Python 2.3) */ +#ifndef PyDoc_VAR +#define PyDoc_VAR(name) static char name[] +#endif + +#ifndef PyDoc_STRVAR +#define PyDoc_STRVAR(name,str) PyDoc_VAR(name) = PyDoc_STR(str) +#endif + +#ifndef PyDoc_STR +#ifdef WITH_DOC_STRINGS +#define PyDoc_STR(str) str +#else +#define PyDoc_STR(str) "" +#endif +#endif + +/* Basestring check (basestring introduced in Python 2.3) */ +#if PY_VERSION_HEX < 0x02030000 +#define BaseString_Check(type) ( \ + PyObject_TypeCheck((type), &PyString_Type) \ + || PyObject_TypeCheck((type), &PyUnicode_Type) \ +) +#else +#define BaseString_Check(type) PyObject_TypeCheck((type), &PyBaseString_Type) +#endif + +#define GENERIC_ALLOC(type) \ + ((void *)((PyTypeObject *)type)->tp_alloc(type, (Py_ssize_t)0)) + +/* PyPy doesn't define it */ +#ifndef PyType_IS_GC +#define PyType_IS_GC(t) PyType_HasFeature((t), Py_TPFLAGS_HAVE_GC) +#endif + +#ifndef Py_TYPE +#define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) +#endif + +#define DEFINE_GENERIC_DEALLOC(prefix) \ +static void prefix##_dealloc(void *self) \ +{ \ + if (PyType_IS_GC(Py_TYPE(self))) \ + PyObject_GC_UnTrack(self); \ + (void)prefix##_clear(self); \ + (Py_TYPE(self))->tp_free((PyObject *)self); \ +} + +#endif /* SETUP_CEXT_H */ |