mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-07-09 22:17:34 +02:00
Merge branch 'master' of https://github.com/ashinn/chibi-scheme
This commit is contained in:
commit
502a011b18
2 changed files with 14 additions and 2 deletions
6
eval.c
6
eval.c
|
@ -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));
|
sexp_return(res, sexp_compile_error(ctx, "non-symbol parameter", x));
|
||||||
else if (sexp_truep(sexp_memq(ctx, sexp_car(ls), sexp_cdr(ls))))
|
else if (sexp_truep(sexp_memq(ctx, sexp_car(ls), sexp_cdr(ls))))
|
||||||
sexp_return(res, sexp_compile_error(ctx, "duplicate parameter", x));
|
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 */
|
/* build lambda and analyze body */
|
||||||
res = sexp_make_lambda(ctx, tmp=sexp_copy_list(ctx, sexp_cadr(x)));
|
res = sexp_make_lambda(ctx, tmp=sexp_copy_list(ctx, sexp_cadr(x)));
|
||||||
if (sexp_exceptionp(res)) sexp_return(res, res);
|
if (sexp_exceptionp(res)) sexp_return(res, res);
|
||||||
|
|
10
sexp.c
10
sexp.c
|
@ -439,6 +439,7 @@ void sexp_init_context_globals (sexp ctx) {
|
||||||
const char** features;
|
const char** features;
|
||||||
int i, endianess_check = 1;
|
int i, endianess_check = 1;
|
||||||
sexp type, *vec, print=NULL;
|
sexp type, *vec, print=NULL;
|
||||||
|
sexp_gc_var1(feature);
|
||||||
sexp_context_globals(ctx)
|
sexp_context_globals(ctx)
|
||||||
= sexp_make_vector(ctx, sexp_make_fixnum(SEXP_G_NUM_GLOBALS), SEXP_VOID);
|
= sexp_make_vector(ctx, sexp_make_fixnum(SEXP_G_NUM_GLOBALS), SEXP_VOID);
|
||||||
#if ! SEXP_USE_GLOBAL_SYMBOLS
|
#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_global(ctx, SEXP_G_FEATURES) = SEXP_NULL;
|
||||||
sexp_push(ctx, sexp_global(ctx, SEXP_G_FEATURES), SEXP_FALSE);
|
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_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++) {
|
for (features=sexp_initial_features; *features; features++) {
|
||||||
sexp_push(ctx, sexp_global(ctx, SEXP_G_FEATURES), SEXP_FALSE);
|
feature = sexp_intern(ctx, *features, -1);
|
||||||
sexp_car(sexp_global(ctx, SEXP_G_FEATURES)) = 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)) = feature;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
sexp_gc_release1(ctx);
|
||||||
sexp_global(ctx, SEXP_G_NUM_TYPES) = sexp_make_fixnum(SEXP_NUM_CORE_TYPES);
|
sexp_global(ctx, SEXP_G_NUM_TYPES) = sexp_make_fixnum(SEXP_NUM_CORE_TYPES);
|
||||||
sexp_global(ctx, SEXP_G_TYPES)
|
sexp_global(ctx, SEXP_G_TYPES)
|
||||||
= sexp_make_vector(ctx, sexp_make_fixnum(SEXP_INIT_NUM_TYPES), SEXP_VOID);
|
= sexp_make_vector(ctx, sexp_make_fixnum(SEXP_INIT_NUM_TYPES), SEXP_VOID);
|
||||||
|
|
Loading…
Add table
Reference in a new issue