diff --git a/src/runtime/metatype.cs b/src/runtime/metatype.cs index 014c5917c..6c268dbcb 100644 --- a/src/runtime/metatype.cs +++ b/src/runtime/metatype.cs @@ -145,7 +145,9 @@ public static IntPtr tp_new(IntPtr tp, IntPtr args, IntPtr kw) return IntPtr.Zero; } - var flags = TypeFlags.Default; + var flags = (TypeFlags)Util.ReadCLong(type, TypeOffset.tp_flags); + if (!flags.HasFlag(TypeFlags.Ready)) + throw new NotSupportedException("PyType.tp_new returned an incomplete type"); flags |= TypeFlags.HasClrInstance; flags |= TypeFlags.HeapType; flags |= TypeFlags.BaseType; @@ -170,8 +172,7 @@ public static IntPtr tp_new(IntPtr tp, IntPtr args, IntPtr kw) IntPtr gc = Marshal.ReadIntPtr(base_type, Offsets.tp_clr_inst); Marshal.WriteIntPtr(type, Offsets.tp_clr_inst, gc); - if (Runtime.PyType_Ready(type) != 0) - throw PythonException.ThrowLastAsClrException(); + Runtime.PyType_Modified(new BorrowedReference(type)); return type; }