Re: Scoping of options and variables

"Toman_Vojtech@emc.com" <Toman_Vojtech@emc.com> writes:
> I just encountered a small problem with options and variables.
>
> Section 3.2 says: "The scope of option and variable names is determined
> by where they are declared. When an option is declared with p:option (or
> a variable with p:variable), unless otherwise specified, its scope
> consists of the sibling elements that follow its declaration and the
> descendants of those siblings."
>
> So what happens in this case:
>
> <p:pipeline version="1.0">
>     <p:option name="foo" select="'bar'"/>
>     <p:variable name="foo" select="'baz'"/>
>     <p:identity/>
> </p:pipeline>
>
> Should it run (with the variable "shadowing" the option value), or
> should you get a static error? In our implementation, you currently get
> err:XS0004: "It is a static error to declare two or more options on the
> same step with the same name." But I don't think that err:XS0004
> describes the essence of the problem really well.

I think that should be an error. I think we should generalize
err:XS0004 to say that it's an error to have two or more sibling
option or variable declarations that attempt to declare the same name.

> And what about this case:
>
> <p:pipeline version="1.0">
>   <p:option name="foo" select="'bar'"/>
>   <p:group>
>     <p:variable name="foo" select="'baz'"/>
>     <p:identity/>
>   </p:group>
> </p:pipeline>
>
> Should it fail, too? Or does the variable "shadow" the option? I just
> found out that in our implementation, that is exactly what happens at
> the moment.

Do we all agree that in this case:

<p:pipeline version="1.0">
  <p:variable name="foo" select="'bar'"/>
  <p:group>
    <p:variable name="foo" select="'baz'"/>
    <p:identity/>
  </p:group>
</p:pipeline>

Shadowing is the expected (and correct) behavior?

> I think the behavior should be the same both of the cases above: either
> a static error (do we need a new one or is loosening the description of
> err:XS0004 enough?), or it should just work.
>
> What do you think?

We could add a rule that says that variable names are never allowed
to shadow option names, but I'm not sure it's worth the effort.

                                        Be seeing you,
                                          norm

-- 
Norman Walsh <ndw@nwalsh.com> | Everything has been said before, but
http://nwalsh.com/            | since nobody every listens we have to
                              | keep going back and beginning all over
                              | again.--André Gide

Received on Wednesday, 10 February 2010 21:22:55 UTC