@@ -1771,7 +1771,11 @@ struct Dee_type_constructor {
17711771 struct {
17721772 WUNUSED_T NONNULL_T ((1 )) int (DCALL * tp_ctor )(DeeObject * __restrict self );
17731773 WUNUSED_T NONNULL_T ((1 , 2 )) int (DCALL * tp_copy_ctor )(DeeObject * __restrict self , DeeObject * __restrict other );
1774+ #ifdef CONFIG_EXPERIMENTAL_SERIALIZE_OPERATOR
1775+ Dee_funptr_t _unused_tp_deep_ctor ;
1776+ #else /* CONFIG_EXPERIMENTAL_SERIALIZE_OPERATOR */
17741777 WUNUSED_T NONNULL_T ((1 , 2 )) int (DCALL * tp_deep_ctor )(DeeObject * __restrict self , DeeObject * __restrict other );
1778+ #endif /* !CONFIG_EXPERIMENTAL_SERIALIZE_OPERATOR */
17751779 WUNUSED_T NONNULL_T ((1 )) ATTR_INS_T (3 , 2 ) int (DCALL * tp_any_ctor )(DeeObject * __restrict self , size_t argc , DeeObject * const * argv );
17761780
17771781 /* WARNING: `tp_any_ctor_kw' may be invoked with `argc == 0 && kw == NULL',
@@ -1830,7 +1834,11 @@ struct Dee_type_constructor {
18301834 */
18311835 WUNUSED_T DREF DeeObject * (DCALL * tp_ctor )(void );
18321836 WUNUSED_T NONNULL_T ((1 )) DREF DeeObject * (DCALL * tp_copy_ctor )(DeeObject * __restrict other );
1837+ #ifdef CONFIG_EXPERIMENTAL_SERIALIZE_OPERATOR
1838+ Dee_funptr_t _unused_tp_deep_ctor ;
1839+ #else /* CONFIG_EXPERIMENTAL_SERIALIZE_OPERATOR */
18331840 WUNUSED_T NONNULL_T ((1 )) DREF DeeObject * (DCALL * tp_deep_ctor )(DeeObject * __restrict other );
1841+ #endif /* !CONFIG_EXPERIMENTAL_SERIALIZE_OPERATOR */
18341842 WUNUSED_T ATTR_INS_T (2 , 1 ) DREF DeeObject * (DCALL * tp_any_ctor )(size_t argc , DeeObject * const * argv );
18351843 /* WARNING: `tp_any_ctor_kw' may be invoked with `argc == 0 && kw == NULL',
18361844 * even when `tp_ctor' or `tp_any_ctor' has been defined as non-NULL! */
@@ -1866,6 +1874,9 @@ struct Dee_type_constructor {
18661874 WUNUSED_T NONNULL_T ((1 , 2 )) int (DCALL * tp_assign )(DeeObject * self , DeeObject * some_object );
18671875 WUNUSED_T NONNULL_T ((1 , 2 )) int (DCALL * tp_move_assign )(DeeObject * self , DeeObject * other );
18681876
1877+ #ifdef CONFIG_EXPERIMENTAL_SERIALIZE_OPERATOR
1878+ WUNUSED_T NONNULL_T ((1 )) int (DCALL * _unused_tp_deepload )(DeeObject * __restrict self );
1879+ #else /* CONFIG_EXPERIMENTAL_SERIALIZE_OPERATOR */
18691880 /* Following a previously successful construction using the `tp_deep_ctor' operator,
18701881 * go through all member objects of the type and replace them with deep copies.
18711882 * This operator is required to provide a safe way for GC objects to be
@@ -1915,6 +1926,7 @@ struct Dee_type_constructor {
19151926 * @return: == 0: Success
19161927 * @return: != 0: Error was thrown */
19171928 WUNUSED_T NONNULL_T ((1 )) int (DCALL * tp_deepload )(DeeObject * __restrict self );
1929+ #endif /* !CONFIG_EXPERIMENTAL_SERIALIZE_OPERATOR */
19181930
19191931 /* Callback for `DeeObject_Destroy()' (usually auto-assigned by
19201932 * `DeeType_RequireDestroy()', but can be overwritten with a
@@ -3255,7 +3267,9 @@ template<class _TSelf> Dee_boundmethod_t _Dee_RequiresBoundMethod(WUNUSED_T NONN
32553267#define Dee_METHOD_FCONSTCALL_IF_THISELEM_CONSTSTR 0x00000200 /* >> (for (local x: thisarg) IS_CONSTEXPR(x.operator str)) && ...; */
32563268#define Dee_METHOD_FCONSTCALL_IF_THISELEM_CONSTREPR 0x00000300 /* >> (for (local x: thisarg) IS_CONSTEXPR(x.operator repr)) && ...; */
32573269#define Dee_METHOD_FCONSTCALL_IF_THISELEM_CONSTHASH 0x00000400 /* >> (for (local x: thisarg) IS_CONSTEXPR(x.operator hash)) && ...; */
3270+ #ifndef CONFIG_EXPERIMENTAL_SERIALIZE_OPERATOR
32583271#define Dee_METHOD_FCONSTCALL_IF_THISELEM_CONSTDEEP 0x00000500 /* >> (for (local x: thisarg) IS_CONSTEXPR(x.operator deepcopy)) && ...; */
3272+ #endif /* !CONFIG_EXPERIMENTAL_SERIALIZE_OPERATOR */
32593273#define Dee_METHOD_FCONSTCALL_IF_SEQ_CONSTCMPEQ 0x00000600 /* >> (for (local arg: ...) IS_CONSTEXPR(arg.operator iter) && (for (local a, b: zip(thisarg, arg)) IS_CONSTEXPR(a == b, a != b, [a.operator hash(), b.operator hash()]))) && ...; */
32603274#define Dee_METHOD_FCONSTCALL_IF_SEQ_CONSTCMP 0x00000700 /* >> (for (local arg: ...) IS_CONSTEXPR(arg.operator iter) && (for (local a, b: zip(thisarg, arg)) IS_CONSTEXPR(a == b, a != b, a < b, a > b, a <= b, a >= b))) && ...; */
32613275#define Dee_METHOD_FCONSTCALL_IF_SEQ_CONSTCONTAINS 0x00000800 /* >> (for (local arg: ...) for (local elem: thisarg) IS_CONSTEXPR(elem == arg)) && ...; */
@@ -3288,7 +3302,9 @@ template<class _TSelf> Dee_boundmethod_t _Dee_RequiresBoundMethod(WUNUSED_T NONN
32883302#define METHOD_FCONSTCALL_IF_THISELEM_CONSTSTR Dee_METHOD_FCONSTCALL_IF_THISELEM_CONSTSTR
32893303#define METHOD_FCONSTCALL_IF_THISELEM_CONSTREPR Dee_METHOD_FCONSTCALL_IF_THISELEM_CONSTREPR
32903304#define METHOD_FCONSTCALL_IF_THISELEM_CONSTHASH Dee_METHOD_FCONSTCALL_IF_THISELEM_CONSTHASH
3305+ #ifndef CONFIG_EXPERIMENTAL_SERIALIZE_OPERATOR
32913306#define METHOD_FCONSTCALL_IF_THISELEM_CONSTDEEP Dee_METHOD_FCONSTCALL_IF_THISELEM_CONSTDEEP
3307+ #endif /* !CONFIG_EXPERIMENTAL_SERIALIZE_OPERATOR */
32923308#define METHOD_FCONSTCALL_IF_SEQ_CONSTCMPEQ Dee_METHOD_FCONSTCALL_IF_SEQ_CONSTCMPEQ
32933309#define METHOD_FCONSTCALL_IF_SEQ_CONSTCMP Dee_METHOD_FCONSTCALL_IF_SEQ_CONSTCMP
32943310#define METHOD_FCONSTCALL_IF_SEQ_CONSTCONTAINS Dee_METHOD_FCONSTCALL_IF_SEQ_CONSTCONTAINS
@@ -3767,7 +3783,11 @@ typedef uint16_t Dee_operator_t;
37673783/* Universal operator codes. */
37683784#define OPERATOR_CONSTRUCTOR 0x0000 /* `operator this(args...)' - `__constructor__' - `tp_any_ctor'. */
37693785#define OPERATOR_COPY 0x0001 /* `operator copy(other: type(this))' - `__copy__' - `tp_copy_ctor'. */
3786+ #ifdef CONFIG_EXPERIMENTAL_SERIALIZE_OPERATOR
3787+ #define OPERATOR_SERIALIZE 0x0002 /* `operator serialize(TODO)' - `__serialize__' - `tp_serialize'. */
3788+ #else /* CONFIG_EXPERIMENTAL_SERIALIZE_OPERATOR */
37703789#define OPERATOR_DEEPCOPY 0x0002 /* `operator deepcopy(other: type(this))' - `__deepcopy__' - `tp_deep_ctor'. */
3790+ #endif /* !CONFIG_EXPERIMENTAL_SERIALIZE_OPERATOR */
37713791#define OPERATOR_DESTRUCTOR 0x0003 /* `operator ~this()' - `__destructor__' - `tp_dtor'. */
37723792#define OPERATOR_ASSIGN 0x0004 /* `operator := (other: Object)' - `__assign__' - `tp_assign'. */
37733793#define OPERATOR_MOVEASSIGN 0x0005 /* `operator move := (other: type(this))' - `__moveassign__' - `tp_move_assign'. */
@@ -3864,7 +3884,11 @@ typedef uint16_t Dee_operator_t;
38643884 * a lexicographical line sort. */
38653885#define OPERATOR_0000_CONSTRUCTOR OPERATOR_CONSTRUCTOR
38663886#define OPERATOR_0001_COPY OPERATOR_COPY
3887+ #ifdef CONFIG_EXPERIMENTAL_SERIALIZE_OPERATOR
3888+ #define OPERATOR_0002_SERIALIZE OPERATOR_SERIALIZE
3889+ #else /* CONFIG_EXPERIMENTAL_SERIALIZE_OPERATOR */
38673890#define OPERATOR_0002_DEEPCOPY OPERATOR_DEEPCOPY
3891+ #endif /* !CONFIG_EXPERIMENTAL_SERIALIZE_OPERATOR */
38683892#define OPERATOR_0003_DESTRUCTOR OPERATOR_DESTRUCTOR
38693893#define OPERATOR_0004_ASSIGN OPERATOR_ASSIGN
38703894#define OPERATOR_0005_MOVEASSIGN OPERATOR_MOVEASSIGN
@@ -4346,7 +4370,11 @@ struct Dee_type_object {
43464370#define DeeType_IsNoArgConstructible (x ) (Dee_REQUIRES_OBJECT(DeeTypeObject const, x)->tp_init.tp_alloc.tp_ctor != NULL)
43474371#define DeeType_IsVarArgConstructible (x ) (Dee_REQUIRES_OBJECT(DeeTypeObject const, x)->tp_init.tp_alloc.tp_any_ctor != NULL || ((DeeTypeObject const *)(x))->tp_init.tp_alloc.tp_any_ctor_kw != NULL)
43484372#define DeeType_IsConstructible (x ) (DeeType_IsSuperConstructible(x) || DeeType_IsNoArgConstructible(x) || DeeType_IsVarArgConstructible(x))
4349- #define DeeType_IsCopyable (x ) (Dee_REQUIRES_OBJECT(DeeTypeObject const, x)->tp_init.tp_alloc.tp_copy_ctor != NULL || ((DeeTypeObject const *)(x))->tp_init.tp_alloc.tp_deep_ctor != NULL)
4373+ #ifdef CONFIG_EXPERIMENTAL_SERIALIZE_OPERATOR
4374+ #define DeeType_IsCopyable (x ) (Dee_REQUIRES_OBJECT(DeeTypeObject const, x)->tp_init.tp_alloc.tp_copy_ctor != NULL) /* TODO: What about inherited copyability? (Dee_TP_FINHERITCTOR) */
4375+ #else /* CONFIG_EXPERIMENTAL_SERIALIZE_OPERATOR */
4376+ #define DeeType_IsCopyable (x ) (Dee_REQUIRES_OBJECT(DeeTypeObject const, x)->tp_init.tp_alloc.tp_copy_ctor != NULL || ((DeeTypeObject const *)(x))->tp_init.tp_alloc.tp_deep_ctor != NULL) /* TODO: What about inherited copyability? (Dee_TP_FINHERITCTOR) */
4377+ #endif /* !CONFIG_EXPERIMENTAL_SERIALIZE_OPERATOR */
43504378#define DeeType_IsNamespace (x ) ((Dee_REQUIRES_OBJECT(DeeTypeObject const, x)->tp_flags & (Dee_TP_FFINAL | Dee_TP_FABSTRACT)) == (Dee_TP_FFINAL | Dee_TP_FABSTRACT) && (((DeeTypeObject const *)(x))->tp_features & Dee_TF_SINGLETON))
43514379#define DeeType_Base (x ) (Dee_REQUIRES_OBJECT(DeeTypeObject const, x)->tp_base)
43524380#define DeeType_GCPriority (x ) (Dee_REQUIRES_OBJECT(DeeTypeObject const, x)->tp_gc ? ((DeeTypeObject const *)(x))->tp_gc->tp_gcprio : Dee_GC_PRIORITY_LATE)
0 commit comments