|
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