Skip to content

Commit d3248f2

Browse files
committed
make test_list.*pickle pass
1 parent 6eea24f commit d3248f2

File tree

9 files changed

+73
-41
lines changed

9 files changed

+73
-41
lines changed

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/src/com/oracle/graal/python/builtins/objects/iterator/IteratorBuiltins.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -362,20 +362,29 @@ public Object reduce(VirtualFrame frame, PDictView.PBaseDictIterator<?> self,
362362
public Object reduce(PIntegerSequenceIterator self,
363363
@CachedContext(PythonLanguage.class) PythonContext context,
364364
@Cached.Shared("pol") @CachedLibrary(limit = "1") PythonObjectLibrary pol) {
365-
return reduceInternal(factory().createList(self.getSequenceStorage()), self.getIndex(), context, pol);
365+
if (self.isExhausted()) {
366+
return reduceInternal(factory().createList(), null, context, pol);
367+
}
368+
return reduceInternal(self.getObject(), self.getIndex(), context, pol);
366369
}
367370

368371
@Specialization
369372
public Object reduce(PPrimitiveIterator self,
370373
@CachedContext(PythonLanguage.class) PythonContext context,
371374
@Cached.Shared("pol") @CachedLibrary(limit = "1") PythonObjectLibrary pol) {
372-
return reduceInternal(factory().createList(self.getSequenceStorage()), self.getIndex(), context, pol);
375+
if (self.isExhausted()) {
376+
return reduceInternal(factory().createList(), null, context, pol);
377+
}
378+
return reduceInternal(self.getObject(), self.getIndex(), context, pol);
373379
}
374380

375381
@Specialization
376382
public Object reduce(PStringIterator self,
377383
@CachedContext(PythonLanguage.class) PythonContext context,
378384
@Cached.Shared("pol") @CachedLibrary(limit = "1") PythonObjectLibrary pol) {
385+
if (self.isExhausted()) {
386+
return reduceInternal("", null, context, pol);
387+
}
379388
return reduceInternal(self.value, self.getIndex(), context, pol);
380389
}
381390

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/iterator/PDoubleSequenceIterator.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,30 +25,31 @@
2525
*/
2626
package com.oracle.graal.python.builtins.objects.iterator;
2727

28+
import com.oracle.graal.python.builtins.objects.list.PList;
2829
import com.oracle.graal.python.runtime.sequence.storage.DoubleSequenceStorage;
2930
import com.oracle.truffle.api.object.Shape;
3031

3132
public final class PDoubleSequenceIterator extends PPrimitiveIterator {
3233

3334
final DoubleSequenceStorage sequence;
3435

35-
public PDoubleSequenceIterator(Object clazz, Shape instanceShape, DoubleSequenceStorage sequence) {
36-
super(clazz, instanceShape, sequence.length());
36+
public PDoubleSequenceIterator(Object clazz, Shape instanceShape, DoubleSequenceStorage sequence, PList store) {
37+
super(clazz, instanceShape, store, sequence.length());
3738
this.sequence = sequence;
3839
}
3940

4041
@Override
4142
public DoubleSequenceStorage getSequenceStorage() {
42-
return sequence;
43+
return this.sequence;
4344
}
4445

4546
public double next() {
4647
assert hasNext();
47-
return sequence.getDoubleItemNormalized(index++);
48+
return this.sequence.getDoubleItemNormalized(this.index++);
4849
}
4950

5051
@Override
5152
public boolean hasNext() {
52-
return index < sequence.length();
53+
return this.index < this.sequence.length();
5354
}
5455
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/iterator/PIntegerSequenceIterator.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,24 +25,31 @@
2525
*/
2626
package com.oracle.graal.python.builtins.objects.iterator;
2727

28+
import com.oracle.graal.python.builtins.objects.list.PList;
2829
import com.oracle.graal.python.runtime.sequence.storage.IntSequenceStorage;
2930
import com.oracle.truffle.api.object.Shape;
3031

3132
public final class PIntegerSequenceIterator extends PIntegerIterator {
3233

3334
final IntSequenceStorage sequence;
35+
final PList store;
3436
final int size;
3537

36-
public PIntegerSequenceIterator(Object clazz, Shape instanceShape, IntSequenceStorage sequence) {
38+
public PIntegerSequenceIterator(Object clazz, Shape instanceShape, IntSequenceStorage sequence, PList store) {
3739
super(clazz, instanceShape);
3840
this.sequence = sequence;
3941
this.size = sequence.length();
42+
this.store = store;
4043
}
4144

4245
public IntSequenceStorage getSequenceStorage() {
4346
return sequence;
4447
}
4548

49+
public PList getObject() {
50+
return store;
51+
}
52+
4653
public int getSize() {
4754
return size;
4855
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/iterator/PLongSequenceIterator.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,30 +25,31 @@
2525
*/
2626
package com.oracle.graal.python.builtins.objects.iterator;
2727

28+
import com.oracle.graal.python.builtins.objects.list.PList;
2829
import com.oracle.graal.python.runtime.sequence.storage.LongSequenceStorage;
2930
import com.oracle.truffle.api.object.Shape;
3031

3132
public final class PLongSequenceIterator extends PPrimitiveIterator {
3233

3334
final LongSequenceStorage sequence;
3435

35-
public PLongSequenceIterator(Object clazz, Shape instanceShape, LongSequenceStorage sequence) {
36-
super(clazz, storage, sequence.length());
36+
public PLongSequenceIterator(Object clazz, Shape instanceShape, LongSequenceStorage sequence, PList store) {
37+
super(clazz, instanceShape, store, sequence.length());
3738
this.sequence = sequence;
3839
}
3940

4041
@Override
4142
public LongSequenceStorage getSequenceStorage() {
42-
return sequence;
43+
return this.sequence;
4344
}
4445

4546
public long next() {
4647
assert hasNext();
47-
return sequence.getLongItemNormalized(index++);
48+
return this.sequence.getLongItemNormalized(this.index++);
4849
}
4950

5051
@Override
5152
public boolean hasNext() {
52-
return index < sequence.length();
53+
return this.index < this.sequence.length();
5354
}
5455
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/iterator/PPrimitiveIterator.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,16 +40,23 @@
4040
*/
4141
package com.oracle.graal.python.builtins.objects.iterator;
4242

43+
import com.oracle.graal.python.builtins.objects.list.PList;
4344
import com.oracle.graal.python.runtime.sequence.storage.TypedSequenceStorage;
4445
import com.oracle.truffle.api.object.Shape;
4546

4647
public abstract class PPrimitiveIterator extends PBuiltinIterator {
4748

4849
final int size;
50+
final PList store;
4951

50-
public PPrimitiveIterator(Object clazz, Shape instanceShape, int size) {
51-
super(clazz, storage);
52+
public PPrimitiveIterator(Object clazz, Shape instanceShape, PList store, int size) {
53+
super(clazz, instanceShape);
5254
this.size = size;
55+
this.store = store;
56+
}
57+
58+
public PList getObject() {
59+
return store;
5360
}
5461

5562
public int getSize() {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/list/ListBuiltins.java

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ public class ListBuiltins extends PythonBuiltins {
128128
@Override
129129
public void initialize(PythonCore core) {
130130
super.initialize(core);
131-
builtinConstants.put(__HASH__, PNone.NONE);
131+
this.builtinConstants.put(__HASH__, PNone.NONE);
132132
}
133133

134134
@Override
@@ -370,7 +370,7 @@ protected Object doGeneric(Object self, Object objectIdx, Object value) {
370370
}
371371

372372
private void updateStorage(PList primary, SequenceStorage newStorage) {
373-
if (generalizedProfile.profile(primary.getSequenceStorage() != newStorage)) {
373+
if (this.generalizedProfile.profile(primary.getSequenceStorage() != newStorage)) {
374374
primary.setSequenceStorage(newStorage);
375375
}
376376
}
@@ -554,11 +554,11 @@ protected ListInsertNode createListInsertNode() {
554554
}
555555

556556
private int getLength(SequenceStorage s) {
557-
if (lenNode == null) {
557+
if (this.lenNode == null) {
558558
CompilerDirectives.transferToInterpreterAndInvalidate();
559-
lenNode = insert(SequenceStorageNodes.LenNode.create());
559+
this.lenNode = insert(SequenceStorageNodes.LenNode.create());
560560
}
561-
return lenNode.execute(s);
561+
return this.lenNode.execute(s);
562562
}
563563

564564
}
@@ -633,11 +633,11 @@ public Object doError(@SuppressWarnings("unused") Object list, Object arg) {
633633
}
634634

635635
private SequenceStorageNodes.GetItemNode getGetItemNode() {
636-
if (getItemNode == null) {
636+
if (this.getItemNode == null) {
637637
CompilerDirectives.transferToInterpreterAndInvalidate();
638-
getItemNode = insert(SequenceStorageNodes.GetItemNode.create(createNormalize()));
638+
this.getItemNode = insert(SequenceStorageNodes.GetItemNode.create(createNormalize()));
639639
}
640-
return getItemNode;
640+
return this.getItemNode;
641641
}
642642

643643
protected static SequenceStorageNodes.DeleteNode createDelete() {
@@ -779,19 +779,19 @@ protected ListIndexNode createIndexNode() {
779779
}
780780

781781
private SequenceStorageNodes.ItemIndexNode getItemIndexNode() {
782-
if (itemIndexNode == null) {
782+
if (this.itemIndexNode == null) {
783783
CompilerDirectives.transferToInterpreterAndInvalidate();
784-
itemIndexNode = insert(SequenceStorageNodes.ItemIndexNode.create());
784+
this.itemIndexNode = insert(SequenceStorageNodes.ItemIndexNode.create());
785785
}
786-
return itemIndexNode;
786+
return this.itemIndexNode;
787787
}
788788

789789
private int getLength(SequenceStorage s) {
790-
if (lenNode == null) {
790+
if (this.lenNode == null) {
791791
CompilerDirectives.transferToInterpreterAndInvalidate();
792-
lenNode = insert(SequenceStorageNodes.LenNode.create());
792+
this.lenNode = insert(SequenceStorageNodes.LenNode.create());
793793
}
794-
return lenNode.execute(s);
794+
return this.lenNode.execute(s);
795795
}
796796

797797
}
@@ -1155,17 +1155,17 @@ boolean contains(VirtualFrame frame, PSequence self, Object other,
11551155
public abstract static class IterNode extends PythonUnaryBuiltinNode {
11561156
@Specialization(guards = {"isIntStorage(primary)"})
11571157
public PIntegerSequenceIterator doPListInt(PList primary) {
1158-
return factory().createIntegerSequenceIterator((IntSequenceStorage) primary.getSequenceStorage());
1158+
return factory().createIntegerSequenceIterator((IntSequenceStorage) primary.getSequenceStorage(), primary);
11591159
}
11601160

11611161
@Specialization(guards = {"isLongStorage(primary)"})
11621162
public PLongSequenceIterator doPListLong(PList primary) {
1163-
return factory().createLongSequenceIterator((LongSequenceStorage) primary.getSequenceStorage());
1163+
return factory().createLongSequenceIterator((LongSequenceStorage) primary.getSequenceStorage(), primary);
11641164
}
11651165

11661166
@Specialization(guards = {"isDoubleStorage(primary)"})
11671167
public PDoubleSequenceIterator doPListDouble(PList primary) {
1168-
return factory().createDoubleSequenceIterator((DoubleSequenceStorage) primary.getSequenceStorage());
1168+
return factory().createDoubleSequenceIterator((DoubleSequenceStorage) primary.getSequenceStorage(), primary);
11691169
}
11701170

11711171
@Specialization(guards = {"!isIntStorage(primary)", "!isLongStorage(primary)", "!isDoubleStorage(primary)"})

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/reversed/ReversedBuiltins.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,12 +163,18 @@ public abstract static class ReduceNode extends PythonUnaryBuiltinNode {
163163
@Specialization
164164
public Object reduce(PStringReverseIterator self,
165165
@Cached.Shared("pol") @CachedLibrary(limit = "1") PythonObjectLibrary pol) {
166+
if (self.isExhausted()) {
167+
return reduceInternal(self, "", null, pol);
168+
}
166169
return reduceInternal(self, self.value, self.index, pol);
167170
}
168171

169172
@Specialization(guards = "self.isPSequence()")
170173
public Object reduce(PSequenceReverseIterator self,
171174
@Cached.Shared("pol") @CachedLibrary(limit = "1") PythonObjectLibrary pol) {
175+
if (self.isExhausted()) {
176+
return reduceInternal(self, factory().createList(), null, pol);
177+
}
172178
return reduceInternal(self, self.getPSequence(), self.index, pol);
173179
}
174180

@@ -200,8 +206,8 @@ public abstract static class SetStateNode extends PythonBinaryBuiltinNode {
200206
public Object reduce(PBuiltinIterator self, Object index,
201207
@CachedLibrary(value = "index") PythonObjectLibrary pol) {
202208
int idx = pol.asSize(index);
203-
if (idx < 0) {
204-
idx = 0;
209+
if (idx < -1) {
210+
idx = -1;
205211
}
206212
self.index = idx;
207213
return PNone.NONE;

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/runtime/object/PythonObjectFactory.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,6 @@ static final AllocationReporter doTrace(Object o, long size,
189189
return null;
190190
}
191191

192-
@SuppressWarnings("static-method")
193192
protected static AllocationReporter getAllocationReporter(ContextReference<PythonContext> contextRef) {
194193
return contextRef.get().getEnv().lookup(AllocationReporter.class);
195194
}
@@ -712,16 +711,16 @@ public PStringReverseIterator createStringReverseIterator(Object cls, String str
712711
return trace(new PStringReverseIterator(cls, getShape(cls), str));
713712
}
714713

715-
public PIntegerSequenceIterator createIntegerSequenceIterator(IntSequenceStorage storage) {
716-
return trace(new PIntegerSequenceIterator(PythonBuiltinClassType.PIterator, PythonBuiltinClassType.PIterator.getInstanceShape(), storage));
714+
public PIntegerSequenceIterator createIntegerSequenceIterator(IntSequenceStorage storage, PList list) {
715+
return trace(new PIntegerSequenceIterator(PythonBuiltinClassType.PIterator, PythonBuiltinClassType.PIterator.getInstanceShape(), storage, list));
717716
}
718717

719-
public PLongSequenceIterator createLongSequenceIterator(LongSequenceStorage storage) {
720-
return trace(new PLongSequenceIterator(PythonBuiltinClassType.PIterator, PythonBuiltinClassType.PIterator.getInstanceShape(), storage));
718+
public PLongSequenceIterator createLongSequenceIterator(LongSequenceStorage storage, PList list) {
719+
return trace(new PLongSequenceIterator(PythonBuiltinClassType.PIterator, PythonBuiltinClassType.PIterator.getInstanceShape(), storage, list));
721720
}
722721

723-
public PDoubleSequenceIterator createDoubleSequenceIterator(DoubleSequenceStorage storage) {
724-
return trace(new PDoubleSequenceIterator(PythonBuiltinClassType.PIterator, PythonBuiltinClassType.PIterator.getInstanceShape(), storage));
722+
public PDoubleSequenceIterator createDoubleSequenceIterator(DoubleSequenceStorage storage, PList list) {
723+
return trace(new PDoubleSequenceIterator(PythonBuiltinClassType.PIterator, PythonBuiltinClassType.PIterator.getInstanceShape(), storage, list));
725724
}
726725

727726
public PSequenceIterator createSequenceIterator(Object sequence) {

0 commit comments

Comments
 (0)