[pypy-commit] creflect default: Support '#define FOO <some integer constant>'
arigo
noreply at buildbot.pypy.org
Fri Nov 28 13:09:54 CET 2014
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r100:1d714ead0a23
Date: 2014-11-28 13:10 +0100
http://bitbucket.org/cffi/creflect/changeset/1d714ead0a23/
Log: Support '#define FOO <some integer constant>'
diff --git a/creflect/cparser.py b/creflect/cparser.py
--- a/creflect/cparser.py
+++ b/creflect/cparser.py
@@ -30,6 +30,9 @@
r_comment3 = re.compile(r"[*]/")
r_empty_braces = re.compile(r"{(\s*)}") # after comments have been removed
r_typedef_dotdodot = re.compile(r"\btypedef(\s*)[.][.][.]")
+r_define_var = re.compile(
+ r"^[ \t]*#[ \t]*define[ \t]+([A-Za-z_][A-Za-z0-9_]+)[ \t][^\n]+",
+ re.MULTILINE)
def remove_comments(csource):
csource = r_comment1.sub('', csource) # remove the '//' comments
@@ -56,6 +59,9 @@
def expand_typedef_dotdotdot(csource):
return r_typedef_dotdodot.sub(r'typedef\1 __crx_unknown_t ', csource)
+def expand_define_var(csource):
+ return r_define_var.sub(r'const int \1;', csource)
+
class CSource(object):
@@ -68,6 +74,7 @@
csource = remove_comments(self.cdefblock)
csource = expand_empty_braces(csource)
csource = expand_typedef_dotdotdot(csource)
+ csource = expand_define_var(csource)
return 'typedef int __crx_unknown_t; ' + csource
def to_ast(self):
diff --git a/test/codegen/macro-001.c b/test/codegen/macro-001.c
new file mode 100644
--- /dev/null
+++ b/test/codegen/macro-001.c
@@ -0,0 +1,23 @@
+#define FOO 42
+#define BAR (40U + 2)
+
+# ____________________________________________________________
+
+void testmacro_001(crx_builder_t *cb)
+{
+ crx_type_t *t1, *t2;
+ {
+ crx_num_const_t v;
+ (void)((FOO) << 1); /* check that 'FOO' is an integer */
+ t1 = CRX_INT_CONST(cb, FOO, &v, 1);
+ cb->define_num_const(cb, "FOO", t1, &v);
+#expect NUMCONST FOO = int 42
+ }
+ {
+ crx_num_const_t v;
+ (void)((BAR) << 1); /* check that 'BAR' is an integer */
+ t2 = CRX_INT_CONST(cb, BAR, &v, 1);
+ cb->define_num_const(cb, "BAR", t2, &v);
+#expect NUMCONST BAR = unsigned int 42
+ }
+}
More information about the pypy-commit
mailing list