Inheritance: Expression, IArgumentProvider
 private void CreatePropertyExpressions()
 {
     var name = Expression.Constant(_property.Name, typeof(string));
     _containsKey = Expression.Call(_param, DictionaryContainsKeyMethod, name);
     _nameProperty = Expression.Property(_obj, _property);
     _itemProperty = Expression.Property(_param, DictionaryIndexerProperty, name);
 }
        protected override Expression VisitIndex(IndexExpression node)
        {
            if (node.Arguments.Any(e => !(e is ConstantExpression))) {
                throw new NotSupportedException("Index expressions are only supported with constants.");
            }

            return base.VisitIndex(node);
        }
Example #3
0
 internal static Index Index(IndexExpression expression)
 {
     return new Index()
     {
         Object = Serialize(expression.Object),
         Indexer = expression.Indexer.Null(p => PropertyRef.Serialize(p)),
         Arguments = expression.Arguments.Select(Serialize).ToArray(),
     }.Apply(n => n.Type = TypeRef.Serialize(expression.Type));
 }
        protected override Expression VisitIndex(IndexExpression node)
        {
            var args = Visit(node.Arguments);
            foreach(var arg in args)
                AddParameter(arg);

            var obj = Visit(node.Object);
            AddParameter(obj);
            return null;
        }
		protected override Expression VisitIndex(IndexExpression node)
		{
			return ProtectFromNull(node, node.Object);
		}
 protected override Expression VisitIndex(IndexExpression node)
 {
     throw new NotSupportedException();
 }
 public IndexExpressionProxy(IndexExpression node) {
     _node = node;
 }
Example #8
0
        public string TranslateIndex(IndexExpression expression, bool setter = false)
        {
            var target = Translate(expression.Object);
            var args = expression.Arguments.Select(Translate).ToArray();
            var method = setter ? expression.Indexer.SetMethod : expression.Indexer.GetMethod;

            var result = TryTranslateMethodCall(target, args, method);
            if (result != null) return result;
            return target + "[" + args.Single() + "]()";
        }
    public virtual bool IsEvaluatableIndex (IndexExpression node)
    {
      ArgumentUtility.CheckNotNull ("node", node);

      return true;
    }
Example #10
0
        private Variable VisitIndex(IndexExpression node)
        {
            var args = new List<Variable>
            {
                node.Object != null ? Visit(node.Object) : Variable.CreateConstant(typeof (object), null),
                node.Indexer != null
                    ? Variable.CreateConstant(typeof (string), node.Indexer.Name)
                    : Variable.CreateConstant(typeof (string), "")
            };



            args.AddRange(VisitExpressions(node.Arguments.ToArray()));

            return ComputeTempVar(node, OpCode.Index, args.ToArray());

            //if (node.Object != null)
            //{
            //    this.Visit(node.Object);
            //}
            //else
            //{
            //    this.Out(node.Indexer.DeclaringType.Name);
            //}
            //if (node.Indexer != null)
            //{
            //    this.Out(".");
            //    this.Out(node.Indexer.Name);
            //}
            //this.VisitExpressions<Expression>('[', node.Arguments, ']');
        }
Example #11
0
 public IndexExpressionProxy(IndexExpression node)
 {
     ContractUtils.RequiresNotNull(node, nameof(node));
     _node = node;
 }
 private QueryNode VisitIndex(IndexExpression expression)
 {
     var queryNode = Visit(expression.Object);
     if (!(queryNode is FieldNode))
         throw new NotSupportedException(string.Format("Unsupported expression node type: {0}", (object)expression.NodeType));
     return queryNode;
 }
 public IndexExpressionProxy(IndexExpression node)
 {
     ContractUtils.RequiresNotNull(node, nameof(node));
     _node = node;
 }
 protected virtual Expression VisitIndex(IndexExpression e) {
   return e;
 }
		protected virtual Expression VisitIndex(IndexExpression index)
		{
			IEnumerable<Expression> args = this.VisitExpressionList(index.Arguments);
			Expression expr = this.Visit(index.Object);
			if (args != index.Arguments || expr != index.Object)
			{
				return Expression.MakeIndex(expr, index.Indexer, args);
			}
			return index;
		}
		}//end static method
		internal XElement IndexExpressionToXElement(IndexExpression e)
		{
			object value;
			string xName = "IndexExpression";
			object[] XElementValues = new object[6];
			value = ((IndexExpression)e).NodeType;
			XElementValues[0] = GenerateXmlFromProperty(typeof(System.Linq.Expressions.ExpressionType),
				"NodeType", value ?? string.Empty);
			value = ((IndexExpression)e).Type;
			XElementValues[1] = GenerateXmlFromProperty(typeof(System.Type),
				"Type", value ?? string.Empty);
			value = ((IndexExpression)e).Object;
			XElementValues[2] = GenerateXmlFromProperty(typeof(System.Linq.Expressions.Expression),
				"Object", value ?? string.Empty);
			value = ((IndexExpression)e).Indexer;
			XElementValues[3] = GenerateXmlFromProperty(typeof(System.Reflection.PropertyInfo),
				"Indexer", value ?? string.Empty);
			value = ((IndexExpression)e).Arguments;
			XElementValues[4] = GenerateXmlFromProperty(typeof(System.Collections.ObjectModel.ReadOnlyCollection<System.Linq.Expressions.Expression>),
				"Arguments", value ?? string.Empty);
			value = ((IndexExpression)e).CanReduce;
			XElementValues[5] = GenerateXmlFromProperty(typeof(System.Boolean),
				"CanReduce", value ?? string.Empty);
			return new XElement(xName, XElementValues);
		}//end static method
Example #17
0
 private static string VisitIndex(IndexExpression node)
 {
     throw new NotImplementedException();
 }
            protected override Expression VisitIndex(IndexExpression node)
            {
                var num = ExpressionHelper.GetIndexerCount(node);

                var index = context.IndexerParameters.ElementAt(num);

                return Expression.MakeIndex(Visit(node.Object), node.Indexer, new[] { index });
            }