From 8a0acb317cf4870b3893849e6565833c611095bd Mon Sep 17 00:00:00 2001
From: Tavian Barnes <tavianator@gmail.com>
Date: Tue, 17 May 2011 10:16:13 -0600
Subject: Add dieOnWarnings() to python module.

---
 libdimension-python/dimension.c   |  21 +++++++-
 libdimension-python/scene.c       | 100 +++++++++++++++++++-------------------
 libdimension-python/tests/demo.py |   3 ++
 3 files changed, 72 insertions(+), 52 deletions(-)

(limited to 'libdimension-python')

diff --git a/libdimension-python/dimension.c b/libdimension-python/dimension.c
index 81174a7..ca19844 100644
--- a/libdimension-python/dimension.c
+++ b/libdimension-python/dimension.c
@@ -18,13 +18,30 @@
  * <http://www.gnu.org/licenses/>.                                       *
  *************************************************************************/
 
+#define PY_SSIZE_T_CLEAN
 #include <Python.h>
 #include <structmember.h>
 #include "dimension.h"
 
 #include "scene.c"
 
+static PyObject *
+dmnsn_py_dieOnWarnings(PyObject *self, PyObject *args)
+{
+  int die;
+
+  if (!PyArg_ParseTuple(args, "i", &die))
+    return NULL;
+
+  dmnsn_die_on_warnings(die);
+
+  Py_INCREF(Py_None);
+  return Py_None;
+}
+
 static PyMethodDef DimensionMethods[] = {
+  { "dieOnWarnings", dmnsn_py_dieOnWarnings, METH_VARARGS,
+    "Turn Dimension warnings into fatal errors." },
   { NULL, NULL, 0, NULL }
 };
 
@@ -39,13 +56,13 @@ static struct PyModuleDef dimensionmodule = {
 PyMODINIT_FUNC
 PyInit_dimension(void)
 {
-  if (!dmnsn_init_SceneType())
+  if (!dmnsn_py_init_SceneType())
     return NULL;
 
   PyObject *m = PyModule_Create(&dimensionmodule);
   if (!m)
     return NULL;
 
-  PyModule_AddObject(m, "Scene", (PyObject *)&dmnsn_SceneType);
+  PyModule_AddObject(m, "Scene", (PyObject *)&dmnsn_py_SceneType);
   return m;
 }
diff --git a/libdimension-python/scene.c b/libdimension-python/scene.c
index f742173..5b6066c 100644
--- a/libdimension-python/scene.c
+++ b/libdimension-python/scene.c
@@ -21,86 +21,86 @@
 typedef struct {
   PyObject_HEAD
   dmnsn_scene *scene;
-} dmnsn_SceneObject;
+} dmnsn_py_SceneObject;
 
 static PyObject *
-dmnsn_SceneNew(PyTypeObject *type, PyObject *args, PyObject *kwds)
+dmnsn_py_SceneNew(PyTypeObject *type, PyObject *args, PyObject *kwds)
 {
-  dmnsn_SceneObject *self;
-  self = (dmnsn_SceneObject *)type->tp_alloc(type, 0);
+  dmnsn_py_SceneObject *self;
+  self = (dmnsn_py_SceneObject *)type->tp_alloc(type, 0);
   self->scene = dmnsn_new_scene();
   return (PyObject *)self;
 }
 
 static int
-dmnsn_SceneInit(dmnsn_SceneObject *self, PyObject *args, PyObject *kwds)
+dmnsn_py_SceneInit(dmnsn_py_SceneObject *self, PyObject *args, PyObject *kwds)
 {
   return 0;
 }
 
 static void
-dmnsn_SceneDealloc(dmnsn_SceneObject *self)
+dmnsn_py_SceneDealloc(dmnsn_py_SceneObject *self)
 {
   dmnsn_delete_scene(self->scene);
   Py_TYPE(self)->tp_free((PyObject *)self);
 }
 
-static PyMemberDef dmnsn_SceneMembers[] = {
+static PyMemberDef dmnsn_py_SceneMembers[] = {
   { NULL }
 };
 
-static PyMethodDef dmnsn_SceneMethods[] = {
+static PyMethodDef dmnsn_py_SceneMethods[] = {
   { NULL }
 };
 
-static PyGetSetDef dmnsn_SceneGetSetters[] = {
+static PyGetSetDef dmnsn_py_SceneGetSetters[] = {
   { NULL }
 };
 
-static PyTypeObject dmnsn_SceneType = {
+static PyTypeObject dmnsn_py_SceneType = {
   PyVarObject_HEAD_INIT(NULL, 0)
-  "dimension.Scene",              /* tp_name */
-  sizeof(dmnsn_SceneObject),      /* tp_basicsize */
-  0,                              /* tp_itemsize */
-  (destructor)dmnsn_SceneDealloc, /* 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 */
-  "Dimension scene",              /* tp_doc */
-  0,                              /* tp_traverse */
-  0,                              /* tp_clear */
-  0,                              /* tp_richcompare */
-  0,                              /* tp_weaklistoffset */
-  0,                              /* tp_iter */
-  0,                              /* tp_iternext */
-  dmnsn_SceneMethods,             /* tp_methods */
-  dmnsn_SceneMembers,             /* tp_members */
-  dmnsn_SceneGetSetters,          /* tp_getset */
-  0,                              /* tp_base */
-  0,                              /* tp_dict */
-  0,                              /* tp_descr_get */
-  0,                              /* tp_descr_set */
-  0,                              /* tp_dictoffset */
-  (initproc)dmnsn_SceneInit,      /* tp_init */
-  0,                              /* tp_alloc */
-  dmnsn_SceneNew,                 /* tp_new */
+  "dimension.Scene",                 /* tp_name */
+  sizeof(dmnsn_py_SceneObject),      /* tp_basicsize */
+  0,                                 /* tp_itemsize */
+  (destructor)dmnsn_py_SceneDealloc, /* 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 */
+  "Dimension scene",                 /* tp_doc */
+  0,                                 /* tp_traverse */
+  0,                                 /* tp_clear */
+  0,                                 /* tp_richcompare */
+  0,                                 /* tp_weaklistoffset */
+  0,                                 /* tp_iter */
+  0,                                 /* tp_iternext */
+  dmnsn_py_SceneMethods,             /* tp_methods */
+  dmnsn_py_SceneMembers,             /* tp_members */
+  dmnsn_py_SceneGetSetters,          /* tp_getset */
+  0,                                 /* tp_base */
+  0,                                 /* tp_dict */
+  0,                                 /* tp_descr_get */
+  0,                                 /* tp_descr_set */
+  0,                                 /* tp_dictoffset */
+  (initproc)dmnsn_py_SceneInit,      /* tp_init */
+  0,                                 /* tp_alloc */
+  dmnsn_py_SceneNew,                 /* tp_new */
 };
 
 static bool
-dmnsn_init_SceneType(void)
+dmnsn_py_init_SceneType(void)
 {
-  Py_INCREF(&dmnsn_SceneType);
-  return PyType_Ready(&dmnsn_SceneType) >= 0;
+  Py_INCREF(&dmnsn_py_SceneType);
+  return PyType_Ready(&dmnsn_py_SceneType) >= 0;
 }
diff --git a/libdimension-python/tests/demo.py b/libdimension-python/tests/demo.py
index 10fe2ed..e9cdc7b 100755
--- a/libdimension-python/tests/demo.py
+++ b/libdimension-python/tests/demo.py
@@ -21,4 +21,7 @@
 
 from dimension import *
 
+# Treat warnings as errors for tests
+dieOnWarnings(True)
+
 scene = Scene()
-- 
cgit v1.2.3