void sync_sched::do_yield() { if(debug_driver) fprintf(stderr,"[sync: svc_yield] yield"); active->push_back(ft); pop_current(); }
void sync_sched::forget_current() { if(ft) { collector->remove_root(ft); pop_current(); } }
static void trace_back(const char *file, const char *func, int line) { info_node *tmp; fprintf(stderr, "!!! TRACE_BACK !!!\n"); fprintf(stderr, "\tDispatched in file '%s' in function '%s' at line '%d'\n", file, func, line); for (tmp = list->origin; tmp != NULL; tmp = tmp->next) if (tmp->next != NULL) fprintf(stderr, "\tDispatched in file '%s' in function '%s' at line '%d'\n", tmp->file, tmp->func, tmp->line); else fprintf(stderr, "\tComming from file '%s' in function '%s' at line '%d'\n", tmp->file, tmp->func, tmp->line); fprintf(stderr, "Uncaught exception: (%s): '%s'\n", list->type->name, M(list->obj, toString)); pop_current(); __exit_end_func(-1); exit(42); }
void __except_throw_func(const Type *type, Object obj, const char *file, const char *func, int line) { info_node *node; while (list != NULL && (list->caught == CAUGHT || list->status >= IN_FINALLY)) { if (list->next == NULL) trace_back(file, func, line); if (list->obj == obj) list->obj = NULL; pop_current(); } if (list == NULL) { fprintf(stderr, "Uncaught exception: in file '%s' in func '%s' at line '%d'\n\ (%s): '%s'\n", file, func, line, type->name, M(obj, toString)); __delete_func(obj, 0, 0); __exit_end_func(-1); exit(42); }