Bresticker, Shalom wrote: > Case 1 is clearly illegal. > > Cases 2 and 3 relate to situations where an identifier is referenced, > there is a preceding declaration in an outer scope, and there is a later > declaration in the same scope as the reference. The LRM is not clear > about this situation, and it was discussed in Mantis 1268, but not > resolved. > > What I have seen implemented in tools is to reference the outer > declaration until the point of the inner declaration and to reference > from there on the inner declaration, but this has indeed not been > explicitly specified yet. From 1809: For a reference to an identifier other than function or task call, the locally visible identifiers defined at the point of the reference in the current scope shall be searched. ... If no locally visible identifiers match, then the potentially locally visible identifiers defined prior to the point of the reference in the current scope shall be searched. ... If the reference is not found within the current scope, the next outer lexical scope shall be searched; ... The rules here are clearly based from "the point of reference" in the first part. Certainly that was the intent of all of the rules and all the special case rules for task and function "forward" resolution. The $unit rules in 1809 are also in sync: Next, the portion of the compilation-unit scope defined prior to the reference is searched So I think that 1809 makes cases 2 & 3 pretty clear -- the outer "i" is in fact the one that is used. The meaning of a (non-task/function) reference can change in the middle of a nested scope as they would in Daniel's examples. Gord. > Regards, > Shalom > > ------------------------------------------------------------------------ > *From:* owner-sv-bc@server.eda.org > [mailto:owner-sv-bc@server.eda.org] *On Behalf Of *Daniel Mlynek > *Sent:* Friday, September 05, 2008 10:36 AM > *To:* 'Arturo Salz'; 'Rich, Dave'; sv-bc@server.eda-stds.org > *Cc:* 'Mirek Forczek'; 'Piotr Winter'; 'Sergei Zaychenko' > *Subject:* RE: [sv-bc] declaration vs reference order issue > > THX for responce. > I'm getting used to that I get contradictory anwsers from each > vendor specialist;) Maybe this is also feature which need to be > explicitly addressed - as both of you cannot point LRM text > resolvinf the issue. If I can I would choose Arturo's point of view > is more in this case. But I've additional question: > case 1 - so for modules the rule : "A variable declaration shall > precede any simple reference (non-hierarchical) to that variable. " > is broken in below code - and it should return compiler error? > module top; > initial $display(i); > int i=123; > endmodule > case2; In below cases classes search rules that local identifier > always take precedence should not work and the results should be 123 > *) > module top; > int i=123; > module nest; > initial $display(i); > int i=456; > endmodule > endmodule > **) > module top; > int i=123; > function automatic f; > int j=i; > int i=456; > $display(j); > endfunction > > initial f(); > endmodule > > If so then this should surely be described - because this all is far > from obvious. > > DANiel > > --------------------------------------------------------------------- > Intel Israel (74) Limited > > This e-mail and any attachments may contain confidential material for > the sole use of the intended recipient(s). Any review or distribution > by others is strictly prohibited. If you are not the intended > recipient, please contact the sender and delete all copies. > > > -- > This message has been scanned for viruses and > dangerous content by *MailScanner* <http://www.mailscanner.info/>, and is > believed to be clean. -- -------------------------------------------------------------------- Gordon Vreugdenhil 503-685-0808 Model Technology (Mentor Graphics) gordonv@model.com -- This message has been scanned for viruses and dangerous content by MailScanner, and is believed to be clean.Received on Fri Sep 5 07:52:46 2008
This archive was generated by hypermail 2.1.8 : Fri Sep 05 2008 - 07:53:00 PDT