|
37 | 37 |
|
38 | 38 | import com.oracle.graal.python.PythonLanguage; |
39 | 39 | import com.oracle.graal.python.annotations.ArgumentClinic; |
| 40 | +import com.oracle.graal.python.annotations.Builtin; |
40 | 41 | import com.oracle.graal.python.annotations.Slot; |
41 | 42 | import com.oracle.graal.python.annotations.Slot.SlotKind; |
42 | 43 | import com.oracle.graal.python.annotations.Slot.SlotSignature; |
43 | | -import com.oracle.graal.python.annotations.Builtin; |
44 | 44 | import com.oracle.graal.python.builtins.CoreFunctions; |
45 | 45 | import com.oracle.graal.python.builtins.PythonBuiltinClassType; |
46 | 46 | import com.oracle.graal.python.builtins.PythonBuiltins; |
|
61 | 61 | import com.oracle.graal.python.nodes.function.builtins.PythonBinaryBuiltinNode; |
62 | 62 | import com.oracle.graal.python.nodes.function.builtins.PythonClinicBuiltinNode; |
63 | 63 | import com.oracle.graal.python.nodes.function.builtins.clinic.ArgumentClinicProvider; |
| 64 | +import com.oracle.graal.python.runtime.PythonOptions; |
64 | 65 | import com.oracle.graal.python.runtime.exception.PException; |
65 | 66 | import com.oracle.graal.python.runtime.exception.PythonErrorType; |
66 | 67 | import com.oracle.graal.python.runtime.object.PFactory; |
67 | 68 | import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; |
68 | 69 | import com.oracle.truffle.api.TruffleStackTrace; |
69 | 70 | import com.oracle.truffle.api.TruffleStackTraceElement; |
| 71 | +import com.oracle.truffle.api.bytecode.ContinuationRootNode; |
70 | 72 | import com.oracle.truffle.api.dsl.Bind; |
71 | 73 | import com.oracle.truffle.api.dsl.Cached; |
72 | 74 | import com.oracle.truffle.api.dsl.Cached.Exclusive; |
@@ -165,6 +167,7 @@ static void doExisting(@SuppressWarnings("unused") PTraceback tb) { |
165 | 167 | @TruffleBoundary |
166 | 168 | @Specialization(guards = "!tb.isMaterialized()") |
167 | 169 | static void doMaterialize(Node inliningTarget, PTraceback tb, |
| 170 | + @Bind PythonLanguage language, |
168 | 171 | @Cached(inline = false) MaterializeFrameNode materializeFrameNode, |
169 | 172 | @Cached MaterializeLazyTracebackNode materializeLazyTracebackNode) { |
170 | 173 | /* |
@@ -192,10 +195,14 @@ static void doMaterialize(Node inliningTarget, PTraceback tb, |
192 | 195 | TruffleStackTraceElement element = stackTrace.get(truffleIndex); |
193 | 196 | if (LazyTraceback.elementWantedForTraceback(element)) { |
194 | 197 | PFrame pFrame = materializeFrame(element, materializeFrameNode); |
195 | | - next = PFactory.createTraceback(PythonLanguage.get(null), pFrame, pFrame.getLine(), next); |
| 198 | + next = PFactory.createTraceback(language, pFrame, pFrame.getLine(), next); |
196 | 199 | next.setLocation(pFrame.getBci(), pFrame.getBytecodeNode()); |
197 | 200 | pyIndex++; |
198 | 201 | } |
| 202 | + // XXX workaround for DSL continuations not capturing frames |
| 203 | + if (PythonOptions.ENABLE_BYTECODE_DSL_INTERPRETER && element.getTarget().getRootNode() instanceof ContinuationRootNode && element.getFrame() == null) { |
| 204 | + pyIndex++; |
| 205 | + } |
199 | 206 | } |
200 | 207 | } |
201 | 208 | if (lazyTraceback.catchingFrameWantedForTraceback()) { |
|
0 commit comments