From 0e1b6b6f1e2ea9b420e148b3faf65c34790b7bcd Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Tue, 28 Feb 2012 23:26:08 -0800 Subject: * match.c (consume_prefix): This memory optimization should only be done for lazy strings, otherwise it just causes unnecessary memory use by duplicating the line, and inefficiency via thanks to allocator churn. --- ChangeLog | 7 +++++++ match.c | 14 ++++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3bc68f5b..71907fa4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2012-02-28 Kaz Kylheku + + * match.c (consume_prefix): This memory optimization should only + be done for lazy strings, otherwise it just causes unnecessary + memory use by duplicating the line, and inefficiency via + thanks to allocator churn. + 2012-02-28 Kaz Kylheku * lib.c (numberp): Fix bad type check: null pointer dereference when diff --git a/match.c b/match.c index 3fb64b0b..78ff23d0 100644 --- a/match.c +++ b/match.c @@ -411,13 +411,15 @@ static val h_text(match_line_ctx *c) static void consume_prefix(match_line_ctx *c) { - const val shift_hiwater = num_fast(4000); - const val shift_amount = num_fast(3900); + if (lazy_stringp(c->dataline)) { + const val shift_hiwater = num_fast(4000); + const val shift_amount = num_fast(3900); - if (gt(c->pos, shift_hiwater)) { - c->base = plus(c->base, shift_amount); - c->pos = minus(c->pos, shift_amount); - c->dataline = sub_str(c->dataline, shift_amount, t); + if (gt(c->pos, shift_hiwater)) { + c->base = plus(c->base, shift_amount); + c->pos = minus(c->pos, shift_amount); + c->dataline = sub_str(c->dataline, shift_amount, t); + } } } -- cgit v1.2.3