summaryrefslogtreecommitdiffstats
path: root/stream.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2012-04-03 08:40:31 -0700
committerKaz Kylheku <kaz@kylheku.com>2012-04-03 08:40:31 -0700
commit06ced4e18fd69399e7419a59dbe477e9a92c23e1 (patch)
treebf267f92a132acdd5d15df0b0ef7e2bb29c27fd6 /stream.c
parent6c4da3e5e1cb02f4d4e522626579cbded546059a (diff)
downloadtxr-06ced4e18fd69399e7419a59dbe477e9a92c23e1.tar.gz
txr-06ced4e18fd69399e7419a59dbe477e9a92c23e1.tar.bz2
txr-06ced4e18fd69399e7419a59dbe477e9a92c23e1.zip
* configure: Support a gen-gc configuration variable which
causes CONFIG_GEN_GC to be defined as 1 in config.h. * eval.c (op_defvar, dwim_loc, op_modplace, transform_op): Handle mutating assignments via set macro. (op_dohash): Inform gc about mutated variables. TODO here. * filter.c (trie_add, trie_compress): Handle mutating assignments via set macro. * gc.c (BACKPTR_VEC_SIZE, FULL_GC_INTERVAL): New preprocessor symbols. (backptr, backptr_idx, partial_gc_count, full): New static variables. (make_obj): Initialize generation to zero. (gc): Added logic for deciding between full and partial gc. (gc_set, gc_mutated): New functions. * gc.h (gc_set, gc_mutated): Declared. * hash.c (hash_mark): Changed useless use of vecref_l to vecref. (gethash_f): Use set when assigning through *found since it is a possible mutation. * lib.c (car_l, cdr_l, vecref_l): Got rid of loc macro uses. Using the value properly is going to be the caller's responsibility. (push): push may be a mutation, so use set. (intern): Uset set to mutate a hash entry. (acons_new_l, aconsq_new_l): Use set when replacing *list. * lib.h (PTR_BIT): New preprocessor symbol. (obj_common): New macro for defining common object fields. type_t is split into two bitfields, half a pointer wide, allowing for generation to be represented. (struct any, struct cons, struct string, struct sym, struct package, struct func, struct vec, struct lazy_cons, struct cobj, struct env, struct bignum, struct flonum): Use obj_common macro to defined common fields. (loc): Macro removed. (set, mut): Macros conditionally defined for real functionality. (list_collect, list_collect_nconc, list_collect_append): Replace mutating operations with set. * match.c (dest_set, v_cat, v_output, v_filter): Replace mutating operations with set. * stream.c (string_in_get_line, string_in_get_char, strlist_out_put_string, strlist_out_put_char): Replace mutating operations with set. * unwind.c (uw_register_subtype): Replace mutating operation with set.
Diffstat (limited to 'stream.c')
-rw-r--r--stream.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/stream.c b/stream.c
index 46148b7c..e877d200 100644
--- a/stream.c
+++ b/stream.c
@@ -355,7 +355,7 @@ static val string_in_get_line(val stream)
if (lt(pos, length_str(string))) {
val nlpos = find_char(string, pos, chr('\n'));
val result = sub_str(string, pos, nlpos);
- *cdr_l(pair) = nlpos ? plus(nlpos, one) : length_str(string);
+ set(*cdr_l(pair), nlpos ? plus(nlpos, one) : length_str(string));
return result;
}
@@ -369,7 +369,7 @@ static val string_in_get_char(val stream)
val pos = cdr(pair);
if (lt(pos, length_str(string))) {
- *cdr_l(pair) = plus(pos, one);
+ set(*cdr_l(pair), plus(pos, one));
return chr_str(string, pos);
}
@@ -584,8 +584,8 @@ static val strlist_out_put_string(val stream, val str)
strstream = make_string_output_stream();
}
- *car_l(cell) = lines;
- *cdr_l(cell) = strstream;
+ set(*car_l(cell), lines);
+ set(*cdr_l(cell), strstream);
return t;
}
@@ -602,8 +602,8 @@ static val strlist_out_put_char(val stream, val ch)
put_char(ch, strstream);
}
- *car_l(cell) = lines;
- *cdr_l(cell) = strstream;
+ set(*car_l(cell), lines);
+ set(*cdr_l(cell), strstream);
return t;
}