On Sat, Jun 11, 2011 at 3:42 AM, ali hagigat <[email protected]> wrote: > 8.6 The call Function > The call function can be nested. Each recursive invocation gets its > own local values for > $(1), etc. that mask the values of higher-level call. > map = $(foreach a,$(2),$(call $(1),$(a))) > o = $(call map,origin,o map MAKE) > ------------------------------------ > It seems that $(1) is "origin" in each iteration of 'foreach'. If not > what it is then?
While that example illustrates how $(call) can be tested, with a called function itself using $(call), it doesn't really illustrate how $1 and similar take different values, with each new $(call) shadowing the current values. Well, I guess you can say that $1 takes a different value in each call to $(origin), but since that's a built-in we really can't "see" the change. If we add an intermediate function, perhaps it would be clearer: map = $(foreach a,$(2),$(call $(1),$(a))) verbose_origin =The origin of $1 is $(origin $1). o = $(call map,verbose_origin,o map MAKE) That sets $(o) to "The origin of o is file. The origin of map is file. The origin of MAKE is default." While $(map) is being expanded, $(verbose_origin) is called, so that $1 is set to 'origin' inside $(map) but, *concurrently*, inside the three calls to $(verbose_origin), $1 is set to 'o', 'map', and 'MAKE'. Does that make the documentation's bit about how each "gets its own local values for $(1), etc" clearer? Philip Guenther _______________________________________________ Help-make mailing list [email protected] https://lists.gnu.org/mailman/listinfo/help-make
