Subject: Re: PR/33392 CVS commit: src/dist/nawk
To: None <gnats-bugs@NetBSD.org>
From: Aleksey Cheusov <cheusov@tut.by>
List: netbsd-bugs
Date: 07/27/2006 00:23:14
> | Are you sure about the following?
> |
> | @@ -82,10 +82,10 @@
> | void *p;
> | int i, new_count;
> |
> | - if (state < fa->state_count)
> | + if (++state < fa->state_count)
> | return
> |
> | I think ++ is unwanted
> |
> | new_count = state + 10;
> | for (i = fa->state_count; i < new_count; ++i) {
> | ^^^^^
> | ...
> | }
> | fa->state_count = new_count;
>
> The meaning of state_count has changed from being the largest number
> allocated to be the count of the states allocated, so both are correct.
> The code now passes all the regression tests. We could change the
> ++state, if we change the resize_state calls to be 1 greater than now,
> but that is more intrusive.
You are right, both are correct.
Suppose
1) we are here
918 /* add tmpset to current set of states */
919 ++(f->curstat);
+ 920 resize_state(f, f->curstat);
921 for (i = 0; i < NCHARS; i++)
2) 100 states was already created and all tables was properly initialized, i.e.
f->state_count == 2.
3) f->curstat == 99
1) + 2) + 3) ===> unnecessary memory allocation in resize_state(), just a few kbytes.
Is there any reason for this?
--
Best regards, Aleksey Cheusov.