@@ -244,22 +244,15 @@ def preprocess_python_headers():
244244
245245
246246def gen_interop_head (writer ):
247- if hasattr (sys , "abiflags" ):
248- if "d" in sys .abiflags :
249- defines .append ("PYTHON_WITH_PYDEBUG" )
250- raise NotImplementedError
251- if "m" in sys .abiflags :
252- defines .append ("PYTHON_WITH_PYMALLOC" )
253- raise NotImplementedError
254- if "u" in sys .abiflags :
255- defines .append ("PYTHON_WITH_WIDE_UNICODE" )
256- raise NotImplementedError
257-
258247 filename = os .path .basename (__file__ )
248+ abi_flags = sys .abiflags if hasattr (sys , "abiflags" ) else ''
249+ py_ver = "{0}.{1}" .format (PY_MAJOR , PY_MINOR )
259250 class_definition = """
260251// Auto-generated by %s.
261252// DO NOT MODIFY BY HAND.
262253
254+ // Python %s: ABI flags: '%s'
255+
263256// ReSharper disable InconsistentNaming
264257// ReSharper disable IdentifierTypo
265258
@@ -270,7 +263,7 @@ def gen_interop_head(writer):
270263using Python.Runtime.Native;
271264
272265namespace Python.Runtime
273- {""" % filename
266+ {""" % ( filename , py_ver , abi_flags )
274267 writer .extend (class_definition )
275268
276269
@@ -281,20 +274,21 @@ def gen_interop_tail(writer):
281274 writer .extend (tail )
282275
283276
284- def gen_heap_type_members (parser , writer ):
277+ def gen_heap_type_members (parser , writer , type_name = None ):
285278 """Generate the TypeOffset C# class"""
286279 members = parser .get_struct_members ("PyHeapTypeObject" )
280+ type_name = type_name or "TypeOffset{0}{1}" .format (PY_MAJOR , PY_MINOR )
287281 class_definition = """
288282 [SuppressMessage("Style", "IDE1006:Naming Styles",
289283 Justification = "Following CPython",
290284 Scope = "type")]
291285
292286 [StructLayout(LayoutKind.Sequential)]
293- internal class TypeOffset{0}{1 } : GeneratedTypeOffsets, ITypeOffsets
287+ internal class {0 } : GeneratedTypeOffsets, ITypeOffsets
294288 {{
295- public TypeOffset{0}{1 }() {{ }}
289+ public {0 }() {{ }}
296290 // Auto-generated from PyHeapTypeObject in Python.h
297- """ .format (PY_MAJOR , PY_MINOR )
291+ """ .format (type_name )
298292
299293 # All the members are sizeof(void*) so we don't need to do any
300294 # extra work to determine the size based on the type.
@@ -347,9 +341,10 @@ def main():
347341
348342 writer = Writer ()
349343 # generate the C# code
344+ offsets_type_name = "NativeTypeOffset" if len (sys .argv ) > 1 else None
350345 gen_interop_head (writer )
351346
352- gen_heap_type_members (ast_parser , writer )
347+ gen_heap_type_members (ast_parser , writer , type_name = offsets_type_name )
353348
354349 ver_define = "PYTHON{0}{1}" .format (PY_MAJOR , PY_MINOR )
355350 writer .append (code = "#if " + ver_define )
0 commit comments