5.6.13.1 Argument Lists

An argument list represents an ordered list of positional arguments and a set of named arguments that are used to parameterize an expression.

 argument-list = [positional-or-named-argument-list] 
 positional-or-named-argument-list = *(positional-argument ",") required-positional-argument 
 positional-or-named-argument-list =/   *(positional-argument ",") named-argument-list 
 positional-argument = [argument-expression] 
 required-positional-argument = argument-expression 
 named-argument-list = named-argument *("," named-argument) 
 named-argument = unrestricted-name ":""=" argument-expression 
 argument-expression = ["byval"] expression 
 argument-expression =/  addressof-expression 

Static semantics. An argument list is composed of positional arguments and named arguments.

If <positional-or-named-argument-list> is omitted, the argument list is said to represent an empty argument list and has no positional arguments and no named arguments.

Each <positional-argument> or <required-positional-argument> represents a specified positional argument. If a specified positional argument omits its <argument-expression>, the specified positional argument is said to be omitted. Each specified positional argument consists of a position based on its order in the argument list from left to right, as well as an expression from its <argument-expression>, if not omitted.

Each <named-argument > represents a named argument. Each named argument consists of a name value from its <unrestricted-name>, as well as an expression from its <argument-expression>.

The "byval" keyword flags a specific argument as being a ByVal argument. It is invalid for an argument list to contain a ByVal argument unless it is the argument list for an invocation of an external procedure.