summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib.c26
-rw-r--r--regex.c4
-rw-r--r--stream.c14
3 files changed, 13 insertions, 31 deletions
diff --git a/lib.c b/lib.c
index fbabda77..e855cb82 100644
--- a/lib.c
+++ b/lib.c
@@ -3011,15 +3011,13 @@ val split_str(val str, val sep)
if (*cstr) {
list_collect_decl (out, iter);
- prot1(&str);
-
for (; *cstr; cstr++) {
val piece = mkustring(one);
init_str(piece, cstr);
iter = list_collect(iter, piece);
}
- rel1(&str);
+ gc_hint(str);
return out;
} else {
@@ -3032,9 +3030,6 @@ val split_str(val str, val sep)
list_collect_decl (out, iter);
- prot1(&str);
- prot1(&sep);
-
for (;;) {
const wchar_t *psep = wcsstr(cstr, csep);
size_t span = (psep != 0) ? psep - cstr : wcslen(cstr);
@@ -3049,8 +3044,8 @@ val split_str(val str, val sep)
break;
}
- rel1(&sep);
- rel1(&str);
+ gc_hint(sep);
+ gc_hint(str);
return out;
}
@@ -3063,9 +3058,6 @@ val split_str_set(val str, val set)
const wchar_t *cset = c_str(set);
list_collect_decl (out, iter);
- prot1(&str);
- prot1(&set);
-
for (;;) {
size_t span = wcscspn(cstr, cset);
val piece = mkustring(num(span));
@@ -3079,8 +3071,8 @@ val split_str_set(val str, val set)
break;
}
- rel1(&set);
- rel1(&str);
+ gc_hint(set);
+ gc_hint(str);
return out;
}
@@ -3146,12 +3138,10 @@ val list_str(val str)
const wchar_t *cstr = c_str(str);
list_collect_decl (out, iter);
- prot1(&str);
-
while (*cstr)
iter = list_collect(iter, chr(*cstr++));
- rel1(&str);
+ gc_hint(str);
return out;
}
@@ -3283,12 +3273,12 @@ val int_str(val str, val base)
return nil;
if ((value == LONG_MAX || value == LONG_MIN) && errno == ERANGE) {
- val bignum = (prot1(&str), make_bignum());
+ val bignum = make_bignum();
unsigned char *ucs = utf8_dup_to_uc(wcs);
mp_err err = mp_read_radix(mp(bignum), ucs, b);
free(ucs); /* TODO: make wchar_t version of mp_read_radix. */
- rel1(&str);
+ gc_hint(str);
if (err != MP_OKAY)
return nil;
diff --git a/regex.c b/regex.c
index fa31016d..fa825ab3 100644
--- a/regex.c
+++ b/regex.c
@@ -1981,8 +1981,6 @@ val search_regex(val haystack, val needle_regex, val start,
cnum s = c_num(start);
const wchar_t *h = c_str(haystack);
- prot1(&haystack);
-
for (i = c_num(length_str(haystack)) - 1; i >= s; i--) {
cnum span = regex_run(needle_regex, h + i);
if (span >= 0) {
@@ -1991,7 +1989,7 @@ val search_regex(val haystack, val needle_regex, val start,
}
}
- rel1(&haystack);
+ gc_hint(haystack);
} else {
regex_machine_t regm;
val i, pos = start, retval;
diff --git a/stream.c b/stream.c
index 85b356b2..950e687d 100644
--- a/stream.c
+++ b/stream.c
@@ -2118,8 +2118,6 @@ static void vformat_str(val stream, val str, int width, enum align align,
cnum i, w;
wchar_t wc;
- prot1(&str);
-
vformat_align_pre(stream, align, slack);
if (fitlen == INT_PTR_MAX) {
@@ -2134,7 +2132,7 @@ static void vformat_str(val stream, val str, int width, enum align align,
vformat_align_post(stream, align, slack);
- rel1(&str);
+ gc_hint(str);
}
val formatv(val stream_in, val fmtstr, struct args *al)
@@ -2149,8 +2147,6 @@ val formatv(val stream_in, val fmtstr, struct args *al)
uw_simple_catch_begin;
- prot1(&fmtstr);
-
{
const wchar_t *fmt = c_str(fmtstr);
enum {
@@ -2505,10 +2501,10 @@ val formatv(val stream_in, val fmtstr, struct args *al)
set_indent_mode(stream, save_mode);
}
- rel1(&fmtstr);
-
uw_catch_end;
+ gc_hint(fmtstr);
+
return (stream_in) ? t : get_string_from_stream(stream);
}
@@ -3122,8 +3118,6 @@ static val run(val command, val args)
args = default_bool_arg(args);
nargs = c_num(length(args)) + 1;
- prot1(&args);
-
wargv = coerce(const wchar_t **, chk_malloc((nargs + 2) * sizeof *wargv));
for (i = 0, iter = cons(command, args); iter; i++, iter = cdr(iter))
@@ -3134,7 +3128,7 @@ static val run(val command, val args)
free(strip_qual(wchar_t **, wargv));
- rel1(&args);
+ gc_hint(args);
return (status < 0) ? nil : num(status);
}