From e82487429b29b2258a9afbf39e114f0a11b7c274 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Tue, 6 Jan 2015 12:43:29 -0700 Subject: [PATCH] fix bad `case-lambda` sharing that breaks let-depth tracking --- racket/src/racket/src/jit.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/racket/src/racket/src/jit.c b/racket/src/racket/src/jit.c index 8c4c350007..129cc7bfc3 100644 --- a/racket/src/racket/src/jit.c +++ b/racket/src/racket/src/jit.c @@ -1329,12 +1329,13 @@ static Scheme_Native_Closure_Data *create_native_case_lambda(Scheme_Case_Lambda o = c->array[i]; if (SCHEME_PROCP(o)) o = (Scheme_Object *)((Scheme_Closure *)o)->code; - data = (Scheme_Closure_Data *)o; + data = MALLOC_ONE_TAGGED(Scheme_Closure_Data); + memcpy(data, o, sizeof(Scheme_Closure_Data)); ensure_closure_native(data, ndata); if (data->u.native_code->max_let_depth > max_let_depth) max_let_depth = data->u.native_code->max_let_depth; + c->array[i] = (Scheme_Object *)data; } - printf("%d\n", max_let_depth); ndata->max_let_depth = max_let_depth; ndata->closure_size = -(count + 1); /* Indicates case-lambda */