Re: [sv-ec] Follow-up from last call -- legality of virtual/pure virtual overrides

From: Daniel Mlynek <danielm@aldec.com.pl>
Date: Mon Jun 27 2011 - 23:54:55 PDT

c::f is virtual so call to f is a call to f function in current object.
In yours case e::f has to be called there is no other option.
I do not understand why " d::f() must have a valid override of c::f() "
d::f will never be called as we cannot create object of c type.
If user will try to call super.f in e::f or d::f in e::f then runtime
error can be printed that pure function was called.

DANiel

On 6/27/2011 6:32 PM, Tipp, Brandon P wrote:
> Given the code below, what would you expect the behavior to be?
>
> initial begin
> c c_i;
> e e_i;
> e_i = new();
> c_i = e_i;
> c_i.f(); // Does this call c::f() or e::f()?
> end
>
> Given the behavior you expect below, if the above code would call c::f(), then there'd be no reason to expect d::f() to prototype a valid override of c::f(). If the above would call e::f(), then d::f() must have a valid override of c::f().
>
> If the code below is legal, then the behavior above needs to be clarified.
>
> -Brandon
>
> -----Original Message-----
> From: owner-sv-ec@eda.org [mailto:owner-sv-ec@eda.org] On Behalf Of Daniel Mlynek
> Sent: Sunday, June 26, 2011 11:57 PM
> To: neil.korpusik@oracle.com
> Cc: Gordon Vreugdenhil; SV_EC List
> Subject: Re: [sv-ec] Follow-up from last call -- legality of virtual/pure virtual overrides
>
> I can see a situation when smbd want to discard the implementation of a
> base class method in his class - so when extending his class new body of
> method need to be given.
> I do not see reason to block below code (it can be implemented, it has
> reasonable interpretation)
>
> class c;
> virtual function void f(int a=0);$display("%m"); endfunction
> endclass
> virtual class d extends c;//virtual here is a must
> pure virtual function void f(int a=0);
> endclass
> class e extends d;
> virtual function void f(int a=0);
> $display("%m");
> //super.f; //calling super f is illegal here as it has no
> implementation
> endfunction
> endclass
>
>
> DANiel
>
>
> On 6/25/2011 12:55 AM, Neil Korpusik wrote:
>> It is my understanding that pure virtual methods are only allowed within
>> an abstract base class. That would make class d in your example illegal.
>> function f in class d can't be declared pure.
>>
>> If we change the example to be the following, I would still say it is
>> illegal. In this version, abstract base class d is changing function f
>> from
>> a virtual to a pure virtual function. Since the definition of pure
>> virtual
>> is that there is no implementation, I don't see how this could be legal.
>> It would be very confusing to say that the new definition of f in d
>> overrides what is in c to now not have an implementation.
>>
>> module top;
>> virtual class c;
>> virtual function void f(int a); endfunction
>> endclass
>> virtual class d extends c;
>> pure virtual function void f(int a);
>> endclass
>> endmodule
>>
>>
>>
>> Neil
>>
>>
>>
>> On 06/24/11 09:10, Gordon Vreugdenhil wrote:
>>> This is just to follow-up the questions that I raised in the last EC
>>> call.
>>>
>>> Is the following legal:
>>>
>>> module top;
>>> virtual class c;
>>> virtual function void f(int a); endfunction
>>> endclass
>>> class d extends c;
>>> pure virtual function void f(int a);
>>> endclass
>>> endmodule
>>>
>>> There are a couple of questions about the legality:
>>> 1) can "c" provide an implementation for a later
>>> "pure virtual" prototype?
>>> 2) if (1) is permitted, can "d" be non-virtual?
>>> 3) if (1) is not permitted, can the "f" in some
>>> further extension of "d" call "super.f"?
>>>
>>> If the "f" in "d" is supposed to "hide" the virtual
>>> definition in "c" (which I find very troublesome),
>>> is the prototype permitted to change? i.e. can you
>>> then have:
>>> pure virtual function void f(reg a);
>>> as the prototype in "d" -- "hiding" generally means
>>> the incompatibility is Ok.
>>>
>>> None of these situations are clearly addressed by
>>> the current rules and definitely impact how we talk
>>> about various interface class / class interactions.
>>>
>>> Gord.
>>>
> --
> This message has been scanned for viruses and
> dangerous content by MailScanner, and is
> believed to be clean.
>
>

-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
Received on Mon Jun 27 23:54:42 2011

This archive was generated by hypermail 2.1.8 : Mon Jun 27 2011 - 23:54:47 PDT