aboutsummaryrefslogtreecommitdiff
path: root/builtin.cpp
diff options
context:
space:
mode:
authorTeddy <ted.sybil@gmail.com>2013-08-13 20:44:03 +0800
committerTeddy <ted.sybil@gmail.com>2013-08-13 20:44:03 +0800
commit9982fba5f471944a2e5ab1edac97c971eb557416 (patch)
treee3a7f37b00d9034b807024eb232eefb9d1659540 /builtin.cpp
parentcfb7f91f0153250b009a68b076ef4d1e6f12c4eb (diff)
fixed a mem leak in parser.cpp
Diffstat (limited to 'builtin.cpp')
-rw-r--r--builtin.cpp10
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;
}