diff options
-rw-r--r-- | lib.c | 26 | ||||
-rw-r--r-- | regex.c | 4 | ||||
-rw-r--r-- | stream.c | 14 |
3 files changed, 13 insertions, 31 deletions
@@ -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; @@ -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; @@ -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); } |