[pypy-commit] cffi default: Merged in leethargo/cffi/parse_constant_plus (pull request #43)

arigo noreply at buildbot.pypy.org
Mon Jul 28 20:59:53 CEST 2014


Author: Armin Rigo <armin.rigo at gmail.com>
Branch: 
Changeset: r1552:8d650b674140
Date: 2014-07-28 20:59 +0200
http://bitbucket.org/cffi/cffi/changeset/8d650b674140/

Log:	Merged in leethargo/cffi/parse_constant_plus (pull request #43)

	add parsing of constant with unary +

diff --git a/cffi/cparser.py b/cffi/cparser.py
--- a/cffi/cparser.py
+++ b/cffi/cparser.py
@@ -532,11 +532,15 @@
 
     def _parse_constant(self, exprnode, partial_length_ok=False):
         # for now, limited to expressions that are an immediate number
-        # or negative number
+        # or positive/negative number
         if isinstance(exprnode, pycparser.c_ast.Constant):
             return int(exprnode.value, 0)
         #
         if (isinstance(exprnode, pycparser.c_ast.UnaryOp) and
+                exprnode.op == '+'):
+            return self._parse_constant(exprnode.expr)
+        #
+        if (isinstance(exprnode, pycparser.c_ast.UnaryOp) and
                 exprnode.op == '-'):
             return -self._parse_constant(exprnode.expr)
         # load previously defined int constant
diff --git a/testing/test_parsing.py b/testing/test_parsing.py
--- a/testing/test_parsing.py
+++ b/testing/test_parsing.py
@@ -288,3 +288,14 @@
         decl = ast.children()[0][1]
         node = decl.type
         assert p._is_constant_globalvar(node) == expected_output
+
+def test_enum():
+    ffi = FFI()
+    ffi.cdef("""
+        enum Enum { POS = +1, TWO = 2, NIL = 0, NEG = -1};
+        """)
+    C = ffi.dlopen(None)
+    assert C.POS == 1
+    assert C.TWO == 2
+    assert C.NIL == 0
+    assert C.NEG == -1


More information about the pypy-commit mailing list