Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
yield put(actions.resetTestcase(workspaceLocation, index));
const { result, interrupted } = yield race({
result: call(runInContext, code, context, {
scheduler: 'preemptive',
originalMaxExecTime: execTime
}),
/**
* A BEGIN_INTERRUPT_EXECUTION signals the beginning of an interruption,
* i.e the trigger for the interpreter to interrupt execution.
*/
interrupted: take(actionTypes.BEGIN_INTERRUPT_EXECUTION)
});
if (interrupted) {
interrupt(context);
// Redundancy, added ensure that interruption results in an error.
context.errors.push(new InterruptedError(context.runtime.nodes[0]));
yield put(actions.endInterruptExecution(workspaceLocation));
yield call(showWarningMessage, `Execution of testcase ${index} aborted`, 750);
return;
}
/** result.status here is either 'error' or 'finished'; 'suspended' is not possible
* since debugger is presently disabled in assessment and grading environments
*/
if (result.status === 'error') {
yield put(actions.evalInterpreterError(context.errors, workspaceLocation));
yield put(actions.evalTestcaseFailure(context.errors, workspaceLocation, index));
} else if (result.status === 'finished') {
// Execution of the testcase is successful, i.e. no errors were raised
yield put(actions.evalInterpreterSuccess(result.value, workspaceLocation));
? call(resume, lastDebuggerResult)
: call(runInContext, code, context, {
scheduler: 'preemptive',
originalMaxExecTime: execTime,
useSubst: substActiveAndCorrectChapter
}),
/**
* A BEGIN_INTERRUPT_EXECUTION signals the beginning of an interruption,
* i.e the trigger for the interpreter to interrupt execution.
*/
interrupted: take(actionTypes.BEGIN_INTERRUPT_EXECUTION),
paused: take(actionTypes.BEGIN_DEBUG_PAUSE)
});
if (interrupted) {
interrupt(context);
/* Redundancy, added ensure that interruption results in an error. */
context.errors.push(new InterruptedError(context.runtime.nodes[0]));
yield put(actions.debuggerReset(workspaceLocation));
yield put(actions.endInterruptExecution(workspaceLocation));
yield call(showWarningMessage, 'Execution aborted', 750);
return;
}
if (paused) {
yield put(actions.endDebuggerPause(workspaceLocation));
lastDebuggerResult = manualToggleDebugger(context);
yield updateInspector(workspaceLocation);
yield call(showWarningMessage, 'Execution paused', 750);
return;
}