preserving internal define source info

This commit is contained in:
Alex Shinn 2010-07-20 00:19:02 +09:00
parent 3660755f4a
commit 66ae7b1c03

5
eval.c
View file

@ -564,7 +564,9 @@ static sexp analyze_lambda (sexp ctx, sexp x) {
if (sexp_pairp(sexp_caar(tmp))) { if (sexp_pairp(sexp_caar(tmp))) {
name = sexp_caaar(tmp); name = sexp_caaar(tmp);
tmp = sexp_cons(ctx3, sexp_cdaar(tmp), sexp_cdar(tmp)); tmp = sexp_cons(ctx3, sexp_cdaar(tmp), sexp_cdar(tmp));
value = analyze_lambda(ctx3, sexp_cons(ctx3, SEXP_VOID, tmp)); tmp = sexp_cons(ctx3, SEXP_VOID, tmp);
sexp_pair_source(tmp) = sexp_pair_source(sexp_caar(ls));
value = analyze_lambda(ctx3, tmp);
} else { } else {
name = sexp_caar(tmp); name = sexp_caar(tmp);
value = analyze(ctx3, sexp_cadar(tmp)); value = analyze(ctx3, sexp_cadar(tmp));
@ -624,6 +626,7 @@ static sexp analyze_define (sexp ctx, sexp x) {
sexp_push(ctx, sexp_lambda_sv(sexp_env_lambda(env)), name); sexp_push(ctx, sexp_lambda_sv(sexp_env_lambda(env)), name);
sexp_push(ctx, sexp_lambda_locals(sexp_env_lambda(env)), name); sexp_push(ctx, sexp_lambda_locals(sexp_env_lambda(env)), name);
tmp = sexp_cons(ctx, sexp_cdr(x), ctx); tmp = sexp_cons(ctx, sexp_cdr(x), ctx);
sexp_pair_source(sexp_cdr(x)) = sexp_pair_source(x);
sexp_push(ctx, sexp_lambda_defs(sexp_env_lambda(env)), tmp); sexp_push(ctx, sexp_lambda_defs(sexp_env_lambda(env)), tmp);
res = SEXP_VOID; res = SEXP_VOID;
} else { } else {