On Thursday 23 October 2003 15:42, Jose Alberto Fernandez wrote:
> Notice that following this path (not making locals visible) means
> that <macrodef> defined tasks will behave differently than java written
> tasks, more over it means that macrodef is not really the same as having
> the code in place. Ex:
Yes this is true,
which is why I had macrodef make the locals visible to the macro
instance in the first place.
However I have felt uneasy about it, used to as I am pascal
/algol8/c/c++/java's static scopping for local variables and not
lisp's dynamic extent.
The code to do this was in and out a number of times over the weekend.
One could argue that as macrodef is a macro, the dynamic extent should
be the case (the macro expands into the current element).
However, I think that a static scope as seen from an ant xml script
point of view is the way of least suprise.
Peter
>
> <macrodef name="m">
> <echo>${a}</echo>
> </macrodef>
>
> <property name="a" value="G"/>
>
> <target name="x">
> <local name="a" value="L"/>
> <echo>${a}</echo>
> </target>
>
> <target name="y">
> <local name="a" value="L"/>
> <m/>
> </target>
>
> Targets x and y are suppose to do the same thing, at least
> that is what a "macro" is supposed to do. But here the behavior
> changes in unexpected ways depending on whether "a" is local or global.
>
> If I had written <m/> in java, I would see the local value, but since
> I wrote it using <macrodef/> that is not the same. So I can forget
> about writing new tasks by just composing existing tasks toguether. :-(
>
> > <macrodef name="m">
> > <sequential>
> > <echo>${p}</echo>
> > <antcontrib:if>
> > <equals arg1="${p}" arg2="my local p"/>
> > <then>
> > <antcall target="tm"/>
> > </then>
> > </antcontrib:if>
> > </sequential>
> > </macrodef>
> >
> > <target name="x">
> > <local name="p" value="my local p"/>
> > <m/>
> > </target>
> >
> > <target name="tm">
> > <echo>${p}</echo>
> > </target>
> >
> > <property name="p" value="my global p"/>
> >
> > Peter
> >
> > > 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]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]