/// <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); }
/// <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); }