Author: Devin Jeanpierre <[email protected]>
Branch: seperate-strucmember_h
Changeset: r82134:66d60a554284
Date: 2016-01-31 02:30 -0800
http://bitbucket.org/pypy/pypy/changeset/66d60a554284/
Log: Unrefactor code that was really better as it was.
I didn't realize I'd end up sharing, well, basically nothing.
diff --git a/pypy/module/cpyext/api.py b/pypy/module/cpyext/api.py
--- a/pypy/module/cpyext/api.py
+++ b/pypy/module/cpyext/api.py
@@ -960,47 +960,27 @@
pypy_macros_h = udir.join('pypy_macros.h')
pypy_macros_h.write('\n'.join(pypy_macros))
-def _header_to_guard(header_name):
- return '_PYPY_' + header_name.replace('.', '_').upper()
-
-def _decl_header_top(header_name):
- guard = _header_to_guard(header_name)
- header = [
- "#ifndef %s\n" % guard,
- "#define %s\n" % guard,
- "#ifndef PYPY_STANDALONE\n",
- "#ifdef __cplusplus",
- "extern \"C\" {",
- "#endif\n",
- '#define Signed long /* xxx temporary fix */\n',
- '#define Unsigned unsigned long /* xxx temporary fix */\n'
- ]
- if header_name == 'pypy_decl.h': # XXX don't send for code review unless
I'm sure this is necessary
- for decl in FORWARD_DECLS:
- header.append("%s;" % (decl,))
- return header
-
-def _decl_header_bottom(header_name):
- return [
- '#undef Signed /* xxx temporary fix */\n',
- '#undef Unsigned /* xxx temporary fix */\n',
- "#ifdef __cplusplus",
- "}",
- "#endif",
- "#endif /*PYPY_STANDALONE*/\n",
- "#endif /*%s*/\n" % _header_to_guard(header_name),
- ]
-
def generate_decls_and_callbacks(db, export_symbols, api_struct=True):
"NOT_RPYTHON"
# implement function callbacks and generate function decls
functions = []
decls = {}
+ pypy_decls = decls['pypy_decl.h'] = []
+ pypy_decls.append("#ifndef _PYPY_PYPY_DECL_H\n")
+ pypy_decls.append("#define _PYPY_PYPY_DECL_H\n")
+ pypy_decls.append("#ifndef PYPY_STANDALONE\n")
+ pypy_decls.append("#ifdef __cplusplus")
+ pypy_decls.append("extern \"C\" {")
+ pypy_decls.append("#endif\n")
+ pypy_decls.append('#define Signed long /* xxx temporary fix
*/\n')
+ pypy_decls.append('#define Unsigned unsigned long /* xxx temporary fix
*/\n')
+
+ for decl in FORWARD_DECLS:
+ pypy_decls.append("%s;" % (decl,))
for header_name, header_functions in FUNCTIONS_BY_HEADER.iteritems():
if header_name not in decls:
- decls[header_name] = header = []
- header.extend(_decl_header_top(header_name))
+ header = decls[header_name] = []
else:
header = decls[header_name]
@@ -1015,7 +995,6 @@
else:
body = "{ return _pypyAPI.%s(%s); }" % (name, callargs)
functions.append('%s %s(%s)\n%s' % (restype, name, args, body))
- pypy_decls = decls['pypy_decl.h']
for name in VA_TP_LIST:
name_no_star = process_va_name(name)
header = ('%s pypy_va_get_%s(va_list* vp)' %
@@ -1031,9 +1010,15 @@
typ = 'PyObject*'
pypy_decls.append('PyAPI_DATA(%s) %s;' % (typ, name))
+ pypy_decls.append('#undef Signed /* xxx temporary fix */\n')
+ pypy_decls.append('#undef Unsigned /* xxx temporary fix */\n')
+ pypy_decls.append("#ifdef __cplusplus")
+ pypy_decls.append("}")
+ pypy_decls.append("#endif")
+ pypy_decls.append("#endif /*PYPY_STANDALONE*/\n")
+ pypy_decls.append("#endif /*_PYPY_PYPY_DECL_H*/\n")
+
for header_name, header_decls in decls.iteritems():
- header_decls.extend(_decl_header_bottom(header_name))
-
decl_h = udir.join(header_name)
decl_h.write('\n'.join(header_decls))
return functions
diff --git a/pypy/module/cpyext/include/structmember.h
b/pypy/module/cpyext/include/structmember.h
--- a/pypy/module/cpyext/include/structmember.h
+++ b/pypy/module/cpyext/include/structmember.h
@@ -50,11 +50,18 @@
#define PY_WRITE_RESTRICTED 4
#define RESTRICTED (READ_RESTRICTED | PY_WRITE_RESTRICTED)
+#define Signed long /* xxx temporary fix */
+#define Unsigned unsigned long /* xxx temporary fix */
+
+/* API functions. */
+#include "pypy_structmember_decl.h"
+
+#undef Signed /* xxx temporary fix */
+#undef Unsigned /* xxx temporary fix */
#ifdef __cplusplus
}
#endif
#endif /* !Py_STRUCTMEMBER_H */
-/* API functions. */
-#include "pypy_structmember_decl.h"
+
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit