CallCommon is contained by Go, Defer and Call to hold the common parts of a function or method call.

Each CallCommon exists in one of two modes, function call and interface method invocation, or "call" and "invoke" for short.

1. "call" mode: when Method is nil (!IsInvoke), a CallCommon represents an ordinary function call of the value in Value, which may be a *Builtin, a *Function or any other value of kind 'func'.

Value may be one of:

(a) a *Function, indicating a statically dispatched call
    to a package-level function, an anonymous function, or
    a method of a named type.
(b) a *MakeClosure, indicating an immediately applied
    function literal with free variables.
(c) a *Builtin, indicating a statically dispatched call
    to a built-in function.
(d) any other value, indicating a dynamically dispatched
    function call.

StaticCallee returns the identity of the callee in cases (a) and (b), nil otherwise.

Args contains the arguments to the call. If Value is a method, Args[0] contains the receiver parameter.

Example printed form:

t2 = println(t0, t1)
go t3()
defer t5(...t6)

2. "invoke" mode: when Method is non-nil (IsInvoke), a CallCommon represents a dynamically dispatched call to an interface method. In this mode, Value is the interface value and Method is the interface's abstract method. Note: an abstract method may be shared by multiple interfaces due to embedding; Value.Type() provides the specific interface used for this call.

Value is implicitly supplied to the concrete method implementation as the receiver parameter; in other words, Args[0] holds not the receiver but the first true argument.

Example printed form:

t1 = invoke t0.String()
go invoke t3.Run(t2)
defer invoke t4.Handle(...t5)

For all calls to variadic functions (Signature().Variadic()), the last element of Args is a slice.