Re: symbol resolution (was:EuCOM : Attn Matt : String Return Value)

new topic     » goto parent     » topic index » view thread      » older message » newer message

Matt Lewis wrote:
> 
> CChris wrote:
> > 
> > 
> > Does the include tree also contain the direct ancestors? If not, there are
> > some
> > issues with this scheme, which is quite common:
> > }}}
<eucode>
> -- file1.e
> include third.e
> global integer n_also_in_third
> n_also_in_third=n_init() -- ok, this g.s. shadows anything in third.e
> include file2.e
> --...
> > 
> -- in file2.e
> integer my_var
> my_var=n_also_in_third 
> -- could produec an error, while   
> -- file1.e::n_also_in_third is obviously being targeted
> </eucode>
{{{

> > As the name suggests, n_also_in_third is also a global symbol defined in
> > third.e.
> > I'd consider it a problem if this isn't properly handled.
> 
> No, it doesn't climb back up the tree.  I can see the logic of it, but I'm
> not sure I agree with this.  Is it really that common?  I know that I've 
> occasionally been guilty of this.  
> 

How do you have reliable two way communication between a server and a client
then? So it is common as soon as your lib/app is not organised in a pyramidal
way. By "reliable" I mean, not disrupted by a third party file included alongside
a large library.

>  From the perspective of file2.e, it's not obvious that the correct resolution
> should be from file1.e. 

Huh?
A parent/ancestor is a more likely target than a cousin, don't you think?

> I think it might be better to give an error in
> this case.  The resolution would be to include the file explicitly.

Which means file2.e should include file1.e, even though file1.e includes
file2.e? It makes sense, but will such a sea change - allowing circular includes
- be accepted? I would.

> 
> Continuing my train of thought from the response to Pete, I guess a legitimate
> question to be asked would be whether we should let symbols in directly
> included files mask those from lower down in the tree?  Assuming, of course,
> that no namespace identifier is used, and there is only one possible symbol.
> 

Definitely yes, that's the only way to extend routines that are not builtins -
something which is hard to do currently, other than using clumsy call_func/proc()
calls.
One could always use namespacing to access the shadowed symbols.

> I'm also starting to think that any symbol resolution from beyond the 
> include tree should generate a warning.
> 

It doesn't hurt, agreed.

> Matt
CChris

new topic     » goto parent     » topic index » view thread      » older message » newer message

Search



Quick Links

User menu

Not signed in.

Misc Menu