diff --git a/eval.c b/eval.c index ac694626..6612907d 100644 --- a/eval.c +++ b/eval.c @@ -960,6 +960,7 @@ static void generate_general_app (sexp ctx, sexp app) { emit(ctx, (tailp ? OP_TAIL_CALL : OP_CALL)); emit_word(ctx, (sexp_uint_t)sexp_make_fixnum(len)); + sexp_context_tailp(ctx) = tailp; sexp_context_depth(ctx) -= len; sexp_gc_release1(ctx); } diff --git a/init.scm b/init.scm index b5b372e6..629d4de7 100644 --- a/init.scm +++ b/init.scm @@ -122,7 +122,9 @@ #f ((lambda (cl) (if (compare 'else (car cl)) - (cons (rename 'begin) (cdr cl)) + (if (pair? (cddr expr)) + (error "non-final else in cond" expr) + (cons (rename 'begin) (cdr cl))) (if (if (null? (cdr cl)) #t (compare '=> (cadr cl))) (list (list (rename 'lambda) (list (rename 'tmp)) (list (rename 'if) (rename 'tmp)