Skip to content

Commit dc0ebb0

Browse files
committed
[GR-23237] Get test_index to pass.
PullRequest: graalpython/1184
2 parents 9158f2a + b4cf1bd commit dc0ebb0

File tree

8 files changed

+143
-95
lines changed

8 files changed

+143
-95
lines changed

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
*graalpython.lib-python.3.test.test_index.BaseTestCase.test_basic
2+
*graalpython.lib-python.3.test.test_index.BaseTestCase.test_error
3+
*graalpython.lib-python.3.test.test_index.BaseTestCase.test_index_returns_int_subclass
4+
*graalpython.lib-python.3.test.test_index.BaseTestCase.test_int_subclass_with_index
25
*graalpython.lib-python.3.test.test_index.BaseTestCase.test_slice
36
*graalpython.lib-python.3.test.test_index.BaseTestCase.test_subclasses
47
*graalpython.lib-python.3.test.test_index.BaseTestCase.test_wrappers
58
*graalpython.lib-python.3.test.test_index.ByteArrayTestCase.test_error
69
*graalpython.lib-python.3.test.test_index.ByteArrayTestCase.test_index
10+
*graalpython.lib-python.3.test.test_index.ByteArrayTestCase.test_repeat
711
*graalpython.lib-python.3.test.test_index.ByteArrayTestCase.test_slice
812
*graalpython.lib-python.3.test.test_index.ByteArrayTestCase.test_slice_bug7532
913
*graalpython.lib-python.3.test.test_index.ByteArrayTestCase.test_subclasses
14+
*graalpython.lib-python.3.test.test_index.ByteArrayTestCase.test_wrappers
1015
*graalpython.lib-python.3.test.test_index.BytesTestCase.test_error
1116
*graalpython.lib-python.3.test.test_index.BytesTestCase.test_index
1217
*graalpython.lib-python.3.test.test_index.BytesTestCase.test_repeat
@@ -18,16 +23,22 @@
1823
*graalpython.lib-python.3.test.test_index.ListTestCase.test_index
1924
*graalpython.lib-python.3.test.test_index.ListTestCase.test_inplace_repeat
2025
*graalpython.lib-python.3.test.test_index.ListTestCase.test_repeat
26+
*graalpython.lib-python.3.test.test_index.ListTestCase.test_setdelitem
2127
*graalpython.lib-python.3.test.test_index.ListTestCase.test_slice
2228
*graalpython.lib-python.3.test.test_index.ListTestCase.test_slice_bug7532
2329
*graalpython.lib-python.3.test.test_index.ListTestCase.test_subclasses
2430
*graalpython.lib-python.3.test.test_index.ListTestCase.test_wrappers
2531
*graalpython.lib-python.3.test.test_index.NewSeqTestCase.test_error
2632
*graalpython.lib-python.3.test.test_index.NewSeqTestCase.test_index
33+
*graalpython.lib-python.3.test.test_index.NewSeqTestCase.test_repeat
2734
*graalpython.lib-python.3.test.test_index.NewSeqTestCase.test_slice
35+
*graalpython.lib-python.3.test.test_index.NewSeqTestCase.test_slice_bug7532
2836
*graalpython.lib-python.3.test.test_index.NewSeqTestCase.test_subclasses
37+
*graalpython.lib-python.3.test.test_index.NewSeqTestCase.test_wrappers
2938
*graalpython.lib-python.3.test.test_index.OverflowTestCase.test_getitem
3039
*graalpython.lib-python.3.test.test_index.OverflowTestCase.test_large_longs
40+
*graalpython.lib-python.3.test.test_index.OverflowTestCase.test_sequence_repeat
41+
*graalpython.lib-python.3.test.test_index.RangeTestCase.test_range
3142
*graalpython.lib-python.3.test.test_index.StringTestCase.test_error
3243
*graalpython.lib-python.3.test.test_index.StringTestCase.test_index
3344
*graalpython.lib-python.3.test.test_index.StringTestCase.test_repeat

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/OperatorModuleBuiltins.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes;
5353
import com.oracle.graal.python.builtins.objects.dict.PDict;
5454
import com.oracle.graal.python.builtins.objects.ints.PInt;
55+
import com.oracle.graal.python.builtins.objects.object.PythonObjectLibrary;
5556
import com.oracle.graal.python.nodes.SpecialMethodNames;
5657
import com.oracle.graal.python.nodes.call.special.LookupAndCallBinaryNode;
5758
import com.oracle.graal.python.nodes.call.special.LookupAndCallUnaryNode;
@@ -70,6 +71,7 @@
7071
import com.oracle.truffle.api.dsl.Specialization;
7172
import com.oracle.truffle.api.dsl.TypeSystemReference;
7273
import com.oracle.truffle.api.frame.VirtualFrame;
74+
import com.oracle.truffle.api.library.CachedLibrary;
7375

7476
@CoreFunctions(defineModule = OperatorModuleBuiltins.MODULE_NAME)
7577
public class OperatorModuleBuiltins extends PythonBuiltins {
@@ -224,4 +226,14 @@ public boolean doString(String arg1, String arg2) {
224226
}
225227

226228
}
229+
230+
@Builtin(name = "index", minNumOfPositionalArgs = 1)
231+
@GenerateNodeFactory
232+
abstract static class IndexNode extends PythonUnaryBuiltinNode {
233+
@Specialization(limit = "getCallSiteInlineCacheMaxDepth()")
234+
Object asIndex(Object value,
235+
@CachedLibrary(value = "value") PythonObjectLibrary pol) {
236+
return pol.asIndex(value);
237+
}
238+
}
227239
}

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

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -431,14 +431,25 @@ public Object mul(VirtualFrame frame, PBytes self, Object times,
431431
@Cached("createBinaryProfile()") ConditionProfile hasFrame,
432432
@Cached("create()") SequenceStorageNodes.RepeatNode repeatNode,
433433
@CachedLibrary("times") PythonObjectLibrary lib) {
434-
int timesInt;
434+
SequenceStorage res = repeatNode.execute(frame, self.getSequenceStorage(), getTimesInt(frame, times, hasFrame, lib));
435+
return factory().createBytes(res);
436+
}
437+
438+
@Specialization(limit = "getCallSiteInlineCacheMaxDepth()")
439+
public Object mul(VirtualFrame frame, PByteArray self, Object times,
440+
@Cached("createBinaryProfile()") ConditionProfile hasFrame,
441+
@Cached("create()") SequenceStorageNodes.RepeatNode repeatNode,
442+
@CachedLibrary("times") PythonObjectLibrary lib) {
443+
SequenceStorage res = repeatNode.execute(frame, self.getSequenceStorage(), getTimesInt(frame, times, hasFrame, lib));
444+
return factory().createByteArray(res);
445+
}
446+
447+
private static int getTimesInt(VirtualFrame frame, Object times, ConditionProfile hasFrame, PythonObjectLibrary lib) {
435448
if (hasFrame.profile(frame != null)) {
436-
timesInt = lib.asSizeWithState(times, PArguments.getThreadState(frame));
449+
return lib.asSizeWithState(times, PArguments.getThreadState(frame));
437450
} else {
438-
timesInt = lib.asSize(times);
451+
return lib.asSize(times);
439452
}
440-
SequenceStorage res = repeatNode.execute(frame, self.getSequenceStorage(), timesInt);
441-
return factory().createBytes(res);
442453
}
443454

444455
@SuppressWarnings("unused")

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

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
*/
2626
package com.oracle.graal.python.builtins.objects.list;
2727

28+
import static com.oracle.graal.python.nodes.SpecialMethodNames.SORT;
2829
import static com.oracle.graal.python.nodes.SpecialMethodNames.__ADD__;
2930
import static com.oracle.graal.python.nodes.SpecialMethodNames.__CONTAINS__;
3031
import static com.oracle.graal.python.nodes.SpecialMethodNames.__DELITEM__;
@@ -81,7 +82,6 @@
8182
import com.oracle.graal.python.builtins.objects.tuple.PTuple;
8283
import com.oracle.graal.python.nodes.ErrorMessages;
8384
import com.oracle.graal.python.nodes.PGuards;
84-
import static com.oracle.graal.python.nodes.SpecialMethodNames.SORT;
8585
import com.oracle.graal.python.nodes.argument.ReadArgumentNode;
8686
import com.oracle.graal.python.nodes.attributes.GetAttributeNode;
8787
import com.oracle.graal.python.nodes.builtins.ListNodes;
@@ -118,7 +118,6 @@
118118
import com.oracle.truffle.api.dsl.Specialization;
119119
import com.oracle.truffle.api.dsl.TypeSystemReference;
120120
import com.oracle.truffle.api.frame.VirtualFrame;
121-
import com.oracle.truffle.api.interop.InteropLibrary;
122121
import com.oracle.truffle.api.library.CachedLibrary;
123122
import com.oracle.truffle.api.nodes.UnexpectedResultException;
124123
import com.oracle.truffle.api.profiles.ConditionProfile;
@@ -349,18 +348,18 @@ public abstract static class SetItemNode extends PythonTernaryBuiltinNode {
349348

350349
private final ConditionProfile generalizedProfile = ConditionProfile.createBinaryProfile();
351350

352-
@Specialization(guards = "lib.fitsInInt(key) || isPSlice(key)")
351+
@Specialization(guards = "lib.canBeIndex(key) || isPSlice(key)")
353352
public Object doGeneric(VirtualFrame frame, PList primary, Object key, Object value,
354-
@SuppressWarnings("unused") @CachedLibrary(limit = "3") InteropLibrary lib,
353+
@SuppressWarnings("unused") @CachedLibrary(limit = "3") PythonObjectLibrary lib,
355354
@Cached("createSetItem()") SequenceStorageNodes.SetItemNode setItemNode) {
356355
updateStorage(primary, setItemNode.execute(frame, primary.getSequenceStorage(), key, value));
357356
return PNone.NONE;
358357
}
359358

360359
@SuppressWarnings("unused")
361-
@Specialization(guards = {"!lib.fitsInInt(key)", "!isPSlice(key)"})
360+
@Specialization(guards = {"!lib.canBeIndex(key)", "!isPSlice(key)"})
362361
public Object doListError(VirtualFrame frame, PList primary, Object key, Object value,
363-
@CachedLibrary(limit = "1") InteropLibrary lib) {
362+
@CachedLibrary(limit = "1") PythonObjectLibrary lib) {
364363
throw raise(TypeError, ErrorMessages.OBJ_INDEX_MUST_BE_INT_OR_SLICES, "list", key);
365364
}
366365

@@ -1061,8 +1060,8 @@ boolean doPListObjectStorage(VirtualFrame frame, PList left, PList right,
10611060

10621061
@Fallback
10631062
@SuppressWarnings("unused")
1064-
boolean doOther(Object left, Object right) {
1065-
return false;
1063+
Object doOther(Object left, Object right) {
1064+
return PNotImplemented.NOT_IMPLEMENTED;
10661065
}
10671066
}
10681067

@@ -1078,8 +1077,8 @@ boolean doPList(VirtualFrame frame, PList left, PList right,
10781077

10791078
@Fallback
10801079
@SuppressWarnings("unused")
1081-
boolean doOther(Object left, Object right) {
1082-
return true;
1080+
PNotImplemented doOther(Object left, Object right) {
1081+
return PNotImplemented.NOT_IMPLEMENTED;
10831082
}
10841083
}
10851084

0 commit comments

Comments
 (0)