summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArmin Rigo <armin.rigo@gmail.com>2014-08-09 08:44:46 +0200
committerArmin Rigo <armin.rigo@gmail.com>2014-08-09 08:44:46 +0200
commitbe112737267709d4ab604a86c696ecde11cda67f (patch)
treea361ca93563f1726d1e79fe1181a16768e8f04e3
parent626de6766d098b5ee1647ca9b1509e3ac8f78fc9 (diff)
parentb0ff627bb0a86660363725d9e738c014114420d4 (diff)
downloadcffi-be112737267709d4ab604a86c696ecde11cda67f.tar.gz
Merged in pjenvey/cffi (pull request #44)
avoid deprecated imp.get_suffixes on >= 3.3
-rw-r--r--cffi/cparser.py6
-rw-r--r--testing/test_parsing.py11
2 files changed, 16 insertions, 1 deletions
diff --git a/cffi/cparser.py b/cffi/cparser.py
index a53d4c3..d699894 100644
--- a/cffi/cparser.py
+++ b/cffi/cparser.py
@@ -532,11 +532,15 @@ class Parser(object):
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
index 594796a..97a16f9 100644
--- a/testing/test_parsing.py
+++ b/testing/test_parsing.py
@@ -288,3 +288,14 @@ def test__is_constant_globalvar():
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