Skip to content

Commit 6ae10ed

Browse files
committed
Fix build and add extend_class macro usage for set and frozenset
1 parent 983be0f commit 6ae10ed

File tree

1 file changed

+62
-118
lines changed

1 file changed

+62
-118
lines changed

vm/src/obj/objset.rs

Lines changed: 62 additions & 118 deletions
Original file line numberDiff line numberDiff line change
@@ -85,12 +85,12 @@ fn create_set(
8585
PySet {
8686
elements: RefCell::new(elements),
8787
},
88-
PySet::class(vm).into_object(),
88+
PySet::class(vm),
8989
))
9090
} else if objtype::issubclass(&cls, &vm.ctx.frozenset_type()) {
9191
Ok(PyObject::new(
9292
PyFrozenSet { elements: elements },
93-
PyFrozenSet::class(vm).into_object(),
93+
PyFrozenSet::class(vm),
9494
))
9595
} else {
9696
Err(vm.new_type_error(format!("{} is not a subtype of set or frozenset", cls)))
@@ -593,127 +593,71 @@ pub fn init(context: &PyContext) {
593593
set(iterable) -> new set object\n\n\
594594
Build an unordered collection of unique elements.";
595595

596-
context.set_attr(set_type, "__contains__", context.new_rustfunc(set_contains));
597-
context.set_attr(set_type, "__len__", context.new_rustfunc(set_len));
598-
context.set_attr(set_type, "__new__", context.new_rustfunc(set_new));
599-
context.set_attr(set_type, "__repr__", context.new_rustfunc(set_repr));
600-
context.set_attr(set_type, "__eq__", context.new_rustfunc(set_eq));
601-
context.set_attr(set_type, "__ge__", context.new_rustfunc(set_ge));
602-
context.set_attr(set_type, "__gt__", context.new_rustfunc(set_gt));
603-
context.set_attr(set_type, "__le__", context.new_rustfunc(set_le));
604-
context.set_attr(set_type, "__lt__", context.new_rustfunc(set_lt));
605-
context.set_attr(set_type, "issubset", context.new_rustfunc(set_le));
606-
context.set_attr(set_type, "issuperset", context.new_rustfunc(set_ge));
607-
context.set_attr(set_type, "union", context.new_rustfunc(set_union));
608-
context.set_attr(set_type, "__or__", context.new_rustfunc(set_union));
609-
context.set_attr(
610-
set_type,
611-
"intersection",
612-
context.new_rustfunc(set_intersection),
613-
);
614-
context.set_attr(set_type, "__and__", context.new_rustfunc(set_intersection));
615-
context.set_attr(set_type, "difference", context.new_rustfunc(set_difference));
616-
context.set_attr(set_type, "__sub__", context.new_rustfunc(set_difference));
617-
context.set_attr(
618-
set_type,
619-
"symmetric_difference",
620-
context.new_rustfunc(set_symmetric_difference),
621-
);
622-
context.set_attr(
623-
set_type,
624-
"__xor__",
625-
context.new_rustfunc(set_symmetric_difference),
626-
);
627-
context.set_attr(set_type, "__doc__", context.new_str(set_doc.to_string()));
628-
context.set_attr(set_type, "add", context.new_rustfunc(set_add));
629-
context.set_attr(set_type, "remove", context.new_rustfunc(set_remove));
630-
context.set_attr(set_type, "discard", context.new_rustfunc(set_discard));
631-
context.set_attr(set_type, "clear", context.new_rustfunc(set_clear));
632-
context.set_attr(set_type, "copy", context.new_rustfunc(set_copy));
633-
context.set_attr(set_type, "pop", context.new_rustfunc(set_pop));
634-
context.set_attr(set_type, "update", context.new_rustfunc(set_update));
635-
context.set_attr(set_type, "__ior__", context.new_rustfunc(set_ior));
636-
context.set_attr(
637-
set_type,
638-
"intersection_update",
639-
context.new_rustfunc(set_intersection_update),
640-
);
641-
context.set_attr(set_type, "__iand__", context.new_rustfunc(set_iand));
642-
context.set_attr(
643-
set_type,
644-
"difference_update",
645-
context.new_rustfunc(set_difference_update),
646-
);
647-
context.set_attr(set_type, "__isub__", context.new_rustfunc(set_isub));
648-
context.set_attr(
649-
set_type,
650-
"symmetric_difference_update",
651-
context.new_rustfunc(set_symmetric_difference_update),
652-
);
653-
context.set_attr(set_type, "__ixor__", context.new_rustfunc(set_ixor));
654-
context.set_attr(set_type, "__iter__", context.new_rustfunc(set_iter));
596+
extend_class!(context, set_type, {
597+
"__contains__" => context.new_rustfunc(set_contains),
598+
"__len__" => context.new_rustfunc(set_len),
599+
"__new__" => context.new_rustfunc(set_new),
600+
"__repr__" => context.new_rustfunc(set_repr),
601+
"__eq__" => context.new_rustfunc(set_eq),
602+
"__ge__" => context.new_rustfunc(set_ge),
603+
"__gt__" => context.new_rustfunc(set_gt),
604+
"__le__" => context.new_rustfunc(set_le),
605+
"__lt__" => context.new_rustfunc(set_lt),
606+
"issubset" => context.new_rustfunc(set_le),
607+
"issuperset" => context.new_rustfunc(set_ge),
608+
"union" => context.new_rustfunc(set_union),
609+
"__or__" => context.new_rustfunc(set_union),
610+
"intersection" => context.new_rustfunc(set_intersection),
611+
"__and__" => context.new_rustfunc(set_intersection),
612+
"difference" => context.new_rustfunc(set_difference),
613+
"__sub__" => context.new_rustfunc(set_difference),
614+
"symmetric_difference" => context.new_rustfunc(set_symmetric_difference),
615+
"__xor__" => context.new_rustfunc(set_symmetric_difference),
616+
"__doc__" => context.new_str(set_doc.to_string()),
617+
"add" => context.new_rustfunc(set_add),
618+
"remove" => context.new_rustfunc(set_remove),
619+
"discard" => context.new_rustfunc(set_discard),
620+
"clear" => context.new_rustfunc(set_clear),
621+
"copy" => context.new_rustfunc(set_copy),
622+
"pop" => context.new_rustfunc(set_pop),
623+
"update" => context.new_rustfunc(set_update),
624+
"__ior__" => context.new_rustfunc(set_ior),
625+
"intersection_update" => context.new_rustfunc(set_intersection_update),
626+
"__iand__" => context.new_rustfunc(set_iand),
627+
"difference_update" => context.new_rustfunc(set_difference_update),
628+
"__isub__" => context.new_rustfunc(set_isub),
629+
"symmetric_difference_update" => context.new_rustfunc(set_symmetric_difference_update),
630+
"__ixor__" => context.new_rustfunc(set_ixor),
631+
"__iter__" => context.new_rustfunc(set_iter)
632+
});
655633

656634
let frozenset_type = &context.frozenset_type;
657635

658636
let frozenset_doc = "frozenset() -> empty frozenset object\n\
659637
frozenset(iterable) -> frozenset object\n\n\
660638
Build an immutable unordered collection of unique elements.";
661639

662-
context.set_attr(frozenset_type, "__new__", context.new_rustfunc(set_new));
663-
context.set_attr(frozenset_type, "__eq__", context.new_rustfunc(set_eq));
664-
context.set_attr(frozenset_type, "__ge__", context.new_rustfunc(set_ge));
665-
context.set_attr(frozenset_type, "__gt__", context.new_rustfunc(set_gt));
666-
context.set_attr(frozenset_type, "__le__", context.new_rustfunc(set_le));
667-
context.set_attr(frozenset_type, "__lt__", context.new_rustfunc(set_lt));
668-
context.set_attr(frozenset_type, "issubset", context.new_rustfunc(set_le));
669-
context.set_attr(frozenset_type, "issuperset", context.new_rustfunc(set_ge));
670-
context.set_attr(frozenset_type, "union", context.new_rustfunc(set_union));
671-
context.set_attr(frozenset_type, "__or__", context.new_rustfunc(set_union));
672-
context.set_attr(
673-
frozenset_type,
674-
"intersection",
675-
context.new_rustfunc(set_intersection),
676-
);
677-
context.set_attr(
678-
frozenset_type,
679-
"__and__",
680-
context.new_rustfunc(set_intersection),
681-
);
682-
context.set_attr(
683-
frozenset_type,
684-
"difference",
685-
context.new_rustfunc(set_difference),
686-
);
687-
context.set_attr(
688-
frozenset_type,
689-
"__sub__",
690-
context.new_rustfunc(set_difference),
691-
);
692-
context.set_attr(
693-
frozenset_type,
694-
"symmetric_difference",
695-
context.new_rustfunc(set_symmetric_difference),
696-
);
697-
context.set_attr(
698-
frozenset_type,
699-
"__xor__",
700-
context.new_rustfunc(set_symmetric_difference),
701-
);
702-
context.set_attr(
703-
frozenset_type,
704-
"__contains__",
705-
context.new_rustfunc(set_contains),
706-
);
707-
context.set_attr(frozenset_type, "__len__", context.new_rustfunc(set_len));
708-
context.set_attr(
709-
frozenset_type,
710-
"__doc__",
711-
context.new_str(frozenset_doc.to_string()),
712-
);
713-
context.set_attr(
714-
frozenset_type,
715-
"__repr__",
716-
context.new_rustfunc(frozenset_repr),
717-
);
718-
context.set_attr(frozenset_type, "copy", context.new_rustfunc(set_copy));
640+
extend_class!(context, frozenset_type, {
641+
"__new__" => context.new_rustfunc(set_new),
642+
"__eq__" => context.new_rustfunc(set_eq),
643+
"__ge__" => context.new_rustfunc(set_ge),
644+
"__gt__" => context.new_rustfunc(set_gt),
645+
"__le__" => context.new_rustfunc(set_le),
646+
"__lt__" => context.new_rustfunc(set_lt),
647+
"issubset" => context.new_rustfunc(set_le),
648+
"issuperset" => context.new_rustfunc(set_ge),
649+
"union" => context.new_rustfunc(set_union),
650+
"__or__" => context.new_rustfunc(set_union),
651+
"intersection" => context.new_rustfunc(set_intersection),
652+
"__and__" => context.new_rustfunc(set_intersection),
653+
"difference" => context.new_rustfunc(set_difference),
654+
"__sub__" => context.new_rustfunc(set_difference),
655+
"symmetric_difference" => context.new_rustfunc(set_symmetric_difference),
656+
"__xor__" => context.new_rustfunc(set_symmetric_difference),
657+
"__contains__" => context.new_rustfunc(set_contains),
658+
"__len__" => context.new_rustfunc(set_len),
659+
"__doc__" => context.new_str(frozenset_doc.to_string()),
660+
"__repr__" => context.new_rustfunc(frozenset_repr),
661+
"copy" => context.new_rustfunc(set_copy)
662+
});
719663
}

0 commit comments

Comments
 (0)