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]

Reply via email to