[Next] [Previous] [Up] [Top] [Contents] [Index]

3.3 Type and Signature Declarations

3.3.5 Implementation and Method Declarations

The syntax of method implementations is extended in the following way to accommodate static types:

method_decl	::=	impl_kind method_name
		    "(" [formals] ")" [type_decl] {pragma}
		    "{" (body | prim_body) "}" [";"]
impl_kind	::=	["method"] "implementation"		declares a method implementation
	|	"method"	declares a method signature and implementation
specializer	::=	[location] [type_decl]	specialized formal
	|	"@" ":" object	sugar for @object :object

Formal parameters of the method implementation and the result of the method implementation can be given explicit type declarations.

If the implementation keyword is used, the declaration introduces a new method implementation. If, however, the method keyword alone is used, the declaration is syntactic sugar for both a method implementation declaration and a signature declaration. A declaration of the form

method name(x1@obj1:type1, ..., xN@objN:typeN):typeR { body }

is syntactic sugar for the following two declarations:

signature name(type1, ..., typeN):typeR;
implementation name(x1@obj1:type1, ..., xN@objN:typeN):typeR { body }

As explained in section 2.2.1, if any of the obji are omitted, they default to any.

A formal in a method or field declaration can be specified with the x@:object syntax. This syntax is shorthand for x@object:typeof(object).