diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2012-04-03 11:20:41 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2012-04-03 11:20:41 -0700 |
commit | 1ce504148e960fa8fdd3701977786b99a7437f57 (patch) | |
tree | 30414fdc38771f8aac55cb880d437f8d1db5a87d /lib.c | |
parent | 06ced4e18fd69399e7419a59dbe477e9a92c23e1 (diff) | |
download | txr-1ce504148e960fa8fdd3701977786b99a7437f57.tar.gz txr-1ce504148e960fa8fdd3701977786b99a7437f57.tar.bz2 txr-1ce504148e960fa8fdd3701977786b99a7437f57.zip |
* eval.c (op_modplace): push replaced with mpush (mutating push).
* gc.c (gc_push): New function.
* gc.h (gc_push): Declared.
* hash.c (pushhash): Use mpush.
* lib.c (push): Reverted to unsafe operation. TODO comment replaced
with warning.
(lazy_flatten_scan): push occurence commented as safe.
(lazy_stream_func): Unsafe push replaced with mpush.
* lib.h (mpush): New macro.
Diffstat (limited to 'lib.c')
-rw-r--r-- | lib.c | 9 |
1 files changed, 4 insertions, 5 deletions
@@ -361,9 +361,8 @@ val pop(val *plist) val push(val value, val *plist) { - /* TODO: doing set here is suboptimal since - it is often used for just a local var. */ - return set(*plist, cons(value, *plist)); + /* Unsafe for mutating object fields: use mpush macro. */ + return *plist = cons(value, *plist); } val copy_list(val list) @@ -759,7 +758,7 @@ static val lazy_flatten_scan(val list, val *escape) } else if (atom(a)) { return list; } else do { - push(cdr(list), escape); + push(cdr(list), escape); /* safe mutation: *escape is a local var */ list = a; a = car(list); } while (consp(a)); @@ -3328,7 +3327,7 @@ static val lazy_stream_func(val env, val lcons) close_stream(stream, t); if (ahead) - push(ahead, cdr_l(env)); + mpush(ahead, *cdr_l(env)); return next; } |