From: Ben Tilly Date: Sat, 15 Jul 2000 17:23:27 +0000 (-0400) Subject: Add an optimization for map-maps-a-list-element-to-more-list-elements X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=18ef8beac527ca204cb2b7f96c5a4c585c8ee174;p=p5sagit%2Fp5-mst-13.2.git Add an optimization for map-maps-a-list-element-to-more-list-elements case, but add also notes explaining the relationship of this patch and the earlier notes by Sarathy. Subject: Map is still slow Message-ID: <20000715212327.21656.qmail@hotmail.com> p4raw-id: //depot/perl@6429 --- diff --git a/pp_ctl.c b/pp_ctl.c index 75673dc..776754e 100644 --- a/pp_ctl.c +++ b/pp_ctl.c @@ -742,7 +742,7 @@ PP(pp_mapwhile) * is repeatedly extended for every set of items. Is possible * to do this without any stack extension or copying at all * by maintaining a separate list over which the map iterates - * (like foreach does). */ + * (like foreach does). --gsar */ /* everything in the stack after the destination list moves * towards the end the stack by the amount of room needed */ @@ -750,6 +750,17 @@ PP(pp_mapwhile) /* items to shift up (accounting for the moved source pointer) */ count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1); + + /* This optimization is by Ben Tilly and it does + * things differently from what Sarathy (gsar) + * is describing. The downside of this optimization is + * that leaves "holes" (uninitialized and hopefully unused areas) + * to the Perl stack, but on the other hand this + * shouldn't be a problem. If Sarathy's idea gets + * implemented, this optimization should become + * irrelevant. --jhi */ + if (shift < count) + shift = count; /* Avoid shifting too often --Ben Tilly */ EXTEND(SP,shift); src = SP;