Skip to content

Commit 93e2424

Browse files
committed
make most of test_defaultdict pass
1 parent 5d246c1 commit 93e2424

File tree

1 file changed

+14
-5
lines changed

1 file changed

+14
-5
lines changed

graalpython/lib-graalpython/_collections.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -645,15 +645,24 @@ def __next__(self):
645645

646646

647647
class defaultdict(dict):
648-
def __init__(self, default_factory, *args, **kwds):
648+
def __init__(self, default_factory=None, *args, **kwds):
649649
dict.__init__(self, *args, **kwds)
650-
self.default_factory = default_factory
650+
if (default_factory is None or callable(default_factory)):
651+
self.default_factory = default_factory
652+
else:
653+
raise TypeError("first argument must be callable or None")
651654

652655
def __missing__(self, key):
653656
if self.default_factory is None:
654-
raise KeyError((key,))
657+
raise KeyError(key)
655658
self[key] = value = self.default_factory()
656659
return value
657-
660+
658661
def __repr__(self):
659-
return "%s(%r, %s)" % (type(self).__name__, self.default_factory, dict.__repr__(self))
662+
return "%s(%r, %s)" % (type(self).__name__, self.default_factory, dict.__repr__(self))
663+
664+
def copy(self):
665+
cp = defaultdict(default_factory=self.default_factory)
666+
for k,v in self.items():
667+
cp[k] = v
668+
return cp

0 commit comments

Comments
 (0)