Skip to content

Commit 3e75e2e

Browse files
committed
[hotfix] Add int mul specialization, add PList specialization in NextNode.
PullRequest: graalpython/150
2 parents 539f047 + 4a01125 commit 3e75e2e

File tree

3 files changed

+27
-0
lines changed

3 files changed

+27
-0
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/ints/IntBuiltins.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -567,6 +567,11 @@ int doII(int x, int y) throws ArithmeticException {
567567
return Math.multiplyExact(x, y);
568568
}
569569

570+
@Specialization(replaces = "doII")
571+
long doIIL(int x, int y) {
572+
return x * (long) y;
573+
}
574+
570575
@Specialization(rewriteOn = ArithmeticException.class)
571576
long doLL(long x, long y) {
572577
return Math.multiplyExact(x, y);

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,16 @@
3636
import com.oracle.graal.python.builtins.CoreFunctions;
3737
import com.oracle.graal.python.builtins.PythonBuiltins;
3838
import com.oracle.graal.python.builtins.objects.iterator.PRangeIterator.PRangeReverseIterator;
39+
import com.oracle.graal.python.builtins.objects.list.PList;
3940
import com.oracle.graal.python.builtins.objects.object.PythonBuiltinObject;
4041
import com.oracle.graal.python.nodes.call.special.LookupAndCallBinaryNode;
4142
import com.oracle.graal.python.nodes.call.special.LookupAndCallUnaryNode;
4243
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
4344
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
4445
import com.oracle.graal.python.runtime.exception.PException;
4546
import com.oracle.graal.python.runtime.sequence.PSequence;
47+
import com.oracle.graal.python.runtime.sequence.SequenceUtil.NormalizeIndexNode;
48+
import com.oracle.graal.python.runtime.sequence.storage.SequenceStorage;
4649
import com.oracle.truffle.api.dsl.Cached;
4750
import com.oracle.truffle.api.dsl.GenerateNodeFactory;
4851
import com.oracle.truffle.api.dsl.NodeFactory;
@@ -146,6 +149,20 @@ public Object next(PBaseSetIterator self) {
146149
throw raise(StopIteration);
147150
}
148151

152+
@Specialization(guards = "self.isPList()")
153+
public Object nextList(PSequenceIterator self,
154+
@Cached("createClassProfile()") ValueProfile storageProfile,
155+
@Cached("create()") NormalizeIndexNode normalize) {
156+
SequenceStorage storage = storageProfile.profile(((PList) self.getPSequence()).getSequenceStorage());
157+
int length = storage.length();
158+
if (!self.stopIterationReached && self.index < length) {
159+
int index = normalize.execute(self.index++, length, "list index out of range");
160+
return storage.getItemNormalized(index);
161+
}
162+
self.stopIterationReached = true;
163+
throw raise(StopIteration);
164+
}
165+
149166
@Specialization(guards = "self.isPSequence()")
150167
public Object next(PSequenceIterator self,
151168
@Cached("createClassProfile()") ValueProfile sequenceProfile) {

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
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.builtins.objects.type.PythonClass;
2930
import com.oracle.graal.python.runtime.sequence.PSequence;
3031

@@ -49,4 +50,8 @@ public PSequence getPSequence() {
4950
public boolean isPSequence() {
5051
return sequence instanceof PSequence;
5152
}
53+
54+
public boolean isPList() {
55+
return sequence instanceof PList;
56+
}
5257
}

0 commit comments

Comments
 (0)