Skip to content

Commit 401af4d

Browse files
committed
intrinsified PyIter_Next
1 parent c298fcd commit 401af4d

File tree

4 files changed

+31
-52
lines changed

4 files changed

+31
-52
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextAbstractBuiltins.java

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@
6464
import com.oracle.graal.python.builtins.modules.BuiltinFunctions.NextNode;
6565
import com.oracle.graal.python.builtins.modules.BuiltinFunctions.OctNode;
6666
import com.oracle.graal.python.builtins.modules.cext.PythonCextBuiltins.NativeBuiltin;
67+
import com.oracle.graal.python.builtins.modules.cext.PythonCextBuiltins.PyErrRestoreNode;
6768
import com.oracle.graal.python.builtins.objects.PNone;
6869
import com.oracle.graal.python.builtins.objects.cext.capi.CExtNodes.AddRefCntNode;
6970
import com.oracle.graal.python.builtins.objects.cext.capi.CExtNodes.AsPythonObjectNode;
@@ -102,6 +103,7 @@
102103
import com.oracle.graal.python.nodes.function.builtins.PythonTernaryBuiltinNode;
103104
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
104105
import com.oracle.graal.python.nodes.object.GetClassNode;
106+
import com.oracle.graal.python.nodes.object.IsBuiltinClassProfile;
105107
import com.oracle.graal.python.nodes.subscript.SliceLiteralNode;
106108
import com.oracle.graal.python.nodes.truffle.PythonTypes;
107109
import com.oracle.graal.python.runtime.exception.PException;
@@ -984,9 +986,9 @@ Object doManaged(VirtualFrame frame, Object listWrapper, Object position,
984986
}
985987
}
986988
}
987-
989+
988990
/////// PyObject ///////
989-
991+
990992
@Builtin(name = "PyObject_GetItem", minNumOfPositionalArgs = 2)
991993
@GenerateNodeFactory
992994
abstract static class PyObjectGetItem extends PythonBinaryBuiltinNode {
@@ -1010,7 +1012,7 @@ Object doManaged(VirtualFrame frame, Object listWrapper, Object key,
10101012
}
10111013

10121014
/////// PyMapping ///////
1013-
1015+
10141016
@Builtin(name = "PyMapping_Keys", minNumOfPositionalArgs = 1)
10151017
@GenerateNodeFactory
10161018
public abstract static class PyMappingKeysNode extends PythonUnaryBuiltinNode {
@@ -1117,31 +1119,30 @@ public Object values(VirtualFrame frame, Object obj,
11171119
}
11181120
}
11191121
}
1120-
1122+
11211123
/////// PyIter ///////
1122-
1123-
//@may_raise
1124-
//def PyIter_Next(itObj):
1125-
// try:
1126-
// return next(itObj)
1127-
// except StopIteration:
1128-
// PyErr_Restore(None, None, None)
1129-
// return native_null
1130-
1124+
11311125
@Builtin(name = "PyIter_Next", minNumOfPositionalArgs = 1)
11321126
@GenerateNodeFactory
11331127
abstract static class PyIterNextCheck extends PythonUnaryBuiltinNode {
11341128
@Specialization
11351129
static Object check(VirtualFrame frame, Object object,
11361130
@Cached NextNode nextNode,
1131+
@Cached PyErrRestoreNode restoreNode,
1132+
@Cached IsBuiltinClassProfile isClassProfile,
11371133
@Cached TransformExceptionToNativeNode transformExceptionToNativeNode,
11381134
@Cached GetNativeNullNode getNativeNullNode) {
11391135
try {
11401136
return nextNode.execute(frame, object, PNone.NO_VALUE);
11411137
} catch (PException e) {
1142-
transformExceptionToNativeNode.execute(e);
1143-
return getNativeNullNode.execute();
1138+
if (isClassProfile.profileException(e, PythonBuiltinClassType.StopIteration)) {
1139+
restoreNode.execute(frame, PNone.NONE, PNone.NONE, PNone.NONE);
1140+
return getNativeNullNode.execute();
1141+
} else {
1142+
transformExceptionToNativeNode.execute(e);
1143+
return getNativeNullNode.execute();
1144+
}
11441145
}
11451146
}
1146-
}
1147+
}
11471148
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextBuiltins.java

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,6 @@
7070
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__MODULE__;
7171
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__NAME__;
7272
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__PACKAGE__;
73-
import static com.oracle.graal.python.nodes.SpecialMethodNames.ITEMS;
74-
import static com.oracle.graal.python.nodes.SpecialMethodNames.KEYS;
75-
import static com.oracle.graal.python.nodes.SpecialMethodNames.VALUES;
7673
import static com.oracle.graal.python.nodes.SpecialMethodNames.__NEW__;
7774
import static com.oracle.graal.python.runtime.exception.PythonErrorType.OverflowError;
7875
import static com.oracle.graal.python.util.PythonUtils.EMPTY_BYTE_ARRAY;
@@ -199,9 +196,6 @@
199196
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes;
200197
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes.GetItemScalarNode;
201198
import com.oracle.graal.python.builtins.objects.dict.DictBuiltins;
202-
import com.oracle.graal.python.builtins.objects.dict.DictBuiltins.ItemsNode;
203-
import com.oracle.graal.python.builtins.objects.dict.DictBuiltins.KeysNode;
204-
import com.oracle.graal.python.builtins.objects.dict.DictBuiltins.ValuesNode;
205199
import com.oracle.graal.python.builtins.objects.dict.PDict;
206200
import com.oracle.graal.python.builtins.objects.ellipsis.PEllipsis;
207201
import com.oracle.graal.python.builtins.objects.exception.PBaseException;
@@ -215,7 +209,6 @@
215209
import com.oracle.graal.python.builtins.objects.getsetdescriptor.GetSetDescriptor;
216210
import com.oracle.graal.python.builtins.objects.ints.PInt;
217211
import com.oracle.graal.python.builtins.objects.iterator.PSequenceIterator;
218-
import com.oracle.graal.python.builtins.objects.list.PList;
219212
import com.oracle.graal.python.builtins.objects.memoryview.BufferLifecycleManager;
220213
import com.oracle.graal.python.builtins.objects.memoryview.MemoryViewNodes;
221214
import com.oracle.graal.python.builtins.objects.memoryview.NativeBufferLifecycleManager;
@@ -242,7 +235,6 @@
242235
import com.oracle.graal.python.lib.PyMemoryViewFromObject;
243236
import com.oracle.graal.python.lib.PyNumberAsSizeNode;
244237
import com.oracle.graal.python.lib.PyObjectCallMethodObjArgs;
245-
import com.oracle.graal.python.lib.PyObjectGetAttr;
246238
import com.oracle.graal.python.lib.PyObjectLookupAttr;
247239
import com.oracle.graal.python.nodes.BuiltinNames;
248240
import com.oracle.graal.python.nodes.ErrorMessages;
@@ -262,7 +254,6 @@
262254
import com.oracle.graal.python.nodes.attributes.WriteAttributeToObjectNode;
263255
import com.oracle.graal.python.nodes.builtins.FunctionNodes.GetCallTargetNode;
264256
import com.oracle.graal.python.nodes.builtins.FunctionNodes.GetSignatureNode;
265-
import com.oracle.graal.python.nodes.builtins.ListNodes.ConstructListNode;
266257
import com.oracle.graal.python.nodes.call.CallNode;
267258
import com.oracle.graal.python.nodes.call.GenericInvokeNode;
268259
import com.oracle.graal.python.nodes.call.special.LookupAndCallBinaryNode;
@@ -396,7 +387,7 @@ public void postInitialize(Python3Core core) {
396387
addModuleDict(cext, PYTHON_CEXT_UNICODE, core);
397388
}
398389

399-
private void addModuleDict(PythonModule cext, String module, Python3Core core) {
390+
private static void addModuleDict(PythonModule cext, String module, Python3Core core) {
400391
PythonModule cext_module = core.lookupBuiltinModule(module);
401392
PDict dict = GetDictIfExistsNodeGen.getUncached().execute(cext_module);
402393
HashingStorageIterable<Object> keys = dict.keys();
@@ -858,7 +849,7 @@ static boolean isDecoratedManagedFunction(Object obj) {
858849

859850
@Builtin(name = "PyErr_Restore", minNumOfPositionalArgs = 3)
860851
@GenerateNodeFactory
861-
abstract static class PyErrRestoreNode extends PythonBuiltinNode {
852+
abstract static class PyErrRestoreNode extends PythonTernaryBuiltinNode {
862853
@Specialization
863854
@SuppressWarnings("unused")
864855
Object run(PNone typ, PNone val, PNone tb) {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextCEvalBuiltins.java

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,9 @@
4040
*/
4141
package com.oracle.graal.python.builtins.modules.cext;
4242

43-
import com.oracle.graal.python.builtins.Builtin;
43+
import static com.oracle.graal.python.nodes.BuiltinNames.BUILTINS;
4444

45+
import com.oracle.graal.python.builtins.Builtin;
4546
import java.util.List;
4647
import com.oracle.graal.python.builtins.CoreFunctions;
4748
import com.oracle.graal.python.builtins.Python3Core;
@@ -54,9 +55,10 @@
5455
import com.oracle.graal.python.builtins.objects.thread.LockBuiltins.AcquireLockNode;
5556
import com.oracle.graal.python.builtins.objects.thread.LockBuiltins.ReleaseLockNode;
5657
import com.oracle.graal.python.builtins.objects.thread.PLock;
57-
import static com.oracle.graal.python.nodes.BuiltinNames.BUILTINS;
5858
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
5959
import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
60+
import com.oracle.graal.python.nodes.function.builtins.PythonBinaryBuiltinNode;
61+
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
6062
import com.oracle.graal.python.nodes.object.GetDictIfExistsNode;
6163
import com.oracle.graal.python.runtime.exception.PException;
6264
import com.oracle.truffle.api.dsl.Cached;
@@ -65,12 +67,10 @@
6567
import com.oracle.truffle.api.dsl.Specialization;
6668
import com.oracle.truffle.api.frame.VirtualFrame;
6769

68-
@CoreFunctions(defineModule = PythonCextCEvalBuiltins.PYTHON_CEXT_CEVAL)
70+
@CoreFunctions(extendsModule = PythonCextBuiltins.PYTHON_CEXT)
6971
@GenerateNodeFactory
7072
public class PythonCextCEvalBuiltins extends PythonBuiltins {
7173

72-
public static final String PYTHON_CEXT_CEVAL = "python_cext_ceval";
73-
7474
@Override
7575
protected List<? extends NodeFactory<? extends PythonBuiltinBaseNode>> getNodeFactories() {
7676
return PythonCextCEvalBuiltinsFactory.getFactories();
@@ -81,7 +81,7 @@ public void initialize(Python3Core core) {
8181
super.initialize(core);
8282
}
8383

84-
@Builtin(name = "PyThread_allocate_lock", takesVarArgs = true)
84+
@Builtin(name = "PyThread_allocate_lock")
8585
@GenerateNodeFactory
8686
public abstract static class PyThreadAllocateLockNode extends PythonBuiltinNode {
8787
@Specialization
@@ -98,29 +98,25 @@ public Object allocate(VirtualFrame frame,
9898
}
9999
}
100100

101-
@Builtin(name = "PyThread_acquire_lock", takesVarArgs = true)
101+
@Builtin(name = "PyThread_acquire_lock", minNumOfPositionalArgs = 2)
102102
@GenerateNodeFactory
103-
public abstract static class PyThreadAcquireLockNode extends PythonBuiltinNode {
103+
public abstract static class PyThreadAcquireLockNode extends PythonBinaryBuiltinNode {
104104
@Specialization
105105
public int acquire(VirtualFrame frame, PLock lock, int waitflag,
106106
@Cached AcquireLockNode acquireNode,
107107
@Cached TransformExceptionToNativeNode transformExceptionToNativeNode) {
108108
try {
109-
if ((boolean) acquireNode.execute(frame, lock, waitflag, PNone.NONE)) {
110-
return 1;
111-
} else {
112-
return 0;
113-
}
109+
return ((boolean) acquireNode.execute(frame, lock, waitflag, PNone.NONE)) ? 1 : 0;
114110
} catch (PException e) {
115111
transformExceptionToNativeNode.execute(e);
116112
return -1;
117113
}
118114
}
119115
}
120116

121-
@Builtin(name = "PyThread_release_lock", takesVarArgs = true)
117+
@Builtin(name = "PyThread_release_lock", minNumOfPositionalArgs = 1)
122118
@GenerateNodeFactory
123-
public abstract static class PyThreadReleaseLockNode extends PythonBuiltinNode {
119+
public abstract static class PyThreadReleaseLockNode extends PythonUnaryBuiltinNode {
124120
@Specialization
125121
public Object release(VirtualFrame frame, PLock lock,
126122
@Cached ReleaseLockNode releaseNode,
@@ -134,7 +130,7 @@ public Object release(VirtualFrame frame, PLock lock,
134130
}
135131
}
136132
}
137-
133+
138134
@Builtin(name = "PyEval_GetBuiltins")
139135
@GenerateNodeFactory
140136
public abstract static class PyEvalGetBuiltinsNode extends PythonBuiltinNode {

graalpython/lib-graalpython/python_cext.py

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -50,15 +50,6 @@ def decorator(fun):
5050
return make_may_raise_wrapper(fun, error_result)
5151
return decorator
5252

53-
@may_raise
54-
def PyIter_Next(itObj):
55-
try:
56-
return next(itObj)
57-
except StopIteration:
58-
PyErr_Restore(None, None, None)
59-
return native_null
60-
61-
6253
@may_raise
6354
def PyCallIter_New(it, sentinel):
6455
return iter(it, sentinel)

0 commit comments

Comments
 (0)