private void ValidateLambdaParameter(IExpressionNode node) { var expressionNode = node as IMemberExpressionNode; if (expressionNode == null || expressionNode.Target != null) throw BindingExceptionManager.InvalidExpressionParser(node.ToString(), Tokenizer, Expression); }
private object GetConstantValue(IExpressionNode argument) { var node = argument as IConstantExpressionNode; if (node != null) return node.Value; var name = argument.TryGetMemberName(false, false); if (name == null) throw BindingExceptionManager.InvalidExpressionParser(argument.ToString(), Tokenizer, Expression); return name; }
private ConcreteHiOrderFunctionWithSyntaxNode(IExpressionNode source, FunnyType returnType, FunnyType[] argTypes) : base(source.ToString(), returnType, argTypes) { _source = source; }
public override string ToString() { return(ProdName + " ::= " + Expression.ToString() + " ."); }
private Action<IDataContext> GetBindingValueSetterMain(IExpressionNode node, Action<IDataContext, object> setSimpleValue, Action<IDataContext, Func<IDataContext, object>> setComplexValue, bool useBindingForMember) { var constantNode = node as IConstantExpressionNode; if (constantNode != null) { object value = constantNode.Value; return context => setSimpleValue(context, value); } var nodes = new List<IExpressionNode>(); var members = new List<string>(); string memberName = node.TryGetMemberName(true, true, nodes, members); var resourceExpression = nodes[0] as ResourceExpressionNode; if (memberName != null) { if (resourceExpression != null) { if (resourceExpression.Dynamic) return context => setComplexValue(context, d => GetResourceObject(memberName, d)); return context => setSimpleValue(context, GetResourceObject(memberName, context)); } if (!useBindingForMember) return context => setSimpleValue(context, memberName); node = RelativeSourceExpressionNode.CreateBindingContextSource(memberName); } var methodCall = nodes[0] as IMethodCallExpressionNode; if (methodCall == null) { var relativeSrc = node as IRelativeSourceExpressionNode; if (relativeSrc == null) throw BindingExceptionManager.UnknownIdentifierParser(node.ToString(), Tokenizer, Expression); return context => { var src = BindingExtensions.CreateBindingSource(relativeSrc, context.GetData(BindingBuilderConstants.Target, true), null); setComplexValue(context, d => src.GetCurrentValue()); }; } resourceExpression = methodCall.Target as ResourceExpressionNode; if (resourceExpression == null || methodCall.Arguments.Any(expressionNode => !(expressionNode is IConstantExpressionNode))) throw BindingExceptionManager.UnknownIdentifierParser(node.ToString(), Tokenizer, Expression); var method = methodCall.Method; var args = methodCall.Arguments.ToArrayEx(ex => ((IConstantExpressionNode)ex).Value); var memberPath = members.Count == 0 ? null : BindingExtensions.MergePath(members); if (resourceExpression.Dynamic) return context => setComplexValue(context, d => InvokeMethod(d, method, args, memberPath)); return context => setSimpleValue(context, InvokeMethod(context, method, args, memberPath)); }