I wouldn't object to allowing any expression in a void cast but don't feel strongly about that. I do think that systf task calls are very important to permit and don't see any reason to disallow void functions. Gord Surya Pratik Saha wrote: > Hi Gordon, > function_subroutine_call is part of 'primary' in the BNF. Do you want > then void function call is an expression? Please do not compare with > 'C', as 'C' does not distinguish a statement and expression. In 'C', you > can simply write > 1 + 2; > which SV does not allow. So as per SV, any statement should not be void > casted, hence void function call too should not be allowed like task > enable. > > Regards > Surya > > > > -------- Original Message -------- > Subject: Re:[sv-bc] void casting on void function call > From: Gordon Vreugdenhil <gordonv@model.com> > To: Surya Pratik Saha <spsaha@cal.interrasystems.com> > Cc: "sv-bc@eda-stds.org" <sv-bc@eda-stds.org> > Date: Thursday, August 30, 2007 8:57:46 PM >> >> The question is whether the intent of "function_subroutine_call" >> is restricted to "function's that are expressions". There >> is no real reason to make that restriction; C for example >> allows void casts of void functions as well. >> >> If you want to argue this too narrowly, you'll argue yourself >> into a bigger problem -- grammatically "function_subroutine_call" >> is any call (including a task). The semantic intent is in the >> "function" prefix. But "function_subroutine_call" isn't a >> system_tf_call so one could argue that void'($bits(x)) would >> be illegal. Clearly that isn't the intent once you consider >> all the systf file I/O cases where one wants to through away >> return codes. >> >> I don't see any reason to not interpret this in the most >> permissive way possible. I'd even support allowing (at least) >> systf task calls since that would be a great way for real >> user code to insulate themselves against possible variations >> in vendor implementations and/or LRM versions. A great >> example of that is with "$system" for which there is variation >> in implementation. Allowing a systask call in a void cast >> would allow user code to have: >> void'($system("...")); >> as completely portable code even among different vendors. >> >> Gord >> >> Surya Pratik Saha wrote: >>> Hi, >>> As per LRM-BNF, void casted statment is: >>> >>> *Subroutine_call_statement ::= subroutine_call; >>> | void'(function_subroutine_call);* >>> >>> And for void function, LRM mentions following text (page no. 156 of >>> IEEE 1800). >>> >>> *Function calls are expressions unless of type void, which are >>> statements: >>> a = b + myfunc1(c, d); //call myfunc1 (defined above) as an expression >>> myprint(a); //call myprint (defined below) as a statement >>> function void myprint (int a); >>> ... >>> endfunction >>> >>> *Can **function_subroutine_call **contain void function call? I don't >>> think so, as void function call is a statement. But some simulators >>> don't think like that and passes the following case: >>> >>> module top; >>> initial begin >>> void'(f()); >>> end >>> function void f; >>> return ; >>> endfunction >>> endmodule >>> >>> Any expert comment? >>> >>> -- >>> Regards >>> Surya >>> >>> >>> -- >>> 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 Thu Aug 30 08:56:27 2007
This archive was generated by hypermail 2.1.8 : Thu Aug 30 2007 - 08:56:39 PDT