diff options
author | Teddy <ted.sybil@gmail.com> | 2013-08-13 20:44:03 +0800 |
---|---|---|
committer | Teddy <ted.sybil@gmail.com> | 2013-08-13 20:44:03 +0800 |
commit | 9982fba5f471944a2e5ab1edac97c971eb557416 (patch) | |
tree | e3a7f37b00d9034b807024eb232eefb9d1659540 /builtin.cpp | |
parent | cfb7f91f0153250b009a68b076ef4d1e6f12c4eb (diff) |
fixed a mem leak in parser.cpp
Diffstat (limited to 'builtin.cpp')
-rw-r--r-- | builtin.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
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; } |