diff options
Diffstat (limited to 'prototypes/connections/module.c')
| -rw-r--r-- | prototypes/connections/module.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/prototypes/connections/module.c b/prototypes/connections/module.c index c07b1e8..2e5375c 100644 --- a/prototypes/connections/module.c +++ b/prototypes/connections/module.c @@ -1132,12 +1132,18 @@ PureResult pure_app_reply(const PureApp *app, bool (*visit)(void *, PureSpan), v return visit_value(app, &app->arena, app->reply, visit, context); } +/* A view that fails reports it by its result; the fault stays the last event's. */ static PureResult evaluate(PureApp *app, uint32_t view, Slot *out) { double values[PURE_MODULE_STATES]; memcpy(values, app->values, sizeof(values)); app->view_arena.used = 0; Event ev = {.app = app, .arena = &app->view_arena}; - return run(app->module, values, app->module->view_code[view], &ev, out); + PureFault fault = app->fault; + uint32_t fault_pc = app->fault_pc; + PureResult result = run(app->module, values, app->module->view_code[view], &ev, out); + app->fault = fault; + app->fault_pc = fault_pc; + return result; } bool pure_app_view(PureApp *app, uint32_t view, double *out) { |
