Skip to content

Commit 348459a

Browse files
committed
rig enum PyClass to be frozen
1 parent 5c32816 commit 348459a

File tree

1 file changed

+6
-7
lines changed

1 file changed

+6
-7
lines changed

pyo3-macros-backend/src/pyclass.rs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -777,9 +777,12 @@ fn impl_complex_enum(
777777
doc: PythonDoc,
778778
methods_type: PyClassMethodsType,
779779
) -> Result<TokenStream> {
780-
// Need to rig the enum PyClass to be subclassable by the variant PyClasses
780+
// Need to rig the enum PyClass options
781781
let args = {
782782
let mut rigged_args = args.clone();
783+
// Needs to be frozen to disallow `&mut self` methods, which could break a runtime invariant
784+
rigged_args.options.frozen = parse_quote!(frozen);
785+
// Needs to be subclassable by the variant PyClasses
783786
rigged_args.options.subclass = parse_quote!(subclass);
784787
rigged_args
785788
};
@@ -855,14 +858,10 @@ fn impl_complex_enum(
855858
};
856859
variant_cls_zsts.push(variant_cls_zst);
857860

858-
// TODO(mkovaxx): propagate variant.options
859-
let options: PyClassPyO3Options = parse_quote! {
860-
extends = #cls, frozen
861-
};
862-
863861
let variant_args = PyClassArgs {
864862
class_kind: PyClassKind::Struct,
865-
options,
863+
// TODO(mkovaxx): propagate variant.options
864+
options: parse_quote!(extends = #cls, frozen),
866865
deprecations: Deprecations::new(),
867866
};
868867

0 commit comments

Comments
 (0)