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