[pypy-commit] cffi binary_enum: Add operation support in enum

realitix pypy.commits at gmail.com
Wed Mar 15 16:23:05 EDT 2017


Author: Jean-Sebastien Bevilacqua <realitix at gmail.com>
Branch: binary_enum
Changeset: r2911:5e9d6a26b6b1
Date: 2017-03-15 16:48 +0100
http://bitbucket.org/cffi/cffi/changeset/5e9d6a26b6b1/

Log:	Add operation support in enum

	With this patch, the following C code works now:

	```c typedef enum VkPipelineCacheHeaderVersion {
	VK_PIPELINE_CACHE_HEADER_VERSION_ONE = 1,
	VK_PIPELINE_CACHE_HEADER_VERSION_RANGE_SIZE =
	(VK_PIPELINE_CACHE_HEADER_VERSION_ONE -
	VK_PIPELINE_CACHE_HEADER_VERSION_ONE + 1), }
	VkPipelineCacheHeaderVersion; ```

diff --git a/cffi/cparser.py b/cffi/cparser.py
--- a/cffi/cparser.py
+++ b/cffi/cparser.py
@@ -803,6 +803,16 @@
                            "the actual array length in this context"
                            % exprnode.coord.line)
         #
+        if (isinstance(exprnode, pycparser.c_ast.BinaryOp) and
+                exprnode.op == '+'):
+            return (self._parse_constant(exprnode.left) +
+                    self._parse_constant(exprnode.right))
+        #
+        if (isinstance(exprnode, pycparser.c_ast.BinaryOp) and
+                exprnode.op == '-'):
+            return (self._parse_constant(exprnode.left) -
+                    self._parse_constant(exprnode.right))
+        #
         raise FFIError(":%d: unsupported expression: expected a "
                        "simple numeric constant" % exprnode.coord.line)
 


More information about the pypy-commit mailing list