Browse Source

fix: `dict` and `mappingproxy` cannot be hashed

blueloveTH 2 years ago
parent
commit
38f5eb5bcf
1 changed files with 10 additions and 0 deletions
  1. 10 0
      src/pocketpy.cpp

+ 10 - 0
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);