Propagate error message from unfound dynamic lib when not found as builtin either.

Fixes issue #282.
This commit is contained in:
Alex Shinn 2015-10-11 23:24:00 +09:00
parent 23ac772e3a
commit 8d46cc6842

21
eval.c
View file

@ -1243,15 +1243,8 @@ static struct sexp_library_entry_t *sexp_find_static_library(const char *file)
return entry; return entry;
return NULL; return NULL;
} }
static sexp sexp_load_builtin (sexp ctx, sexp file, sexp env) {
struct sexp_library_entry_t *entry = sexp_find_static_library(sexp_string_data(file));
if (! entry)
return sexp_compile_error(ctx, "couldn't find builtin library", file);
return entry->init(ctx, NULL, 3, env, sexp_version, SEXP_ABI_IDENTIFIER);
}
#else #else
#define sexp_find_static_library(path) NULL #define sexp_find_static_library(path) NULL
#define sexp_load_builtin(ctx, file, env) SEXP_UNDEF
#endif #endif
#if SEXP_USE_DL #if SEXP_USE_DL
@ -1310,9 +1303,19 @@ static sexp sexp_load_dl (sexp ctx, sexp file, sexp env) {
#if SEXP_USE_DL || SEXP_USE_STATIC_LIBS #if SEXP_USE_DL || SEXP_USE_STATIC_LIBS
static sexp sexp_load_binary(sexp ctx, sexp source, sexp env) { static sexp sexp_load_binary(sexp ctx, sexp source, sexp env) {
#if SEXP_USE_STATIC_LIBS
struct sexp_library_entry_t *entry;
#endif
sexp res = sexp_load_dl(ctx, source, env); sexp res = sexp_load_dl(ctx, source, env);
if (res == SEXP_UNDEF || sexp_exceptionp(res)) #if SEXP_USE_STATIC_LIBS
res = sexp_load_builtin(ctx, source, env); if (res == SEXP_UNDEF || sexp_exceptionp(res)) {
entry = sexp_find_static_library(sexp_string_data(file));
if (entry == NULL)
res = (res == SEXP_UNDEF ? sexp_compile_error(ctx, "couldn't find builtin library", file) : res);
else
res = entry->init(ctx, NULL, 3, env, sexp_version, SEXP_ABI_IDENTIFIER);
}
#endif
return res; return res;
} }
#endif #endif