|
44 | 44 | import static com.oracle.graal.python.builtins.modules.cext.PythonCextBuiltins.CApiCallPath.Ignored;
|
45 | 45 | import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.Int;
|
46 | 46 | import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.Pointer;
|
| 47 | +import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.PyFrameObjectTransfer; |
47 | 48 | import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.PyObjectBorrowed;
|
48 | 49 | import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.PyThreadState;
|
49 | 50 | import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.Py_ssize_t;
|
|
55 | 56 | import com.oracle.graal.python.builtins.objects.PNone;
|
56 | 57 | import com.oracle.graal.python.builtins.objects.cext.capi.PThreadState;
|
57 | 58 | import com.oracle.graal.python.builtins.objects.dict.PDict;
|
| 59 | +import com.oracle.graal.python.builtins.objects.frame.PFrame; |
58 | 60 | import com.oracle.graal.python.builtins.objects.ints.PInt;
|
| 61 | +import com.oracle.graal.python.nodes.frame.GetCurrentFrameRef; |
| 62 | +import com.oracle.graal.python.nodes.frame.ReadCallerFrameNode; |
59 | 63 | import com.oracle.graal.python.nodes.util.CannotCastException;
|
60 | 64 | import com.oracle.graal.python.runtime.GilNode;
|
61 | 65 | import com.oracle.graal.python.runtime.PythonContext;
|
62 | 66 | import com.oracle.graal.python.runtime.PythonContext.PythonThreadState;
|
63 | 67 | import com.oracle.graal.python.runtime.object.PythonObjectFactory;
|
64 | 68 | import com.oracle.graal.python.util.OverflowException;
|
65 | 69 | import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
|
| 70 | +import com.oracle.truffle.api.dsl.Bind; |
66 | 71 | import com.oracle.truffle.api.dsl.Cached;
|
67 | 72 | import com.oracle.truffle.api.dsl.Specialization;
|
68 | 73 | import com.oracle.truffle.api.interop.InteropLibrary;
|
69 | 74 | import com.oracle.truffle.api.library.CachedLibrary;
|
| 75 | +import com.oracle.truffle.api.nodes.Node; |
70 | 76 |
|
71 | 77 | public final class PythonCextPyStateBuiltins {
|
72 | 78 |
|
@@ -131,6 +137,18 @@ PDict get(@Cached PythonObjectFactory factory) {
|
131 | 137 | }
|
132 | 138 | }
|
133 | 139 |
|
| 140 | + @CApiBuiltin(ret = PyFrameObjectTransfer, args = {PyThreadState}, call = Direct) |
| 141 | + abstract static class PyThreadState_GetFrame extends CApiUnaryBuiltinNode { |
| 142 | + @Specialization |
| 143 | + PFrame get( |
| 144 | + @Bind("this") Node inliningTarget, |
| 145 | + @Cached GetCurrentFrameRef getCurrentFrameRef, |
| 146 | + @Cached ReadCallerFrameNode readCallerFrameNode) { |
| 147 | + PFrame.Reference frameRef = getCurrentFrameRef.execute(null, inliningTarget); |
| 148 | + return readCallerFrameNode.executeWith(frameRef, 0); |
| 149 | + } |
| 150 | + } |
| 151 | + |
134 | 152 | @CApiBuiltin(ret = PyObjectBorrowed, args = {Py_ssize_t}, call = Ignored)
|
135 | 153 | abstract static class PyTruffleState_FindModule extends CApiUnaryBuiltinNode {
|
136 | 154 |
|
|
0 commit comments