Ok, I think I will try to go back to the drawing board and try to provide my simple definition of <local> as I originally proposed. I guess I did not look close enough your implementation.
>From your example bellow I see that <local> does not define a proper nesting context (which I think is wrong). In my original proposal <local> extended <sequential> and as such the life of the <local> was restricted to that nesting. For what I see in your example <local> is not defined as a nesting task and that concerns me. As per the <attribute> of <macrodef>, I tend to agree with you that probably it is not a good idea to treat it as a <local> since its expansion should be just on the expansion of the macro itself. But I think the issue here is in <macrodef> and not in the definition of <local>. Finally, I would argue that the burden of using ThreadLocals or watever should be on <parallel> and not is some other task or the CORE as a whole. If you want to parallelize tasks that interfere with one another, it should be upto to parallel to allow for independent computations. This should be a completely separate issue from that of <local> it should be an enhancement request on <parallel>. So lets talk this over some more, Jose Alberto > -----Original Message----- > From: peter reilly [mailto:[EMAIL PROTECTED] > Sent: 22 October 2003 18:36 > To: Ant Developers List > Subject: Re: Vote: <local> for 1.6 > > > On Wednesday 22 October 2003 15:04, Stefan Bodewig wrote: > > On 22 Oct 2003, Stefan Bodewig <[EMAIL PROTECTED]> wrote: > > > I haven't made up my mind on the feature itself > > > > OK, re-reading the description first, I don't like the > > > > ,---- > > > > | The value part of <local> is optional, and the local > property may > > | be set by a subsequent <property>, <property> will only set it if > > | the value is not set. > > > > `---- > > > > part. This means that whenever I find a <property> task > I'll have to > > search all possible scopes for a <local> element and can't > rely on it > > being global. > > > > What is the benefit of making <property> adhere to the > scoping set up > > by <local>? > > The point is that all tasks including <property> see the > local properties as normal properties. > > It means that the macro attributes are now seen as normal > properties by the tasks that are contained within the > sequential nested element. > > The <local> makes a property of the same kind as the macro attribute. > > A common use case for this is when converting an antcall to a > macro: I had a target that was used as an antcall target, it > used a property "suite.pattern" to contain a regex what was > used a number of times in the target and as an ant call was > done to invoke the target, this was not seen outside the > target. On conversion to a macrodef, the property > "suite.pattern" is now a global property and the macrodef may > fail unexpectly. > > With local the macro now looks like this: > <!-- > macro to generate test suites registing > @param gen.dir the dir to place the register_suites.h > and .cpp files > @param unit.dir the dir that the unit_*.cpp files are located > --> > <macrodef name="gen-register-suites"> > <attribute name="gen.dir"/> > <attribute name="unit.dir"/> > <sequential> > <local name="suite.pattern" value="^ *SUITE\(.*,\s*(.*)\s*\)"/> > <mkdir dir="${gen.dir}"/> > ... > </sequential> > </macrodef> > > Another common use case is use of a local to pass information > from one task to another without messing up global properties > or similar properties used in other targets (say in a > complicated build with a number of imports and lots of targets). > > <local name="filepath"/> > <pathconvert property="filepath" targetos="unix" > refid="files.path"/> > <echo>the files in "files.path" are ${filepath}</echo> > > However I can see the problem of looking at a script and not > knowing if the property is local or global. > > The last patch allowed [sub]ant[call] to inherit the local properties. > > I propose to change the local so that this inheriatance is > removed and also that macro instances do not inherit the > local properites - i.e. the local properties are staticlly > scoped in the build script. > > So currently the following is the case: > <property name="p" value="global"/> > > <macrodef name="inner"> > <sequential> > <echo>p is ${p}</echo> > </sequential> > </macrodef> > > <macrodef name="outer"> > <attribute name="p"/> > <sequential> > <inner/> > </sequential> > </macrodef> > > <outer p="from macro"/> > > Will generate "p is from macro" which is probally not > expected as inner was not explicilty passed the property by > outer and inner may be in another file or in an antlib.xml. > > Peter > > > > > I don't have any strong objections against the rest or the > > implementation. > > > > So +0.5 (which can be turned into a +0.9 by explaining why > <property> > > should care about scopes 8-). > > > > Stefan > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]