RE: [sv-bc] name resolution question about :: names

From: Francoise Martinolle <fm_at_.....>
Date: Fri Oct 17 2008 - 08:15:02 PDT
 
Thanks.
I agree with your additional comments
-----Original Message-----
From: Gordon Vreugdenhil [mailto:gordonv@model.com] 
Sent: Friday, October 17, 2008 10:14 AM
To: Francoise Martinolle
Cc: sv-bc@eda.org; sv-ec@eda.org
Subject: Re: [sv-bc] name resolution question about :: names

I agree with all of your examples.

One quick note -- in the last example, it is immaterial that
    typedef class p;
says "class".  If it were just "typedef p;" you would still get the same
result.  In either case, due to the use of "::" on the forward type, if
the actual type did not end up being a class with an appropriately typed
property "a", it would be an error.

Gord.


Francoise Martinolle wrote:
> There is a very short section in the LRM  talking about :: names which

> can be package based names, or classes based names.
>  
> It says:
> *23.7.1 Names with package or class scope resolution operator 
> prefixes*
> 
> A name with a package or class scope resolution prefix (::) shall 
> always resolve in a downwards manner
> 
> and shall never be subject to the upwards resolution rules in 23.8. 
> The package or class prefix shall be
> 
> resolved using the normal resolution rules.
> 
>  
> 
> I am interpreting this as a :: name is not like a hierarchical
reference.
> 
> The prefix name is resolved as it it were a simple identifier, that 
> means that the name
> 
> is searched in the current scope for a declaration of the same name 
> that is declared
> 
> prior to the reference. If such a name is found, then its declaration 
> is bound to the prefix, the prefix
> 
> name becomes the search for the next name component. If the next name 
> is not found, that is an error
> 
> and search ends.
> 
> Let's see if we agree on the following examples.
> 
> example 1:
> 
> package p;
> 
> int a;
> 
> endpackage
> 
> module top;
> 
> parameter p = 1;
> 
> initial p::a = 0; // error
> 
> endmodule
> 
> example 2:
> 
> package p;
> 
> int a;
> 
> endpackage
> 
> module top;
> 
> initial p::a = 0;  // this is package p, variable a
> 
> parameter p = 1;
> 
> endmodule
> 
>  
> 
> In ex (1) , p::a resolves the first name component to the parameter p 
> and an error
> 
> is reported for the second name component. In ex(2), p::a resolved to 
> the package reference to a.
> 
>  
> 
> Do we agree?
> 
> Another question regarding classes and packages.
> 
> ex(3)
> 
> package p;
> 
> int a;
> 
> endpackage
> 
> module top;
> 
> class p;
> 
> int a;
> 
> endclass
> 
> initial p::a = 1; // this is a class scope
> 
> endmodule
> 
>  
> 
> ex (4)
> 
> package p;
> 
> int a;
> 
> endpackage
> 
> module top;
> 
> initial p::a = 1; // this is a package reference to a
> 
> class p;
> 
> static int a;
> 
> endclass
> 
> endmodule
> 
> ex (4)
> 
> package p;
> 
> int a;
> 
> endpackage
> 
> module top;
> 
> typedef class p;
> 
> initial p::a = 1; // this is a class scope to a
> 
> class p;
> 
> static int a;
> 
> endclass
> 
> endmodule
> 
> 
> --
> 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 Oct 17 08:16:21 2008

This archive was generated by hypermail 2.1.8 : Fri Oct 17 2008 - 08:17:00 PDT