From 38f5eb5bcf6b4ae471f8452e9af32caf43dc020a Mon Sep 17 00:00:00 2001 From: blueloveTH Date: Sat, 5 Aug 2023 16:21:21 +0800 Subject: [PATCH] fix: `dict` and `mappingproxy` cannot be hashed --- src/pocketpy.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/pocketpy.cpp b/src/pocketpy.cpp index b1c5af53..9f2be850 100644 --- a/src/pocketpy.cpp +++ b/src/pocketpy.cpp @@ -988,6 +988,11 @@ void init_builtins(VM* _vm) { return (i64)_CAST(MappingProxy&, obj).attr().size(); }); + _vm->bind__hash__(_vm->tp_mappingproxy, [](VM* vm, PyObject* obj) { + vm->TypeError("unhashable type: 'mappingproxy'"); + return (i64)0; + }); + _vm->bind__getitem__(_vm->tp_mappingproxy, [](VM* vm, PyObject* obj, PyObject* index) { MappingProxy& self = _CAST(MappingProxy&, obj); StrName key = CAST(Str&, index); @@ -1043,6 +1048,11 @@ void init_builtins(VM* _vm) { _vm->bind__len__(_vm->tp_dict, [](VM* vm, PyObject* obj) { return (i64)_CAST(Dict&, obj).size(); }); + + _vm->bind__hash__(_vm->tp_dict, [](VM* vm, PyObject* obj) { + vm->TypeError("unhashable type: 'dict'"); + return (i64)0; + }); _vm->bind__getitem__(_vm->tp_dict, [](VM* vm, PyObject* obj, PyObject* index) { Dict& self = _CAST(Dict&, obj);