RE: [sv-ec] protected/local, virtual, static, extern question

From: Rich, Dave <Dave_Rich_at_.....>
Date: Mon Sep 24 2007 - 15:57:37 PDT
Don,
 
This is not correct. The class qualifier 'static' does not affect memory allocation of the function. It means the function can only reference static members of the class. Memory allocation of the function and variables inside the function are affected by the other 'static' keyword.
 
Dave
 

________________________________

From: Don Mills [mailto:mills@lcdm-eng.com]
Sent: Mon 9/24/2007 3:30 PM
To: Rich, Dave
Cc: sv-ec@server.eda.org
Subject: Re: [sv-ec] protected/local, virtual, static, extern question


To elaborate further on Dave's final statement about "static", are the following two statements correct?

function static void foo();

only means that *variables* declared inside foo are static by default (and arguments may not be ref).  The function itself is not static. That is, memory is allocated for the function for each instantiation of the class, and the method may operate on automatic values.

static function void foo();

means that the function itself is static. Memory for the function is allocated once, regardless of how many times the class is instantiated, and the method may not operate on automatic values.

Does this sound reasonable?



Rich, Dave wrote: 

	Don,

	 

	The BNF item { method_qualifier } means repetition 0 or more times, and no order is implied. (but footnote limits it to a range of 0-1 times) The BNF does not allow extern to anywhere but where it shows in the production, at the beginning.

	 

	The use of the keyword static as a class_item_qualifier is independent of the use of static as part of a task or function declaration, so its use before or after the keyword function has different semantics.

	 

	Dave

	 

	 

	
________________________________


	From: owner-sv-ec@server.eda.org [mailto:owner-sv-ec@server.eda.org] On Behalf Of Don Mills
	Sent: Thursday, September 20, 2007 4:40 PM
	To: sv-ec@server.eda.org
	Subject: [sv-ec] protected/local, virtual, static, extern quesiton

	 

	
	Does the ordering of protected/local and virtual matter? 
	
	That is,
	virtual protected function void blah();
	vs.
	protected virtual function void blah();
	
	It appears that at least one vendor doesn't seem to care.
	
	As for the other keywords, I believe that extern has to go before everything.
	Are there any ordering requirements on static?
	
	>From the LRM:
	class_method ::=
	{ method_qualifier } task_declaration
	| { method_qualifier } function_declaration
	| extern { method_qualifier } method_prototype ;
	| { method_qualifier } class_constructor_declaration
	| extern { method_qualifier } class_constructor_prototype
	
	method_qualifier7 ::=
	virtual
	| class_item_qualifier
	
	class_item_qualifier7 ::=
	static
	| protected
	| local
	
	
	footnote #7) In any one declaration, only one of protected or local is allowed, only one of rand or randc is
	allowed, and static and/or virtual can appear only once.
	
	
	
	

	-- 
	==========================================================
	Don Mills
	mills@lcdm-eng.com
	www.lcdm-eng.com <http://www.lcdm-eng.com/> 
	==========================================================

	-- 
	This message has been scanned for viruses and 
	dangerous content by MailScanner <http://www.mailscanner.info/> , 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 Sep 24 15:58:14 2007

This archive was generated by hypermail 2.1.8 : Mon Sep 24 2007 - 15:58:30 PDT