Skip to content

Commit 3052c41

Browse files
committed
Migrate all the PException#expectStopIteration usages to the new inlined profile
1 parent 7abb8e3 commit 3052c41

40 files changed

+445
-342
lines changed

graalpython/com.oracle.graal.python.test/src/com/oracle/graal/python/test/datatype/PRangeTests.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2017, 2022, Oracle and/or its affiliates.
2+
* Copyright (c) 2017, 2023, Oracle and/or its affiliates.
33
* Copyright (c) 2013, Regents of the University of California
44
*
55
* All rights reserved.
@@ -35,7 +35,7 @@
3535
import com.oracle.graal.python.builtins.objects.range.PRange;
3636
import com.oracle.graal.python.lib.GetNextNode;
3737
import com.oracle.graal.python.lib.PyObjectGetIter;
38-
import com.oracle.graal.python.nodes.object.IsBuiltinClassProfile;
38+
import com.oracle.graal.python.nodes.object.BuiltinClassProfiles.IsBuiltinObjectProfile;
3939
import com.oracle.graal.python.runtime.exception.PException;
4040
import com.oracle.graal.python.runtime.object.PythonObjectFactory;
4141
import com.oracle.graal.python.test.PythonTests;
@@ -71,14 +71,14 @@ public void loopWithOnlyStop() throws UnexpectedResultException {
7171
Object iter = PyObjectGetIter.getUncached().execute(null, range);
7272
GetNextNode next = GetNextNode.create();
7373
testRoot.doInsert(next);
74-
IsBuiltinClassProfile errorProfile = IsBuiltinClassProfile.getUncached();
74+
IsBuiltinObjectProfile errorProfile = IsBuiltinObjectProfile.getUncached();
7575

7676
while (true) {
7777
try {
7878
int item = next.executeInt(null, iter);
7979
assertEquals(index, item);
8080
} catch (PException e) {
81-
e.expectStopIteration(errorProfile);
81+
e.expectStopIteration(null, errorProfile);
8282
break;
8383
}
8484
index++;
@@ -99,14 +99,14 @@ public void loopWithStep() throws UnexpectedResultException {
9999
Object iter = PyObjectGetIter.getUncached().execute(null, range);
100100
GetNextNode next = GetNextNode.create();
101101
testRoot.doInsert(next);
102-
IsBuiltinClassProfile errorProfile = IsBuiltinClassProfile.getUncached();
102+
IsBuiltinObjectProfile errorProfile = IsBuiltinObjectProfile.getUncached();
103103

104104
while (true) {
105105
try {
106106
int item = next.executeInt(null, iter);
107107
assertEquals(index, item);
108108
} catch (PException e) {
109-
e.expectStopIteration(errorProfile);
109+
e.expectStopIteration(null, errorProfile);
110110
break;
111111
}
112112
index += 2;

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@
7171
import com.oracle.graal.python.nodes.function.builtins.PythonVarargsBuiltinNode;
7272
import com.oracle.graal.python.nodes.function.builtins.clinic.ArgumentClinicProvider;
7373
import com.oracle.graal.python.nodes.object.BuiltinClassProfiles.InlineIsBuiltinClassProfile;
74-
import com.oracle.graal.python.nodes.object.IsBuiltinClassProfile;
74+
import com.oracle.graal.python.nodes.object.BuiltinClassProfiles.IsBuiltinObjectProfile;
7575
import com.oracle.graal.python.nodes.util.SplitArgsNode;
7676
import com.oracle.graal.python.runtime.exception.PException;
7777
import com.oracle.graal.python.runtime.object.PythonObjectFactory;
@@ -271,10 +271,11 @@ PArray arraySequenceInitializer(VirtualFrame frame, Object cls, TruffleString ty
271271

272272
@Specialization(guards = {"!isBytes(initializer)", "!isString(initializer)", "!isPSequence(initializer)"})
273273
PArray arrayIteratorInitializer(VirtualFrame frame, Object cls, TruffleString typeCode, Object initializer,
274+
@Bind("this") Node inliningTarget,
274275
@Cached PyObjectGetIter getIter,
275276
@Cached ArrayNodes.PutValueNode putValueNode,
276277
@Cached GetNextNode nextNode,
277-
@Cached IsBuiltinClassProfile errorProfile,
278+
@Cached IsBuiltinObjectProfile errorProfile,
278279
@Cached TruffleString.CodePointLengthNode lengthNode,
279280
@Cached TruffleString.CodePointAtIndexNode atIndexNode) {
280281
Object iter = getIter.execute(frame, initializer);
@@ -288,7 +289,7 @@ PArray arrayIteratorInitializer(VirtualFrame frame, Object cls, TruffleString ty
288289
try {
289290
nextValue = nextNode.execute(frame, iter);
290291
} catch (PException e) {
291-
e.expectStopIteration(errorProfile);
292+
e.expectStopIteration(inliningTarget, errorProfile);
292293
break;
293294
}
294295
try {

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

Lines changed: 60 additions & 39 deletions
Large diffs are not rendered by default.

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/ast/Obj2SstBase.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2019, 2022, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2019, 2023, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* The Universal Permissive License (UPL), Version 1.0
@@ -83,7 +83,7 @@
8383
import com.oracle.graal.python.nodes.PRaiseNode;
8484
import com.oracle.graal.python.nodes.SpecialMethodNames;
8585
import com.oracle.graal.python.nodes.call.CallNode;
86-
import com.oracle.graal.python.nodes.object.IsBuiltinClassProfile;
86+
import com.oracle.graal.python.nodes.object.BuiltinClassProfiles.IsBuiltinObjectProfile;
8787
import com.oracle.graal.python.nodes.util.CannotCastException;
8888
import com.oracle.graal.python.nodes.util.CastToJavaBooleanNode;
8989
import com.oracle.graal.python.nodes.util.CastToJavaStringNode;
@@ -292,7 +292,7 @@ ConstantValue obj2ConstantValue(Object obj) {
292292
try {
293293
list.add(obj2ConstantValue(nextNode.execute(iter)));
294294
} catch (PException e) {
295-
e.expectStopIteration(IsBuiltinClassProfile.getUncached());
295+
e.expectStopIteration(null, IsBuiltinObjectProfile.getUncached());
296296
break;
297297
}
298298
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/csv/CSVReaderBuiltins.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -69,17 +69,19 @@
6969
import com.oracle.graal.python.nodes.builtins.ListNodes.AppendNode;
7070
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
7171
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
72-
import com.oracle.graal.python.nodes.object.GetClassNode;
73-
import com.oracle.graal.python.nodes.object.IsBuiltinClassProfile;
72+
import com.oracle.graal.python.nodes.object.BuiltinClassProfiles.IsBuiltinObjectProfile;
73+
import com.oracle.graal.python.nodes.object.InlinedGetClassNode;
7474
import com.oracle.graal.python.nodes.util.CannotCastException;
7575
import com.oracle.graal.python.nodes.util.CastToTruffleStringNode;
7676
import com.oracle.graal.python.runtime.exception.PException;
77+
import com.oracle.truffle.api.dsl.Bind;
7778
import com.oracle.truffle.api.dsl.Cached;
7879
import com.oracle.truffle.api.dsl.GenerateNodeFactory;
7980
import com.oracle.truffle.api.dsl.NodeFactory;
8081
import com.oracle.truffle.api.dsl.Specialization;
8182
import com.oracle.truffle.api.exception.AbstractTruffleException;
8283
import com.oracle.truffle.api.frame.VirtualFrame;
84+
import com.oracle.truffle.api.nodes.Node;
8385
import com.oracle.truffle.api.strings.TruffleString;
8486
import com.oracle.truffle.api.strings.TruffleStringBuilder;
8587
import com.oracle.truffle.api.strings.TruffleStringIterator;
@@ -112,6 +114,7 @@ public abstract static class NextReaderNode extends PythonUnaryBuiltinNode {
112114

113115
@Specialization
114116
Object nextPos(VirtualFrame frame, CSVReader self,
117+
@Bind("this") Node inliningTarget,
115118
@Cached TruffleString.ByteIndexOfCodePointNode byteIndexOfCodePointNode,
116119
@Cached TruffleString.CreateCodePointIteratorNode createCodePointIteratorNode,
117120
@Cached TruffleStringIterator.NextNode nextNode,
@@ -121,8 +124,8 @@ Object nextPos(VirtualFrame frame, CSVReader self,
121124
@Cached AppendNode appendNode,
122125
@Cached GetNextNode getNextNode,
123126
@Cached CastToTruffleStringNode castToStringNode,
124-
@Cached GetClassNode getClassNode,
125-
@Cached IsBuiltinClassProfile isBuiltinClassProfile) {
127+
@Cached InlinedGetClassNode getClassNode,
128+
@Cached IsBuiltinObjectProfile isBuiltinClassProfile) {
126129
PList fields = factory().createList();
127130
CSVModuleBuiltins csvModuleBuiltins = (CSVModuleBuiltins) getContext().lookupBuiltinModule(T__CSV).getBuiltins();
128131
self.parseReset();
@@ -131,7 +134,7 @@ Object nextPos(VirtualFrame frame, CSVReader self,
131134
try {
132135
lineObj = getNextNode.execute(frame, self.inputIter);
133136
} catch (PException e) {
134-
e.expectStopIteration(isBuiltinClassProfile);
137+
e.expectStopIteration(inliningTarget, isBuiltinClassProfile);
135138
self.fieldLimit = csvModuleBuiltins.fieldLimit;
136139
if (!self.field.isEmpty() || self.state == IN_QUOTED_FIELD) {
137140
if (self.dialect.strict) {
@@ -153,7 +156,7 @@ Object nextPos(VirtualFrame frame, CSVReader self,
153156
try {
154157
line = castToStringNode.execute(lineObj);
155158
} catch (CannotCastException e) {
156-
throw raise(PythonBuiltinClassType.CSVError, ErrorMessages.WRONG_ITERATOR_RETURN_TYPE, getClassNode.execute(lineObj));
159+
throw raise(PythonBuiltinClassType.CSVError, ErrorMessages.WRONG_ITERATOR_RETURN_TYPE, getClassNode.execute(inliningTarget, lineObj));
157160
}
158161

159162
// TODO: Implement PyUnicode_Check Node? => how do we handle the possibility of

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/csv/CSVWriterBuiltins.java

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2021, 2022, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* The Universal Permissive License (UPL), Version 1.0
@@ -60,14 +60,16 @@
6060
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
6161
import com.oracle.graal.python.nodes.function.builtins.PythonBinaryBuiltinNode;
6262
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
63-
import com.oracle.graal.python.nodes.object.GetClassNode;
64-
import com.oracle.graal.python.nodes.object.IsBuiltinClassProfile;
63+
import com.oracle.graal.python.nodes.object.BuiltinClassProfiles.IsBuiltinObjectProfile;
64+
import com.oracle.graal.python.nodes.object.InlinedGetClassNode;
6565
import com.oracle.graal.python.runtime.exception.PException;
66+
import com.oracle.truffle.api.dsl.Bind;
6667
import com.oracle.truffle.api.dsl.Cached;
6768
import com.oracle.truffle.api.dsl.GenerateNodeFactory;
6869
import com.oracle.truffle.api.dsl.NodeFactory;
6970
import com.oracle.truffle.api.dsl.Specialization;
7071
import com.oracle.truffle.api.frame.VirtualFrame;
72+
import com.oracle.truffle.api.nodes.Node;
7173
import com.oracle.truffle.api.strings.TruffleString;
7274
import com.oracle.truffle.api.strings.TruffleStringBuilder;
7375
import com.oracle.truffle.api.strings.TruffleStringIterator;
@@ -85,9 +87,10 @@ protected List<? extends NodeFactory<? extends PythonBuiltinBaseNode>> getNodeFa
8587
public abstract static class WriteRowNode extends PythonBinaryBuiltinNode {
8688
@Specialization
8789
Object doIt(VirtualFrame frame, CSVWriter self, Object seq,
90+
@Bind("this") Node inliningTarget,
8891
@Cached PyObjectGetIter getIter,
89-
@Cached GetClassNode getClass,
90-
@Cached IsBuiltinClassProfile errorProfile,
92+
@Cached InlinedGetClassNode getClass,
93+
@Cached IsBuiltinObjectProfile errorProfile,
9194
@Cached CallUnaryMethodNode callNode,
9295
@Cached TruffleString.CreateCodePointIteratorNode createCodePointIteratorNode,
9396
@Cached TruffleStringIterator.NextNode nextNode,
@@ -98,14 +101,14 @@ Object doIt(VirtualFrame frame, CSVWriter self, Object seq,
98101
@Cached PyObjectStrAsTruffleStringNode objectStrAsTruffleStringNode,
99102
@Cached PyNumberCheckNode pyNumberCheckNode,
100103
@Cached GetNextNode getNextNode,
101-
@Cached IsBuiltinClassProfile isBuiltinClassProfile) {
104+
@Cached IsBuiltinObjectProfile isBuiltinClassProfile) {
102105
Object iter;
103106

104107
try {
105108
iter = getIter.execute(frame, seq);
106109
} catch (PException e) {
107-
e.expect(PythonBuiltinClassType.TypeError, errorProfile);
108-
throw raise(PythonBuiltinClassType.CSVError, ErrorMessages.EXPECTED_ITERABLE_NOT_S, getClass.execute(seq));
110+
e.expect(inliningTarget, PythonBuiltinClassType.TypeError, errorProfile);
111+
throw raise(PythonBuiltinClassType.CSVError, ErrorMessages.EXPECTED_ITERABLE_NOT_S, getClass.execute(inliningTarget, seq));
109112
}
110113

111114
// Join all fields of passed in sequence in internal buffer.
@@ -124,7 +127,7 @@ Object doIt(VirtualFrame frame, CSVWriter self, Object seq,
124127
joinField(sb, dialect, field, createCodePointIteratorNode, nextNode, byteIndexOfCodePointNode, appendCodePointNode, appendStringNode, objectStrAsTruffleStringNode,
125128
pyNumberCheckNode);
126129
} catch (PException e) {
127-
e.expectStopIteration(isBuiltinClassProfile);
130+
e.expectStopIteration(inliningTarget, isBuiltinClassProfile);
128131
break;
129132
}
130133
}
@@ -251,9 +254,10 @@ private static boolean needsEscape(CSVDialect dialect, int codePoint, TruffleStr
251254
public abstract static class WriteRowsNode extends PythonBinaryBuiltinNode {
252255
@Specialization
253256
Object doIt(VirtualFrame frame, CSVWriter self, Object seq,
257+
@Bind("this") Node inliningTarget,
254258
@Cached PyObjectGetIter getIter,
255259
@Cached GetNextNode getNext,
256-
@Cached IsBuiltinClassProfile isBuiltinClassProfile,
260+
@Cached IsBuiltinObjectProfile isBuiltinClassProfile,
257261
@Cached WriteRowNode writeRow) {
258262
Object iter, row;
259263

@@ -264,7 +268,7 @@ Object doIt(VirtualFrame frame, CSVWriter self, Object seq,
264268
row = getNext.execute(frame, iter);
265269
writeRow.execute(frame, self, row);
266270
} catch (PException e) {
267-
e.expectStopIteration(isBuiltinClassProfile);
271+
e.expectStopIteration(inliningTarget, isBuiltinClassProfile);
268272
break;
269273
}
270274
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/io/BytesIOBuiltins.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2021, 2022, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* The Universal Permissive License (UPL), Version 1.0
@@ -109,20 +109,22 @@
109109
import com.oracle.graal.python.nodes.function.builtins.PythonTernaryClinicBuiltinNode;
110110
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
111111
import com.oracle.graal.python.nodes.function.builtins.clinic.ArgumentClinicProvider;
112+
import com.oracle.graal.python.nodes.object.BuiltinClassProfiles.IsBuiltinObjectProfile;
112113
import com.oracle.graal.python.nodes.object.GetOrCreateDictNode;
113-
import com.oracle.graal.python.nodes.object.IsBuiltinClassProfile;
114114
import com.oracle.graal.python.runtime.exception.PException;
115115
import com.oracle.graal.python.runtime.object.PythonObjectFactory;
116116
import com.oracle.graal.python.util.ArrayBuilder;
117117
import com.oracle.graal.python.util.PythonUtils;
118118
import com.oracle.truffle.api.CompilerDirectives;
119+
import com.oracle.truffle.api.dsl.Bind;
119120
import com.oracle.truffle.api.dsl.Cached;
120121
import com.oracle.truffle.api.dsl.Cached.Shared;
121122
import com.oracle.truffle.api.dsl.GenerateNodeFactory;
122123
import com.oracle.truffle.api.dsl.NodeFactory;
123124
import com.oracle.truffle.api.dsl.Specialization;
124125
import com.oracle.truffle.api.frame.VirtualFrame;
125126
import com.oracle.truffle.api.library.CachedLibrary;
127+
import com.oracle.truffle.api.nodes.Node;
126128

127129
@CoreFunctions(extendClasses = PythonBuiltinClassType.PBytesIO)
128130
public class BytesIOBuiltins extends PythonBuiltins {
@@ -440,9 +442,10 @@ Object doWrite(VirtualFrame frame, PBytesIO self, Object b,
440442
abstract static class WriteLinesNode extends ClosedCheckPythonBinaryBuiltinNode {
441443
@Specialization(guards = "self.hasBuf()")
442444
Object writeLines(VirtualFrame frame, PBytesIO self, Object lines,
445+
@Bind("this") Node inliningTarget,
443446
@Cached GetNextNode getNextNode,
444447
@Cached WriteNode writeNode,
445-
@Cached IsBuiltinClassProfile errorProfile,
448+
@Cached IsBuiltinObjectProfile errorProfile,
446449
@Cached PyObjectGetIter getIter) {
447450
self.checkExports(this);
448451
Object iter = getIter.execute(frame, lines);
@@ -451,7 +454,7 @@ Object writeLines(VirtualFrame frame, PBytesIO self, Object lines,
451454
try {
452455
line = getNextNode.execute(frame, iter);
453456
} catch (PException e) {
454-
e.expectStopIteration(errorProfile);
457+
e.expectStopIteration(inliningTarget, errorProfile);
455458
break;
456459
}
457460
writeNode.execute(frame, self, line);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/json/JSONEncoderBuiltins.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@ private void appendDict(PJSONEncoder encoder, TruffleStringBuilder builder, PDic
282282
try {
283283
item = callDictNext.execute(null, iter);
284284
} catch (PException e) {
285-
e.expectStopIteration(stopDictIterationProfile);
285+
e.expectStopIteration(null, IsBuiltinObjectProfile.getUncached());
286286
break;
287287
}
288288
if (!(item instanceof PTuple) || ((PTuple) item).getSequenceStorage().length() != 2) {

0 commit comments

Comments
 (0)