On Friday 14 November 2003 14:07, Stefan Bodewig wrote:
> On Fri, 14 Nov 2003, peter reilly <[EMAIL PROTECTED]> wrote:
> > <presetdef> expands the properties at the point of use, not
> > at the point of definition.

> Better note that somewhere prominently.
Ok.

> > On Friday 14 November 2003 10:53, Stefan Bodewig wrote:
> >> Peter, Jan, now that we've seen Jose Alberto's use case - what can
> >> macrodef do when we use (local) properties that can't be done with
> >> textual substitutions?
> >
> > I do not like using a different notation for attributes.
>
> unless they are a different thing than properties, if I understand you
> correctly.
Not quite, I mean that if they are differnet from properties, a different
notation should be used, but I do not like using a different notation
in principle.

> > Other than that, there is not much differnce.  Retaining the ${}
> > format (implying using local properties) would be a benefit, in that
> > porting of antcall's would be easier.
>
> OK.
>
> > If attributes are local properties, there is an issue with shadowing
> > of user properties.
>
> Actually, shadowing any properties, but that's an issue of <local> in
> general.
>
> >> The only expression evaluation we have in Ant is property expansion
> >> and that would have been performed before the value of the
> >> attribute gets used - and exactly once - no matter how we implement
> >> it, wouldn't it?
> >
> > Not quite, the expansion gets performed just before a task is run,
> > and with macrodef and presetdef, the UE's are stored and (for
> > macrodef's case) copied. If the expansion is done by
> > macrodef/presetdef, it is difficult to stop the expansion being done
> > again later.
>
> At what stage?  I mean, is the a way that
>
> <property name="foo" value="${bar}"/>
> <property name="bar" value="baz"/>
>
> was defined and a text of ${foo} somewhere inside a macro (pr
> presetdefed task) would end up being resolved to baz?  I.e. is it
> possible that the same string undergoes macro expansion more than
> once?

An example:
<target name="s">
  <macrodef name="show">
   <element name="x"/>
   <sequential>
       <property name="inmacro" value="Set in macro"/>
       <x/>
   </sequential>
  </macrodef>

  <show>
    <x>
      <echo>inmacro is '${inmacro}'</echo>
    </x>
  </show>
</target>
This shows:

s:
inmacro is 'Set in macro'

It would be very difficult to stop this.

Peter

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to