();
-
- static SlotTypes()
- {
- foreach (var type in Types)
- {
- FieldInfo[] fields = type.GetFields();
- foreach (var fi in fields)
- {
- _nameMap[fi.Name] = type;
- }
- }
- }
-
- public static bool IsSlotName(string name)
- {
- return _nameMap.ContainsKey(name);
- }
- }
}
diff --git a/tools/geninterop/geninterop.py b/tools/geninterop/geninterop.py
index e74221e46..0d5b83b30 100644
--- a/tools/geninterop/geninterop.py
+++ b/tools/geninterop/geninterop.py
@@ -244,67 +244,58 @@ def preprocess_python_headers():
def gen_interop_head(writer):
- defines = [
- "PYTHON{0}{1}".format(PY_MAJOR, PY_MINOR)
- ]
-
- if hasattr(sys, "abiflags"):
- if "d" in sys.abiflags:
- defines.append("PYTHON_WITH_PYDEBUG")
- if "m" in sys.abiflags:
- defines.append("PYTHON_WITH_PYMALLOC")
- if "u" in sys.abiflags:
- defines.append("PYTHON_WITH_WIDE_UNICODE")
-
filename = os.path.basename(__file__)
- defines_str = " && ".join(defines)
+ abi_flags = getattr(sys, "abiflags", "")
+ py_ver = "{0}.{1}".format(PY_MAJOR, PY_MINOR)
class_definition = """
// Auto-generated by %s.
// DO NOT MODIFY BY HAND.
+// Python %s: ABI flags: '%s'
+
+// ReSharper disable InconsistentNaming
+// ReSharper disable IdentifierTypo
-#if %s
using System;
-using System.Collections;
-using System.Collections.Specialized;
+using System.Diagnostics.CodeAnalysis;
using System.Runtime.InteropServices;
-using System.Reflection;
-using System.Text;
+
+using Python.Runtime.Native;
namespace Python.Runtime
-{
-""" % (filename, defines_str)
+{""" % (filename, py_ver, abi_flags)
writer.extend(class_definition)
def gen_interop_tail(writer):
tail = """}
-#endif
"""
writer.extend(tail)
-def gen_heap_type_members(parser, writer):
+def gen_heap_type_members(parser, writer, type_name = None):
"""Generate the TypeOffset C# class"""
members = parser.get_struct_members("PyHeapTypeObject")
+ type_name = type_name or "TypeOffset{0}{1}".format(PY_MAJOR, PY_MINOR)
class_definition = """
+ [SuppressMessage("Style", "IDE1006:Naming Styles",
+ Justification = "Following CPython",
+ Scope = "type")]
+
[StructLayout(LayoutKind.Sequential)]
- internal static partial class TypeOffset
- {
+ internal class {0} : GeneratedTypeOffsets, ITypeOffsets
+ {{
+ public {0}() {{ }}
// Auto-generated from PyHeapTypeObject in Python.h
-"""
+""".format(type_name)
# All the members are sizeof(void*) so we don't need to do any
# extra work to determine the size based on the type.
for name, tpy in members:
name = _typeoffset_member_renames.get(name, name)
- class_definition += " public static int %s = 0;\n" % name
-
- class_definition += """
- /* here are optional user slots, followed by the members. */
- public static int members = 0;
- }
+ class_definition += " public int %s { get; private set; }\n" % name
+ class_definition += """ }
"""
writer.extend(class_definition)
@@ -323,19 +314,6 @@ def gen_structure_code(parser, writer, type_name, indent):
out()
return True
-
-def gen_supported_slot_record(writer, types, indent):
- out = writer.append
- out(indent, "internal static partial class SlotTypes")
- out(indent, "{")
- out(indent + 1, "public static readonly Type[] Types = {")
- for name in types:
- out(indent + 2, "typeof(%s)," % name)
- out(indent + 1, "};")
- out(indent, "}")
- out()
-
-
def main():
# preprocess Python.h and build the AST
python_h = preprocess_python_headers()
@@ -348,23 +326,10 @@ def main():
writer = Writer()
# generate the C# code
+ offsets_type_name = "NativeTypeOffset" if len(sys.argv) > 1 else None
gen_interop_head(writer)
- gen_heap_type_members(ast_parser, writer)
- slots_types = [
- "PyNumberMethods",
- "PySequenceMethods",
- "PyMappingMethods",
- "PyAsyncMethods",
- "PyBufferProcs",
- ]
- supported_types = []
- indent = 1
- for type_name in slots_types:
- if not gen_structure_code(ast_parser, writer, type_name, indent):
- continue
- supported_types.append(type_name)
- gen_supported_slot_record(writer, supported_types, indent)
+ gen_heap_type_members(ast_parser, writer, type_name = offsets_type_name)
gen_interop_tail(writer)
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