[pypy-commit] pypy py3.5-time: introduce invisible fields, now the test_time.py suite passes
plan_rich
pypy.commits at gmail.com
Tue Jan 3 09:46:18 EST 2017
Author: Richard Plangger <planrichi at gmail.com>
Branch: py3.5-time
Changeset: r89335:290ed01b7833
Date: 2017-01-03 15:45 +0100
http://bitbucket.org/pypy/pypy/changeset/290ed01b7833/
Log: introduce invisible fields, now the test_time.py suite passes
diff --git a/lib_pypy/_structseq.py b/lib_pypy/_structseq.py
--- a/lib_pypy/_structseq.py
+++ b/lib_pypy/_structseq.py
@@ -46,12 +46,16 @@
extra_fields = sorted(fields_by_index.items())
n_sequence_fields = 0
+ invis_fields = []
if 'n_sequence_fields' in dict:
n_sequence_fields = dict['n_sequence_fields']
extra_fields = extra_fields[n_sequence_fields:]
seq = n_sequence_fields
# pop all fields that are still in sequence!
while extra_fields and extra_fields[0][0] == seq:
+ field = extra_fields[0][1]
+ field.index = None
+ invis_fields.append(field)
extra_fields.pop(0)
seq += 1
else:
@@ -68,6 +72,7 @@
assert '__new__' not in dict
dict['_extra_fields'] = tuple(extra_fields)
+ dict['_invis_fields'] = tuple(invis_fields)
dict['__new__'] = structseq_new
dict['__reduce__'] = structseq_reduce
dict['__setattr__'] = structseq_setattr
@@ -101,7 +106,12 @@
msg = "exactly"
raise TypeError("expected a sequence with %s %d items. has %d" \
% (msg, real_count, length))
- for field, value in zip(cls._extra_fields, sequence[visible_count:]):
+ for field, value in zip(cls._invis_fields, sequence[visible_count:real_count]):
+ name = field.__name__
+ if name in dict:
+ raise TypeError("duplicate value for %r" % (name,))
+ dict[name] = value
+ for field, value in zip(cls._extra_fields, sequence[real_count:]):
name = field.__name__
if name in dict:
raise TypeError("duplicate value for %r" % (name,))
More information about the pypy-commit
mailing list