This commit is contained in:
Alex Shinn 2018-04-01 10:47:02 +09:00
commit 502a011b18
2 changed files with 14 additions and 2 deletions

6
eval.c
View file

@ -806,6 +806,12 @@ static sexp analyze_lambda (sexp ctx, sexp x, int depth) {
sexp_return(res, sexp_compile_error(ctx, "non-symbol parameter", x));
else if (sexp_truep(sexp_memq(ctx, sexp_car(ls), sexp_cdr(ls))))
sexp_return(res, sexp_compile_error(ctx, "duplicate parameter", x));
if (! sexp_nullp(ls)) {
if (! sexp_idp(ls))
sexp_return(res, sexp_compile_error(ctx, "non-symbol parameter", x));
else if (sexp_truep(sexp_memq(ctx, ls, sexp_cadr(x))))
sexp_return(res, sexp_compile_error(ctx, "duplicate parameter", x));
}
/* build lambda and analyze body */
res = sexp_make_lambda(ctx, tmp=sexp_copy_list(ctx, sexp_cadr(x)));
if (sexp_exceptionp(res)) sexp_return(res, res);

8
sexp.c
View file

@ -439,6 +439,7 @@ void sexp_init_context_globals (sexp ctx) {
const char** features;
int i, endianess_check = 1;
sexp type, *vec, print=NULL;
sexp_gc_var1(feature);
sexp_context_globals(ctx)
= sexp_make_vector(ctx, sexp_make_fixnum(SEXP_G_NUM_GLOBALS), SEXP_VOID);
#if ! SEXP_USE_GLOBAL_SYMBOLS
@ -474,10 +475,15 @@ void sexp_init_context_globals (sexp ctx) {
sexp_global(ctx, SEXP_G_FEATURES) = SEXP_NULL;
sexp_push(ctx, sexp_global(ctx, SEXP_G_FEATURES), SEXP_FALSE);
sexp_car(sexp_global(ctx, SEXP_G_FEATURES)) = sexp_intern(ctx, (*(unsigned char*) &endianess_check) ? "little-endian" : "big-endian", -1);
sexp_gc_preserve1(ctx, feature);
for (features=sexp_initial_features; *features; features++) {
feature = sexp_intern(ctx, *features, -1);
if (sexp_not(sexp_memq(ctx, feature, sexp_global(ctx, SEXP_G_FEATURES)))) {
sexp_push(ctx, sexp_global(ctx, SEXP_G_FEATURES), SEXP_FALSE);
sexp_car(sexp_global(ctx, SEXP_G_FEATURES)) = sexp_intern(ctx, *features, -1);
sexp_car(sexp_global(ctx, SEXP_G_FEATURES)) = feature;
}
}
sexp_gc_release1(ctx);
sexp_global(ctx, SEXP_G_NUM_TYPES) = sexp_make_fixnum(SEXP_NUM_CORE_TYPES);
sexp_global(ctx, SEXP_G_TYPES)
= sexp_make_vector(ctx, sexp_make_fixnum(SEXP_INIT_NUM_TYPES), SEXP_VOID);