|
42 | 42 | import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode; |
43 | 43 | import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode; |
44 | 44 | import com.oracle.graal.python.runtime.exception.PException; |
| 45 | +import com.oracle.graal.python.runtime.sequence.PSequence; |
45 | 46 | import com.oracle.truffle.api.dsl.Cached; |
46 | 47 | import com.oracle.truffle.api.dsl.GenerateNodeFactory; |
47 | 48 | import com.oracle.truffle.api.dsl.NodeFactory; |
48 | 49 | import com.oracle.truffle.api.dsl.Specialization; |
49 | 50 | import com.oracle.truffle.api.profiles.ConditionProfile; |
| 51 | +import com.oracle.truffle.api.profiles.ValueProfile; |
50 | 52 |
|
51 | 53 | @CoreFunctions(extendClasses = PSequenceIterator.class) |
52 | 54 | public class IteratorBuiltins extends PythonBuiltins { |
@@ -145,9 +147,11 @@ public Object next(PBaseSetIterator self) { |
145 | 147 | } |
146 | 148 |
|
147 | 149 | @Specialization(guards = "self.isPSequence()") |
148 | | - public Object next(PSequenceIterator self) { |
149 | | - if (!self.stopIterationReached && self.index < self.getPSequence().len()) { |
150 | | - return self.getPSequence().getItem(self.index++); |
| 150 | + public Object next(PSequenceIterator self, |
| 151 | + @Cached("createClassProfile()") ValueProfile sequenceProfile) { |
| 152 | + PSequence sequence = sequenceProfile.profile(self.getPSequence()); |
| 153 | + if (!self.stopIterationReached && self.index < sequence.len()) { |
| 154 | + return sequence.getItem(self.index++); |
151 | 155 | } |
152 | 156 | self.stopIterationReached = true; |
153 | 157 | throw raise(StopIteration); |
|
0 commit comments