detecting variable uses in the wrong phase (issue #259)

This commit is contained in:
Alex Shinn 2016-06-19 14:24:42 +09:00
parent 5a770c4909
commit 047f35432b

5
vm.c
View file

@ -259,10 +259,15 @@ static void generate_ref (sexp ctx, sexp ref, int unboxp) {
sexp_emit_push(ctx, sexp_ref_cell(ref)); sexp_emit_push(ctx, sexp_ref_cell(ref));
} else { } else {
lam = sexp_context_lambda(ctx); lam = sexp_context_lambda(ctx);
if (!lam || !sexp_lambdap(lam)) {
sexp_warn(ctx, "variable out of phase: ", sexp_ref_name(ref));
sexp_emit_push(ctx, SEXP_VOID);
} else {
generate_non_global_ref(ctx, sexp_ref_name(ref), sexp_ref_cell(ref), generate_non_global_ref(ctx, sexp_ref_name(ref), sexp_ref_cell(ref),
lam, sexp_lambda_fv(lam), unboxp); lam, sexp_lambda_fv(lam), unboxp);
} }
} }
}
static void generate_set (sexp ctx, sexp set) { static void generate_set (sexp ctx, sexp set) {
sexp ref = sexp_set_var(set), lambda; sexp ref = sexp_set_var(set), lambda;