Author: Armin Rigo <[email protected]>
Branch: 
Changeset: r163:1c10444e58e6
Date: 2014-12-05 15:54 +0100
http://bitbucket.org/cffi/creflect/changeset/1c10444e58e6/

Log:    globals of all types

diff --git a/zeffir/cglob.c b/zeffir/cglob.c
--- a/zeffir/cglob.c
+++ b/zeffir/cglob.c
@@ -51,3 +51,13 @@
     assert(addr != NULL);
     return (PyObject *)zgs;
 }
+
+static PyObject *read_global_var(ZefGlobSupportObject *zgs)
+{
+    return convert_to_object(zgs->zgs_data, zgs->zgs_type);
+}
+
+static int write_global_var(ZefGlobSupportObject *zgs, PyObject *obj)
+{
+    return convert_from_object(zgs->zgs_data, zgs->zgs_type, obj);
+}
diff --git a/zeffir/lib_obj.c b/zeffir/lib_obj.c
--- a/zeffir/lib_obj.c
+++ b/zeffir/lib_obj.c
@@ -53,8 +53,7 @@
         return NULL;
 
     if (ZefGlobSupport_Check(x)) {
-        // XXX!
-        return PyInt_FromLong(*(int *)(((ZefGlobSupportObject *)x)->zgs_data));
+        return read_global_var((ZefGlobSupportObject *)x);
     }
     Py_INCREF(x);
     return x;
@@ -73,12 +72,7 @@
     }
 
     if (ZefGlobSupport_Check(x)) {
-        // XXX!
-        long y = PyInt_AsLong(val);
-        if (PyErr_Occurred())
-            return -1;
-        *(int *)(((ZefGlobSupportObject *)x)->zgs_data) = y;
-        return 0;
+        return write_global_var((ZefGlobSupportObject *)x, val);
     }
 
     PyErr_Format(PyExc_AttributeError,
diff --git a/zeffir/test/global.crx b/zeffir/test/global.crx
--- a/zeffir/test/global.crx
+++ b/zeffir/test/global.crx
@@ -1,8 +1,10 @@
 short myglob = 42;
+short *myglobptr = &myglob;
 
 
 // CREFLECT: start
 
 short myglob;
+short *myglobptr;
 
 // CREFLECT: end
diff --git a/zeffir/test/test_global.py b/zeffir/test/test_global.py
--- a/zeffir/test/test_global.py
+++ b/zeffir/test/test_global.py
@@ -13,5 +13,14 @@
     assert type(res) is int
     assert res == -43
     #
-    #py.test.raises(OverflowError, setattr, lib, 'myglob', 40000)
-    #py.test.raises(OverflowError, setattr, lib, 'myglob', -40000)
+    py.test.raises(OverflowError, setattr, lib, 'myglob', 40000)
+    py.test.raises(OverflowError, setattr, lib, 'myglob', -40000)
+
+def test_ptr_global():
+    ffi, lib = support.compile_and_open('global')
+    p = lib.myglobptr
+    assert p[0] == 42
+    #
+    q = ffi.new("short *", -555)
+    lib.myglobptr = q
+    assert lib.myglobptr[0] == -555
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to