/// <summary> Pass actualParameters to Variables. </summary>
        public void EnsureParametersInitialized(NameObjectCollection additionalParameters)
        {
            if (_parametersInitialized)
            {
                return;
            }

            NameObjectCollection callerVariables = (_function.ParentStep != null) ? _function.ParentStep.Variables : null;

            callerVariables = NameObjectCollection.Merge(callerVariables, additionalParameters);

            if (_actualParameters.Length > _parameterDeclarations.Length)
            {
                throw new ApplicationException(
                          string.Format("{0} parameters provided but only {1} were expected.", _actualParameters.Length, _parameterDeclarations.Length));
            }

            for (int i = 0; i < _parameterDeclarations.Length; ++i)
            {
                if (i < _actualParameters.Length && _actualParameters[i] != null)
                {
                    WxeVariableReference varRef = _actualParameters[i] as WxeVariableReference;
                    if (callerVariables != null && varRef != null)
                    {
                        _parameterDeclarations[i].CopyToCallee(varRef.Name, callerVariables, _variables);
                    }
                    else
                    {
                        _parameterDeclarations[i].CopyToCallee(_actualParameters[i], _variables);
                    }
                }
                else if (_parameterDeclarations[i].Required)
                {
                    throw new ApplicationException("Parameter '" + _parameterDeclarations[i].Name + "' is missing.");
                }
            }

            _parametersInitialized = true;
        }