diff options
author | Xavier Leroy <xavier.leroy@inria.fr> | 1996-11-07 13:12:33 +0000 |
---|---|---|
committer | Xavier Leroy <xavier.leroy@inria.fr> | 1996-11-07 13:12:33 +0000 |
commit | 29bf689759bb8fdffbc03caa2924e20c1530eb9e (patch) | |
tree | b3e64841a3f0250dd6dcfea0ba8bc624af8794be /byterun/printexc.c | |
parent | 497933ed8ae4a7ed6553929535b916e42020119e (diff) |
Ajout de printexc.c
minor_gc.h: declaration de garbage_collection.
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@1177 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
Diffstat (limited to 'byterun/printexc.c')
-rw-r--r-- | byterun/printexc.c | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/byterun/printexc.c b/byterun/printexc.c new file mode 100644 index 000000000..3d9a02118 --- /dev/null +++ b/byterun/printexc.c @@ -0,0 +1,58 @@ +/***********************************************************************/ +/* */ +/* Objective Caml */ +/* */ +/* Xavier Leroy, projet Cristal, INRIA Rocquencourt */ +/* */ +/* Copyright 1996 Institut National de Recherche en Informatique et */ +/* Automatique. Distributed only by permission. */ +/* */ +/***********************************************************************/ + +/* $Id$ */ + +/* Print an uncaught exception and abort */ + +#include <stdio.h> +#include <stdlib.h> +#include "fail.h" +#include "misc.h" +#include "mlvalues.h" +#ifdef HAS_UI +#include "ui.h" +#endif + +#ifdef HAS_UI +#define errprintf1(fmt) ui_print_stderr(fmt, NULL) +#define errprintf2(fmt,arg) ui_print_stderr(fmt, (char *)(arg)) +#else +#define errprintf1(fmt) fprintf(stderr, fmt) +#define errprintf2(fmt,arg) fprintf(stderr, fmt, arg) +#endif + +void fatal_uncaught_exception(exn) + value exn; +{ + mlsize_t i; + value v; + + errprintf2("Fatal error: uncaught exception %s", + String_val(Field(Field(exn, 0), 0))); + if (Wosize_val(exn) >= 2) { + errprintf1("("); + for (i = 1; i < Wosize_val(exn); i++) { + if (i > 1) errprintf1(", "); + v = Field(exn, i); + if (Is_long(v)) + errprintf2("%ld", Long_val(v)); + else if (Tag_val(v) == String_tag) + errprintf2("\"%s\"", String_val(v)); + else + errprintf1("_"); + } + errprintf1(")"); + } + errprintf1("\n"); + exit(2); +} + |