Esempio n. 1
0
        protected override Expression DoResolve(ResolveContext ec)
        {
            bool ok = true;

            source = source.Resolve(ec);

            if (source == null)
            {
                ok     = false;
                source = ErrorExpression.Instance;
            }

            target = target.ResolveLValue(ec, source);

            if (target == null || !ok)
            {
                return(null);
            }

            TypeSpec target_type = target.Type;
            TypeSpec source_type = source.Type;

            eclass = ExprClass.Value;
            type   = target_type;

            if (!(target is IAssignMethod))
            {
                target.Error_ValueAssignment(ec, source);
                return(null);
            }

            if (target_type != source_type)
            {
                Expression resolved = ResolveConversions(ec);

                if (resolved != this)
                {
                    return(resolved);
                }
            }

            return(this);
        }
Esempio n. 2
0
File: assign.cs Progetto: dyxu/vimrc
		protected override Expression DoResolve (ResolveContext ec)
		{
			bool ok = true;
			source = source.Resolve (ec);
						
			if (source == null) {
				ok = false;
				source = EmptyExpression.Null;
			}

			target = target.ResolveLValue (ec, source);

			if (target == null || !ok)
				return null;

			TypeSpec target_type = target.Type;
			TypeSpec source_type = source.Type;

			eclass = ExprClass.Value;
			type = target_type;

			if (!(target is IAssignMethod)) {
				target.Error_ValueAssignment (ec, source);
				return null;
			}

			if (target_type != source_type) {
				Expression resolved = ResolveConversions (ec);

				if (resolved != this)
					return resolved;
			}

			return this;
		}
Esempio n. 3
0
        protected override Expression DoResolve(ResolveContext ec)
        {
            bool ok = true;

            // PlayScript: resolve LValue first if source is an initializer to be able to
            // infer initializer type correctly.
            if (ec.FileType == SourceFileType.PlayScript &&
                (source is AsArrayInitializer || source is AsObjectInitializer))
            {
                target = target.ResolveLValue(ec, source);

                if (target == null)
                {
                    ok     = false;
                    source = EmptyExpression.Null;
                }

                if (source is AsArrayInitializer)
                {
                    source = ((AsArrayInitializer)source).InferredResolveWithArrayType(ec, target.Type);
                }
                else if (source is AsObjectInitializer)
                {
                    source = ((AsObjectInitializer)source).InferredResolveWithObjectType(ec, target.Type);
                }

                if (source == null)
                {
                    ok     = false;
                    source = EmptyExpression.Null;
                }
            }
            else
            {
                source = source.Resolve(ec);

                if (source == null)
                {
                    ok     = false;
                    source = EmptyExpression.Null;
                }

                target = target.ResolveLValue(ec, source);
            }

            if (target == null || !ok)
            {
                return(null);
            }

            TypeSpec target_type = target.Type;
            TypeSpec source_type = source.Type;

            eclass = ExprClass.Value;
            type   = target_type;

            if (!(target is IAssignMethod))
            {
                target.Error_ValueAssignment(ec, source);
                return(null);
            }

            if (target_type != source_type)
            {
                Expression resolved = ResolveConversions(ec);

                if (resolved != this)
                {
                    return(resolved);
                }
            }

            return(this);
        }