Skip to content

Commit 2098999

Browse files
committed
[GR-23240][GR-23241][GR-23255][GR-23976] make test_iter*, test_range.test_types and test_list.*pickle pass
PullRequest: graalpython/1148
2 parents 4209739 + d3248f2 commit 2098999

27 files changed

+695
-197
lines changed

graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_iter.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
*graalpython.lib-python.3.test.test_iter.TestCase.test_iter_callable
1818
*graalpython.lib-python.3.test.test_iter.TestCase.test_iter_class_for
1919
*graalpython.lib-python.3.test.test_iter.TestCase.test_iter_class_iter
20+
*graalpython.lib-python.3.test.test_iter.TestCase.test_iter_dict
2021
*graalpython.lib-python.3.test.test_iter.TestCase.test_iter_empty
2122
*graalpython.lib-python.3.test.test_iter.TestCase.test_iter_file
2223
*graalpython.lib-python.3.test.test_iter.TestCase.test_iter_for_loop
@@ -30,10 +31,13 @@
3031
*graalpython.lib-python.3.test.test_iter.TestCase.test_iter_string
3132
*graalpython.lib-python.3.test.test_iter.TestCase.test_iter_tuple
3233
*graalpython.lib-python.3.test.test_iter.TestCase.test_mutating_seq_class_exhausted_iter
34+
*graalpython.lib-python.3.test.test_iter.TestCase.test_mutating_seq_class_iter_pickle
3335
*graalpython.lib-python.3.test.test_iter.TestCase.test_nested_comprehensions_for
3436
*graalpython.lib-python.3.test.test_iter.TestCase.test_nested_comprehensions_iter
3537
*graalpython.lib-python.3.test.test_iter.TestCase.test_new_style_iter_class
3638
*graalpython.lib-python.3.test.test_iter.TestCase.test_ref_counting_behavior
39+
*graalpython.lib-python.3.test.test_iter.TestCase.test_seq_class_for
40+
*graalpython.lib-python.3.test.test_iter.TestCase.test_seq_class_iter
3741
*graalpython.lib-python.3.test.test_iter.TestCase.test_sinkstate_callable
3842
*graalpython.lib-python.3.test.test_iter.TestCase.test_sinkstate_dict
3943
*graalpython.lib-python.3.test.test_iter.TestCase.test_sinkstate_enumerate

graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_iterlen.txt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,21 @@
22
*graalpython.lib-python.3.test.test_iterlen.TestDeque.test_invariant
33
*graalpython.lib-python.3.test.test_iterlen.TestDequeReversed.test_immutable_during_iteration
44
*graalpython.lib-python.3.test.test_iterlen.TestDequeReversed.test_invariant
5+
*graalpython.lib-python.3.test.test_iterlen.TestDictItems.test_immutable_during_iteration
6+
*graalpython.lib-python.3.test.test_iterlen.TestDictItems.test_invariant
7+
*graalpython.lib-python.3.test.test_iterlen.TestDictKeys.test_immutable_during_iteration
8+
*graalpython.lib-python.3.test.test_iterlen.TestDictKeys.test_invariant
9+
*graalpython.lib-python.3.test.test_iterlen.TestDictValues.test_immutable_during_iteration
10+
*graalpython.lib-python.3.test.test_iterlen.TestDictValues.test_invariant
511
*graalpython.lib-python.3.test.test_iterlen.TestLengthHintExceptions.test_invalid_hint
12+
*graalpython.lib-python.3.test.test_iterlen.TestLengthHintExceptions.test_issue1242657
613
*graalpython.lib-python.3.test.test_iterlen.TestList.test_invariant
14+
*graalpython.lib-python.3.test.test_iterlen.TestList.test_mutation
715
*graalpython.lib-python.3.test.test_iterlen.TestListReversed.test_invariant
16+
*graalpython.lib-python.3.test.test_iterlen.TestListReversed.test_mutation
17+
*graalpython.lib-python.3.test.test_iterlen.TestRepeat.test_invariant
18+
*graalpython.lib-python.3.test.test_iterlen.TestSet.test_immutable_during_iteration
19+
*graalpython.lib-python.3.test.test_iterlen.TestSet.test_invariant
820
*graalpython.lib-python.3.test.test_iterlen.TestTuple.test_invariant
921
*graalpython.lib-python.3.test.test_iterlen.TestXrange.test_invariant
1022
*graalpython.lib-python.3.test.test_iterlen.TestXrangeCustomReversed.test_invariant

graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_list.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
*graalpython.lib-python.3.test.test_list.ListTest.test_index
2828
*graalpython.lib-python.3.test.test_list.ListTest.test_init
2929
*graalpython.lib-python.3.test.test_list.ListTest.test_insert
30+
*graalpython.lib-python.3.test.test_list.ListTest.test_iterator_pickle
3031
*graalpython.lib-python.3.test.test_list.ListTest.test_keyword_args
3132
*graalpython.lib-python.3.test.test_list.ListTest.test_len
3233
*graalpython.lib-python.3.test.test_list.ListTest.test_minmax
@@ -43,6 +44,7 @@
4344
*graalpython.lib-python.3.test.test_list.ListTest.test_repr_large
4445
*graalpython.lib-python.3.test.test_list.ListTest.test_reverse
4546
*graalpython.lib-python.3.test.test_list.ListTest.test_reversed
47+
*graalpython.lib-python.3.test.test_list.ListTest.test_reversed_pickle
4648
*graalpython.lib-python.3.test.test_list.ListTest.test_set_subscript
4749
*graalpython.lib-python.3.test.test_list.ListTest.test_setitem
4850
*graalpython.lib-python.3.test.test_list.ListTest.test_setitem_error

graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_range.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,11 @@
1414
*graalpython.lib-python.3.test.test_range.RangeTest.test_odd_bug
1515
*graalpython.lib-python.3.test.test_range.RangeTest.test_pickling
1616
*graalpython.lib-python.3.test.test_range.RangeTest.test_range
17+
*graalpython.lib-python.3.test.test_range.RangeTest.test_range_iterators
1718
*graalpython.lib-python.3.test.test_range.RangeTest.test_range_iterators_invocation
1819
*graalpython.lib-python.3.test.test_range.RangeTest.test_repr
20+
*graalpython.lib-python.3.test.test_range.RangeTest.test_reverse_iteration
21+
*graalpython.lib-python.3.test.test_range.RangeTest.test_slice
22+
*graalpython.lib-python.3.test.test_range.RangeTest.test_strided_limits
23+
*graalpython.lib-python.3.test.test_range.RangeTest.test_types
24+
*graalpython.lib-python.3.test.test_range.RangeTest.test_user_index_method

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/bytes/ByteArrayBuiltins.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import com.oracle.graal.python.builtins.objects.bytes.BytesBuiltins.BytesLikeNoGeneralizationNode;
4444
import com.oracle.graal.python.builtins.objects.common.IndexNodes.NormalizeIndexNode;
4545
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes;
46+
import com.oracle.graal.python.builtins.objects.iterator.IteratorNodes;
4647
import com.oracle.graal.python.builtins.objects.memoryview.PMemoryView;
4748
import com.oracle.graal.python.builtins.objects.object.PythonObjectLibrary;
4849
import com.oracle.graal.python.builtins.objects.slice.PSlice;
@@ -151,8 +152,10 @@ public abstract static class ByteArrayExtendNode extends PythonBinaryBuiltinNode
151152

152153
@Specialization
153154
PNone doGeneric(VirtualFrame frame, PByteArray byteArray, Object source,
155+
@Cached IteratorNodes.GetLength lenNode,
154156
@Cached("createExtend()") SequenceStorageNodes.ExtendNode extendNode) {
155-
SequenceStorage execute = extendNode.execute(frame, byteArray.getSequenceStorage(), source);
157+
int len = lenNode.execute(frame, source);
158+
SequenceStorage execute = extendNode.execute(frame, byteArray.getSequenceStorage(), source, len);
156159
assert byteArray.getSequenceStorage() == execute;
157160
return PNone.NONE;
158161
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/common/DynamicObjectStorage.java

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -481,27 +481,39 @@ public HashingStorageIterable<DictEntry> entries(
481481
return new HashingStorageIterable<>(new EntriesIterator(store, readNode));
482482
}
483483

484-
private static final class EntriesIterator implements Iterator<DictEntry> {
485-
private final Iterator<Object> keyIter;
484+
protected static final class EntriesIterator implements Iterator<DictEntry> {
485+
private final List<Object> keyList;
486486
private final DynamicObject store;
487487
private final ReadAttributeFromDynamicObjectNode readNode;
488488
private DictEntry next = null;
489+
private int state;
490+
private final int size;
489491

490492
public EntriesIterator(DynamicObject store, ReadAttributeFromDynamicObjectNode readNode) {
491-
this.keyIter = getIterator(store.getShape());
493+
this.keyList = keyList(store.getShape());
492494
this.store = store;
493495
this.readNode = readNode;
496+
this.state = 0;
497+
this.size = this.keyList.size();
498+
}
499+
500+
public int getState() {
501+
return state;
502+
}
503+
504+
public void setState(int state) {
505+
this.state = state;
494506
}
495507

496508
@TruffleBoundary
497-
private static Iterator<Object> getIterator(Shape shape) {
509+
private static Iterator<Object> getList(Shape shape) {
498510
return keyList(shape).iterator();
499511
}
500512

501513
@TruffleBoundary
502514
public boolean hasNext() {
503-
while (next == null && keyIter.hasNext()) {
504-
Object key = keyIter.next();
515+
while (next == null && state < size) {
516+
Object key = keyList.get(state++);
505517
Object value = readNode.execute(store, key);
506518
if (value != PNone.NO_VALUE) {
507519
next = new DictEntry(key, value);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/common/EconomicMapStorage.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -580,13 +580,17 @@ public HashingStorageIterable<Object> reverseKeys() {
580580
return new HashingStorageIterable<>(new KeysIterator(map.reverseKeyIterator()));
581581
}
582582

583-
private static final class KeysIterator implements Iterator<Object> {
583+
static final class KeysIterator implements Iterator<Object> {
584584
private final Iterator<DictKey> keysIterator;
585585

586586
KeysIterator(Iterator<DictKey> iter) {
587587
this.keysIterator = iter;
588588
}
589589

590+
public Iterator<DictKey> getKeysIterator() {
591+
return keysIterator;
592+
}
593+
590594
public boolean hasNext() {
591595
return keysIterator.hasNext();
592596
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/common/HashingStorage.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -580,13 +580,17 @@ public HashingStorageIterable<Object> reverseValues(@CachedLibrary("this") Hashi
580580
return new HashingStorageIterable<>(new ValuesIterator(this, lib.reverseKeys(this).iterator(), lib));
581581
}
582582

583-
private static final class ValuesIterator implements Iterator<Object> {
583+
protected static final class ValuesIterator implements Iterator<Object> {
584584
private final Iterator<DictEntry> entriesIterator;
585585

586586
ValuesIterator(HashingStorage self, HashingStorageIterator<Object> keysIterator, HashingStorageLibrary lib) {
587587
this.entriesIterator = new EntriesIterator(self, keysIterator, lib);
588588
}
589589

590+
protected Iterator<DictEntry> getIterator() {
591+
return entriesIterator;
592+
}
593+
590594
@Override
591595
public boolean hasNext() {
592596
return entriesIterator.hasNext();
@@ -608,7 +612,7 @@ public final HashingStorageIterable<DictEntry> reverseEntries(@CachedLibrary("th
608612
return new HashingStorageIterable<>(new EntriesIterator(this, lib.reverseKeys(this).iterator(), lib));
609613
}
610614

611-
private static final class EntriesIterator implements Iterator<DictEntry> {
615+
protected static final class EntriesIterator implements Iterator<DictEntry> {
612616
private final HashingStorageIterator<Object> keysIterator;
613617
private final HashingStorage self;
614618
private final HashingStorageLibrary lib;
@@ -619,6 +623,10 @@ private static final class EntriesIterator implements Iterator<DictEntry> {
619623
this.keysIterator = keysIterator;
620624
}
621625

626+
protected HashingStorageIterator<Object> getKeysIterator() {
627+
return keysIterator;
628+
}
629+
622630
@Override
623631
public boolean hasNext() {
624632
return keysIterator.hasNext();
@@ -686,13 +694,11 @@ public static HashingStorage addSequenceToStorage(VirtualFrame frame, Object ite
686694
try {
687695
while (true) {
688696
Object next = nextNode.execute(frame, it);
689-
PSequence element = null;
690-
int len = 1;
691-
element = createListNode.execute(next);
697+
PSequence element = createListNode.execute(next);
692698
assert element != null;
693699
// This constructs a new list using the builtin type. So, the object cannot
694700
// be subclassed and we can directly call 'len()'.
695-
len = seqLenNode.execute(element);
701+
int len = seqLenNode.execute(element);
696702

697703
if (lengthTwoProfile.profile(len != 2)) {
698704
throw raise.raise(ValueError, ErrorMessages.DICT_UPDATE_SEQ_ELEM_HAS_LENGTH_2_REQUIRED, arrayListSize(elements), len);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/common/HashingStorageLibrary.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -457,9 +457,13 @@ public static final class HashingStorageIterable<T> implements Iterable<T> {
457457
this.iterator = iterator;
458458
}
459459

460+
public Iterator<T> getIterator() {
461+
return this.iterator;
462+
}
463+
460464
@Override
461465
public HashingStorageIterator<T> iterator() {
462-
return new HashingStorageIterator<T>(iterator);
466+
return new HashingStorageIterator<T>(this.iterator);
463467
}
464468
}
465469

@@ -473,16 +477,20 @@ public HashingStorageIterator(Iterator<T> iterator) {
473477
this.iterator = iterator;
474478
}
475479

480+
public Iterator<T> getIterator() {
481+
return this.iterator;
482+
}
483+
476484
@Override
477485
@TruffleBoundary
478486
public boolean hasNext() {
479-
return iterator.hasNext();
487+
return this.iterator.hasNext();
480488
}
481489

482490
@Override
483491
@TruffleBoundary
484492
public T next() {
485-
return iterator.next();
493+
return this.iterator.next();
486494
}
487495
}
488496

0 commit comments

Comments
 (0)