From 9982fba5f471944a2e5ab1edac97c971eb557416 Mon Sep 17 00:00:00 2001 From: Teddy Date: Tue, 13 Aug 2013 20:44:03 +0800 Subject: fixed a mem leak in parser.cpp --- builtin.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'builtin.cpp') diff --git a/builtin.cpp b/builtin.cpp index 6eb0c0f..b983167 100644 --- a/builtin.cpp +++ b/builtin.cpp @@ -954,7 +954,10 @@ BUILTIN_PROC_DEF(pair_set_car) { ARGS_EXACTLY_TWO; if (!args->car->is_pair_obj()) throw TokenError("pair", RUN_ERR_WRONG_TYPE); - TO_PAIR(args->car)->car = TO_PAIR(args->cdr)->car; + Pair *p = TO_PAIR(args->car); + gc.expose(p->car); + p->car = TO_PAIR(args->cdr)->car; + gc.attach(p->car); return unspec_obj; } @@ -962,7 +965,10 @@ BUILTIN_PROC_DEF(pair_set_cdr) { ARGS_EXACTLY_TWO; if (!args->car->is_pair_obj()) throw TokenError("pair", RUN_ERR_WRONG_TYPE); - TO_PAIR(args->car)->cdr = TO_PAIR(args->cdr)->car; + Pair *p = TO_PAIR(args->car); + gc.expose(p->cdr); + p->cdr = TO_PAIR(args->cdr)->car; + gc.attach(p->cdr); return unspec_obj; } -- cgit v1.2.3