// -------------------------------------------------------------------------
        /// Generates the function call prefix code fragment.
        ///
        /// @param memberInfo The member information of the function to call.
        /// @param node Visual script function call node.
        /// @return The code fragment to prepend to the function call.
        ///
        protected string FunctionCallPrefix(iCS_EditorObject node)
        {
            var result = new StringBuilder(32);

            if (IsStatic())
            {
                if (!GraphInfo.IsLocalType(VSObject))
                {
                    result.Append(ToTypeName(node.RuntimeType));
                    result.Append(".");
                }
            }
            else
            {
                var thisPort = GraphInfo.GetTargetPort(node);
                if (thisPort != null)
                {
//					result.Append(GetExpressionFor(thisPort));
//					result.Append(".");
                    // -- Prepend target code producer if optimized. --
                    if (myTargetCode != null)
                    {
                        result.Append(myTargetCode.GenerateBody(0));
                        result.Append(".");
                        return(result.ToString());
                    }
                    var producerPort = GraphInfo.GetProducerPort(thisPort);
                    var producerType = Context.GetRuntimeTypeFor(producerPort);
                    var producerCode = Context.GetCodeFor(producerPort);
                    if (producerCode is FunctionDefinitionParameter)
                    {
                        var producerPortName = GetNameFor(producerPort);
                        if (producerPortName == null || producerPortName == "null")
                        {
                            Debug.LogWarning("producer port is null: " + producerPort.CodeName);
                        }
                        result.Append(GetNameFor(producerPort));
                        result.Append(".");
                    }
                    else if (producerCode is LocalVariableDefinition)
                    {
                        var producerPortName = Parent.GetLocalVariableName(producerPort);
                        if (producerPortName == null || producerPortName == "null")
                        {
                            Debug.LogWarning("producer port is null: " + producerPort.CodeName);
                        }
                        result.Append(producerPortName);
                        result.Append(".");
                    }
                    else if (producerPort.IsOwner)
                    {
                        if (producerType == typeof(Transform))
                        {
                            result.Append("transform.");
                        }
                        else if (producerType == typeof(GameObject))
                        {
                            result.Append("gameObject.");
                        }
                    }
                    else if (producerPort != thisPort)
                    {
                        var desiredType     = VSObject.RuntimeType;
                        var desiredTypeName = ToTypeName(desiredType);
                        var isUpcastNeeded  = producerType != desiredType && iCS_Types.IsA(producerType, desiredType);
                        if (isUpcastNeeded)
                        {
                            result.Append("(");
                        }
                        var producerNode = producerPort.ParentNode;
                        if (producerNode.IsConstructor)
                        {
                            result.Append(GetNameFor(producerNode));
                        }
                        else
                        {
                            result.Append(GetNameFor(producerPort));
                        }
                        if (isUpcastNeeded)
                        {
                            result.Append(" as ");
                            result.Append(desiredTypeName);
                            result.Append(")");
                        }
                        result.Append(".");
                    }
                }
            }
            return(result.ToString());
        }