f(a,b,c)We can assume that the types of

- (1)
- If
`T`has a function whose signature matches that of`f`, then we use this function for the call`f(a,b,c)`. - (2)
- Otherwise, we assume that
`f`is a creator. So, we need the return type of`f(a,b,c)`. Observe that the only rule generating a*FunctionCall*is*RightValue**FunctionCall**RightValue*is generated by the rules*Statement***return***RightValue**Assignment**LeftValue***:=***RightValue**RightValue***[***RightValueSequence***]***RightValueSequence**RightValue**RightValueSequence**RightValueSequence***,***RightValue**RightValue*can always be deduced from its context without evaluating this*RightValue*:- The type of
*RightValue*in**return***RightValue*is the return type of the function where this return-statement appears. - The type of
*RightValue*in*LeftValue***:=***RightValue*must be that of*LeftValue*, which is known after visiting the node corresponding to*LeftValue*. - The type of
*RightValue*in*RightValueSequence***,***RightValue*is that of the array being defined.

`S`be the return-type of`f(a,b,c)`. If the domain`S`has a function whose signature matches that of`f`, then we use this function for the call`f(a,b,c)`. Otherwise, we report*error*. - The type of

2004-12-01