Skip to content

Commit 9c7069f

Browse files
committed
Add workaround for DSL continuations missing frames
1 parent 3e04802 commit 9c7069f

File tree

1 file changed

+9
-2
lines changed
  • graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/traceback

1 file changed

+9
-2
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/traceback/TracebackBuiltins.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,10 @@
3737

3838
import com.oracle.graal.python.PythonLanguage;
3939
import com.oracle.graal.python.annotations.ArgumentClinic;
40+
import com.oracle.graal.python.annotations.Builtin;
4041
import com.oracle.graal.python.annotations.Slot;
4142
import com.oracle.graal.python.annotations.Slot.SlotKind;
4243
import com.oracle.graal.python.annotations.Slot.SlotSignature;
43-
import com.oracle.graal.python.annotations.Builtin;
4444
import com.oracle.graal.python.builtins.CoreFunctions;
4545
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
4646
import com.oracle.graal.python.builtins.PythonBuiltins;
@@ -61,12 +61,14 @@
6161
import com.oracle.graal.python.nodes.function.builtins.PythonBinaryBuiltinNode;
6262
import com.oracle.graal.python.nodes.function.builtins.PythonClinicBuiltinNode;
6363
import com.oracle.graal.python.nodes.function.builtins.clinic.ArgumentClinicProvider;
64+
import com.oracle.graal.python.runtime.PythonOptions;
6465
import com.oracle.graal.python.runtime.exception.PException;
6566
import com.oracle.graal.python.runtime.exception.PythonErrorType;
6667
import com.oracle.graal.python.runtime.object.PFactory;
6768
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
6869
import com.oracle.truffle.api.TruffleStackTrace;
6970
import com.oracle.truffle.api.TruffleStackTraceElement;
71+
import com.oracle.truffle.api.bytecode.ContinuationRootNode;
7072
import com.oracle.truffle.api.dsl.Bind;
7173
import com.oracle.truffle.api.dsl.Cached;
7274
import com.oracle.truffle.api.dsl.Cached.Exclusive;
@@ -165,6 +167,7 @@ static void doExisting(@SuppressWarnings("unused") PTraceback tb) {
165167
@TruffleBoundary
166168
@Specialization(guards = "!tb.isMaterialized()")
167169
static void doMaterialize(Node inliningTarget, PTraceback tb,
170+
@Bind PythonLanguage language,
168171
@Cached(inline = false) MaterializeFrameNode materializeFrameNode,
169172
@Cached MaterializeLazyTracebackNode materializeLazyTracebackNode) {
170173
/*
@@ -192,10 +195,14 @@ static void doMaterialize(Node inliningTarget, PTraceback tb,
192195
TruffleStackTraceElement element = stackTrace.get(truffleIndex);
193196
if (LazyTraceback.elementWantedForTraceback(element)) {
194197
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);
196199
next.setLocation(pFrame.getBci(), pFrame.getBytecodeNode());
197200
pyIndex++;
198201
}
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+
}
199206
}
200207
}
201208
if (lazyTraceback.catchingFrameWantedForTraceback()) {

0 commit comments

Comments
 (0)