Skip to content

Commit d6f4834

Browse files
committed
implemented NativeTypeOffset for installation with setup.py
1 parent fe1fb3b commit d6f4834

File tree

6 files changed

+25
-18
lines changed

6 files changed

+25
-18
lines changed

src/runtime/interop36.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
// Auto-generated by geninterop.py.
33
// DO NOT MODIFY BY HAND.
44

5+
// Python 3.6: ABI flags: ''
6+
57
// ReSharper disable InconsistentNaming
68
// ReSharper disable IdentifierTypo
79

src/runtime/interop37.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
// Auto-generated by geninterop.py.
33
// DO NOT MODIFY BY HAND.
44

5+
// Python 3.7: ABI flags: ''
6+
57
// ReSharper disable InconsistentNaming
68
// ReSharper disable IdentifierTypo
79

src/runtime/interop38.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
// Auto-generated by geninterop.py.
33
// DO NOT MODIFY BY HAND.
44

5+
// Python 3.8: ABI flags: ''
6+
57
// ReSharper disable InconsistentNaming
68
// ReSharper disable IdentifierTypo
79

src/runtime/interop39.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
// Auto-generated by geninterop.py.
33
// DO NOT MODIFY BY HAND.
44

5+
// Python 3.9: ABI flags: ''
6+
57
// ReSharper disable InconsistentNaming
68
// ReSharper disable IdentifierTypo
79

src/runtime/native/ABI.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,12 @@ internal static void Initialize(Version version, BorrowedReference pyType)
1515

1616
var thisAssembly = Assembly.GetExecutingAssembly();
1717

18+
const string nativeTypeOffsetClassName = "Python.Runtime.NativeTypeOffset";
1819
string className = "Python.Runtime.TypeOffset" + offsetsClassSuffix;
19-
Type typeOffsetsClass = thisAssembly.GetType(className, throwOnError: false);
20+
Type typeOffsetsClass =
21+
// Try platform native offsets first. It is only present when generated by setup.py
22+
thisAssembly.GetType(nativeTypeOffsetClassName, throwOnError: false)
23+
?? thisAssembly.GetType(className, throwOnError: false);
2024
if (typeOffsetsClass is null)
2125
throw new NotSupportedException($"Python ABI v{version} is not supported");
2226
var typeOffsets = (ITypeOffsets)Activator.CreateInstance(typeOffsetsClass);

tools/geninterop/geninterop.py

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -244,22 +244,15 @@ def preprocess_python_headers():
244244

245245

246246
def 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):
270263
using Python.Runtime.Native;
271264
272265
namespace 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

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy