Esempio n. 1
0
        /// <summary>
        ///     Validates that an expression can be passed into the parameter slot of a function.
        ///     IE: That the passed expression matches up with or can be converted to the parameter type.
        /// </summary>
        /// <param name="parameterSignature">The parameter definition.</param>
        /// <param name="parameterExpressionPassed">The expression the user has attempting to pass into the parameter.</param>
        /// <returns><c>true</c> if <paramref name="parameterExpressionPassed"/> can be passed to the given parameter signature.</returns>
        /// <exception cref="ArgumentNullException"><paramref name="parameterSignature"/> or <paramref name="parameterExpressionPassed"/> is <c>null</c>.</exception>
        public bool ValidateFunctionParameter(
            LSLParameterSignature parameterSignature,
            ILSLReadOnlyExprNode parameterExpressionPassed)
        {
            if (parameterSignature == null)
            {
                throw new ArgumentNullException("parameterSignature");
            }
            if (parameterExpressionPassed == null)
            {
                throw new ArgumentNullException("parameterExpressionPassed");
            }

            if (parameterExpressionPassed.HasErrors)
            {
                return(false);
            }

            if (parameterSignature.Variadic && parameterSignature.Type == LSLType.Void)
            {
                return(true);
            }


            var left = new LSLDummyExpr
            {
                Type           = parameterSignature.Type,
                ExpressionType = LSLExpressionType.ParameterVariable
            };


            return
                (ValidateBinaryOperation(left, LSLBinaryOperationType.Assign,
                                         parameterExpressionPassed).IsValid);
        }
Esempio n. 2
0
        /// <summary>
        ///     Validates that an expression of some type can be returned from a function given the
        ///     functions return type.
        /// </summary>
        /// <param name="returnType">The return type of the function the expression is being returned from.</param>
        /// <param name="returnedExpression">The expression attempting to be returned.</param>
        /// <returns>True if the expression is allowed to be returned from the function given the expression type and return type.</returns>
        public bool ValidateReturnTypeMatch(LSLType returnType, ILSLReadOnlyExprNode returnedExpression)
        {
            var left = new LSLDummyExpr
            {
                Type           = returnType,
                ExpressionType = LSLExpressionType.LocalVariable
            };

            return
                (ValidateBinaryOperation(left, LSLBinaryOperationType.Assign, returnedExpression).IsValid);
        }