Skip to content

Commit 802d65b

Browse files
committed
better reporting of bootstrap errors. would have prevented #1089.
1 parent af6e780 commit 802d65b

File tree

3 files changed

+25
-5
lines changed

3 files changed

+25
-5
lines changed

src/julia.expmap

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,9 @@
181181
jl_get_current_task;
182182
jl_enter_handler;
183183
jl_exception_in_transit;
184+
jl_errorexception_type;
185+
jl_loaderror_type;
186+
jl_backtrace_type;
184187
jl_show;
185188
jl_show_any;
186189
jl_print_symbol;

src/julia.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -342,10 +342,10 @@ extern jl_typename_t *jl_array_typename;
342342
extern jl_struct_type_t *jl_weakref_type;
343343
extern jl_struct_type_t *jl_ascii_string_type;
344344
extern jl_struct_type_t *jl_utf8_string_type;
345-
extern jl_struct_type_t *jl_errorexception_type;
345+
extern DLLEXPORT jl_struct_type_t *jl_errorexception_type;
346346
extern jl_struct_type_t *jl_typeerror_type;
347-
extern jl_struct_type_t *jl_loaderror_type;
348-
extern jl_struct_type_t *jl_backtrace_type;
347+
extern DLLEXPORT jl_struct_type_t *jl_loaderror_type;
348+
extern DLLEXPORT jl_struct_type_t *jl_backtrace_type;
349349
extern jl_value_t *jl_stackovf_exception;
350350
extern jl_value_t *jl_memory_exception;
351351
extern jl_value_t *jl_divbyzero_exception;

ui/repl.c

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,11 +147,28 @@ static int exec_program(void)
147147
//jl_lisp_prompt();
148148
//return 1;
149149
jl_value_t *errs = jl_stderr_obj();
150+
jl_value_t *e = jl_exception_in_transit;
150151
if (errs != NULL) {
151-
jl_show(jl_stderr_obj(), jl_exception_in_transit);
152+
jl_show(jl_stderr_obj(), e);
152153
}
153154
else {
154-
ios_printf(ios_stderr, "error during bootstrap\n");
155+
while (1) {
156+
if (jl_typeof(e) == (jl_type_t*)jl_loaderror_type) {
157+
e = jl_fieldref(e, 2);
158+
// TODO: show file and line
159+
}
160+
else if (jl_typeof(e) == (jl_type_t*)jl_backtrace_type) {
161+
e = jl_fieldref(e, 0);
162+
}
163+
else break;
164+
}
165+
if (jl_typeof(e) == (jl_type_t*)jl_errorexception_type) {
166+
ios_printf(ios_stderr, "error during bootstrap: %s\n",
167+
jl_string_data(jl_fieldref(e,0)));
168+
}
169+
else {
170+
ios_printf(ios_stderr, "error during bootstrap\n");
171+
}
155172
}
156173
ios_printf(ios_stderr, "\n");
157174
JL_EH_POP();

0 commit comments

Comments
 (0)