|
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