diff options
author | Armin Rigo <armin.rigo@gmail.com> | 2014-08-09 08:44:46 +0200 |
---|---|---|
committer | Armin Rigo <armin.rigo@gmail.com> | 2014-08-09 08:44:46 +0200 |
commit | be112737267709d4ab604a86c696ecde11cda67f (patch) | |
tree | a361ca93563f1726d1e79fe1181a16768e8f04e3 | |
parent | 626de6766d098b5ee1647ca9b1509e3ac8f78fc9 (diff) | |
parent | b0ff627bb0a86660363725d9e738c014114420d4 (diff) | |
download | cffi-be112737267709d4ab604a86c696ecde11cda67f.tar.gz |
Merged in pjenvey/cffi (pull request #44)
avoid deprecated imp.get_suffixes on >= 3.3
-rw-r--r-- | cffi/cparser.py | 6 | ||||
-rw-r--r-- | testing/test_parsing.py | 11 |
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 |