示例#1
0
 public override Expression DoResolve(ParseContext parseContext)
 {
     Expression = Expression.Resolve(parseContext);
     return this;
 }
示例#2
0
 public override Expression DoResolve(ParseContext parseContext)
 {
     _initializer = _initializer.Resolve(parseContext);
     return(this);
 }
示例#3
0
 public override Expression DoResolve(ParseContext parseContext)
 {
     return((_expression == null) ? this : _expression.Resolve(parseContext));
 }
示例#4
0
        public override Expression DoResolve(ParseContext parseContext)
        {
            _target = _target.Resolve(parseContext);
            _arguments.Resolve(parseContext);

            var typeExpression = _target as TypeExpression;

            if (typeExpression != null)
            {
                var indexers = typeExpression.Type
                               .GetProperties(BindingFlags.Static | BindingFlags.Public)
                               .Where(o => o.Name == "Item")
                               .Select(o => o.GetGetMethod(false))
                               .Where(o => o.GetParameters().Length != 0)
                               .ToArray();

                if (indexers.Length == 0)
                {
                    parseContext.ReportError(
                        CompilerErrors.MissingIndexerValue,
                        Span,
                        typeExpression.GetSignatureForError());

                    return(null); // TODO
                }

                using (parseContext.Set(ParseContext.Options.InvokeSpecialName))
                {
                    return(new InvokeExpression(
                               new MethodGroupExpression(
                                   indexers,
                                   typeExpression.Type,
                                   Span),
                               _arguments).DoResolve(parseContext));
                }
            }

            var propertyExpression = _target as PropertyExpression;

            if (propertyExpression != null)
            {
                var indexers = propertyExpression.Type
                               .GetProperties(BindingFlags.Instance | BindingFlags.Public)
                               .Where(o => o.Name == "Item")
                               .Select(o => o.GetGetMethod(false))
                               .Where(o => o.GetParameters().Length != 0)
                               .ToArray();

                if (indexers.Length == 0)
                {
                    parseContext.ReportError(
                        CompilerErrors.MissingIndexerValue,
                        Span,
                        propertyExpression.Type.FullName);

                    return(null); // TODO
                }

                using (parseContext.Set(ParseContext.Options.InvokeSpecialName))
                {
                    return(new InvokeExpression(
                               new MethodGroupExpression(
                                   indexers,
                                   propertyExpression.Type,
                                   Span)
                    {
                        InstanceExpression = _target
                    },
                               _arguments).DoResolve(parseContext));
                }
            }

            _arguments.Resolve(parseContext);

            return(this);
        }