calls-clause-seq ::= calls-clause [ calls-clause ] ... calls-clause ::=calls
[redundantly
] function-names;
function-names ::=everything
|nothing
| function-name [,
function-name ] ... function-name ::= term
A calls-clause says what functions may be directly called by a correct implementation of the function being specified. This is helpful for documenting the calling pattern among virtual functions, which is needed to write subclasses [Kiczales-Lamping92] [Steyaert-etal96]. The term that represents a function-name can use the values of variables in either the pre- or post-state to access functions. The following is an example of the use of the calls-clause.
// @(#)$Id: CallsExample.lh,v 1.1 1999/03/03 20:24:29 leavens Exp $ class hclass { public: static int sfun(int i); virtual int h(); }; class CallsExample { public: hclass dmember; virtual void mymethod(); virtual void ex(hclass vparam, hclass & rparam, hclass *p); //@ behavior { //@ modifies *p; //@ calls vparam.h, rparam\any.h, (*p)^.h, dmember\any.h, //@ hclass::sfun, mymethod; //@ } };
This calls-clause says that the member function ex
of the class
CallsExample
may call
method h
found in: the value parameter vparam
,
the value of the reference parameter rparam
in either the
pre- or post-state,
the pre-state value of the pointer variable *p
,
and either the pre- or post-state value of the data member dmember
.
It may also call the static function hclass::sfun
, and mymethod
.
[[[Detailed semantics to be written.]]]
Go to the first, previous, next, last section, table of contents.