]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/src/pyfragments.swg
Update virtuals to new API
[wxWidgets.git] / wxPython / src / pyfragments.swg
index 84fc9a705a48de166aa9ebc94eb8cfd28b2a78ea..e3c7d9fe4b774d322e854f82a082da4c16fe639b 100644 (file)
@@ -1,45 +1,55 @@
 
 
-// There standard t_output_helper has been changed to return a list rather
-// than a tuple, we'll replace it with the old implementation here.
-
-
-%fragment("t_output_helper","header") %{
-  static PyObject* t_output_helper(PyObject* target, PyObject* o) {
-    PyObject*   o2;
-    PyObject*   o3;
-    
-    if (!target) {                   
-        target = o;
-    } else if (target == Py_None) {  
-        Py_DECREF(Py_None);
-        target = o;
-    } else {
-        if (!PyTuple_Check(target)) {
-            o2 = target;
-            target = PyTuple_New(1);
-            PyTuple_SetItem(target, 0, o2);
-        }            
-        o3 = PyTuple_New(1);            
-        PyTuple_SetItem(o3, 0, o);      
-
-        o2 = target;
-        target = PySequence_Concat(o2, o3); 
-        Py_DECREF(o2);                      
-        Py_DECREF(o3);
+//----------------------------------------------------------------------
+
+// The standard t_output_helper has been changed to return a list rather than
+// a tuple, we'll replace it with the old implementation here.  In SWIG 1.3.27
+// and earlier it is implemented as a $fragment, so it is only inserted into
+// the modules that need it.  For SWIG 1.3.28+ we just need to add a -D on the
+// compile command line to turn on the tuple version of the AppendOuput
+// function.
+#if SWIG_VERSION < 0x010328
+%fragment("t_output_helper","header")
+%{
+    static PyObject* t_output_helper(PyObject* result, PyObject* obj)
+    {
+        PyObject*   o2;
+        PyObject*   o3;
+        if (!result) {
+            result = obj;
+        } else if (result == Py_None) {
+            Py_DECREF(result);
+            result = obj;
+        } else {
+            if (!PyTuple_Check(result)) {
+                o2 = result;
+                result = PyTuple_New(1);
+                PyTuple_SET_ITEM(result, 0, o2);
+            }
+            o3 = PyTuple_New(1);            
+            PyTuple_SetItem(o3, 0, obj);      
+            o2 = result;
+            result = PySequence_Concat(o2, o3); 
+            Py_DECREF(o2);                      
+            Py_DECREF(o3);
+        }
+        return result;
     }
-    return target;
-  }
 %}
 
+#endif
+
+
 
 
+//----------------------------------------------------------------------
 // These fragments are inserted in modules that need to convert PyObjects to
 // integer values, my versions allow any numeric type to be used, as long as
 // it can be converted to a PyInt.  (Specifically, I allow floats where the
 // default SWIG_AsVal_long would just raise an exception.
 //
 
+#if SWIG_VERSION < 0x010328
 
 %fragment(SWIG_AsVal_frag(long), "header") {
 SWIGINTERN int
@@ -50,7 +60,7 @@ SWIG_AsVal(long)(PyObject* obj, long* val)
         return 1;
     }
     else {
-        SWIG_type_error("number", obj);
+        SWIG_Python_TypeError("number", obj);
     }
     return 0;
 }
@@ -64,7 +74,7 @@ SWIG_AsVal(unsigned long)(PyObject* obj, unsigned long* val)
 {
     long v = 0;
     if (SWIG_AsVal_long(obj, &v) && v < 0) {
-        SWIG_type_error("unsigned number", obj);
+        SWIG_Python_TypeError("unsigned number", obj);
     }
     else if (val)
         *val = (unsigned long)v;
@@ -82,8 +92,55 @@ SWIG_AsVal(double)(PyObject *obj, double* val)
         return 1;
     }
     else {
-        SWIG_type_error("number", obj);
+        SWIG_Python_TypeError("number", obj);
     }
     return 0;
 }
 }
+
+
+#else  // SWIG_VERSION >= 1.3.28
+
+%fragment(SWIG_AsVal_frag(long), "header") {
+SWIGINTERN int
+SWIG_AsVal(long)(PyObject* obj, long* val)
+{
+    if (PyNumber_Check(obj)) {
+        if (val) *val = PyInt_AsLong(obj);
+        return SWIG_OK;
+    }
+    return SWIG_TypeError;
+}
+}
+
+
+%fragment(SWIG_AsVal_frag(unsigned long), "header",
+          fragment=SWIG_AsVal_frag(long)) {
+SWIGINTERN int 
+SWIG_AsVal(unsigned long)(PyObject* obj, unsigned long* val)
+{
+    long v = 0;
+    if (SWIG_AsVal_long(obj, &v) && v < 0) {
+        return SWIG_TypeError;
+    }
+    else if (val)
+        *val = (unsigned long)v;
+    return SWIG_OK;
+}
+}
+
+
+%fragment(SWIG_AsVal_frag(double), "header") {
+SWIGINTERN int
+SWIG_AsVal(double)(PyObject *obj, double* val)
+{
+    if (PyNumber_Check(obj)) {
+        if (val) *val = PyFloat_AsDouble(obj);
+        return SWIG_OK;
+    }
+    return SWIG_TypeError;
+}
+}
+
+
+#endif // SWIG_VERSION