ResolveUnaryOperator() public method

public ResolveUnaryOperator ( UnaryOperatorType op, ResolveResult expression ) : ResolveResult
op UnaryOperatorType
expression ResolveResult
return ResolveResult
Esempio n. 1
0
        protected void TestOperator(UnaryOperatorType op, ResolveResult input,
                                    Conversion expectedConversion, Type expectedResultType)
        {
            var rr = resolver.ResolveUnaryOperator(op, input);

            AssertType(expectedResultType, rr);
            Assert.AreEqual(typeof(UnaryOperatorResolveResult), rr.GetType());
            var uorr = (UnaryOperatorResolveResult)rr;

            AssertConversion(uorr.Input, input, expectedConversion, "Conversion");
        }
Esempio n. 2
0
        protected void TestOperator(UnaryOperatorType op, ResolveResult input,
                                    Conversion expectedConversion, Type expectedResultType)
        {
            CSharpResolver resolver = new CSharpResolver(compilation);
            var            rr       = resolver.ResolveUnaryOperator(op, input);

            AssertType(expectedResultType, rr);
            Assert.AreEqual(typeof(OperatorResolveResult), rr.GetType());
            var uorr = (OperatorResolveResult)rr;

            AssertConversion(uorr.Operands[0], input, expectedConversion, "Conversion");
        }
Esempio n. 3
0
        public void TestDereference()
        {
            TestOperator(UnaryOperatorType.Dereference, MakeResult(typeof(int *)),
                         Conversion.IdentityConversion, typeof(int));

            TestOperator(UnaryOperatorType.Dereference, MakeResult(typeof(long **)),
                         Conversion.IdentityConversion, typeof(long *));

            Assert.IsTrue(resolver.ResolveUnaryOperator(UnaryOperatorType.Dereference, MakeResult(typeof(int))).IsError);

            TestOperator(UnaryOperatorType.Dereference, MakeResult(typeof(dynamic)),
                         Conversion.IdentityConversion, typeof(dynamic));
        }
		public override ResolveResult Resolve(CSharpResolver resolver)
		{
			return resolver.ResolveUnaryOperator(operatorType, expression.Resolve(resolver));
		}
		Value VisitUnaryOperator(OperatorResolveResult result, UnaryOperatorType operatorType, bool checkForOverflow = false)
		{
			Debug.Assert(result.Operands.Count == 1);
			var operand = Convert(result.Operands[0]).ToResolveResult(context);
			CSharpResolver resolver = new CSharpResolver(debuggerTypeSystem).WithCheckForOverflow(checkForOverflow);
			var val = resolver.ResolveUnaryOperator(operatorType, operand);
			if (val.IsCompileTimeConstant)
				return Convert(val);
			throw new GetValueException("Operator {0} is not supported for {1}!", operatorType, new CSharpAmbience().ConvertType(operand.Type));
		}
		Value VisitUnaryOperator(OperatorResolveResult result, UnaryOperatorType operatorType, bool checkForOverflow = false)
		{
			Debug.Assert(result.Operands.Count == 1);
			var operand = Convert(result.Operands[0]).ToResolveResult(context);
			CSharpResolver resolver = new CSharpResolver(debuggerTypeSystem).WithCheckForOverflow(checkForOverflow);
			var val = resolver.ResolveUnaryOperator(operatorType, operand);
			if (val.IsCompileTimeConstant)
				return Convert(val);
			throw new InvalidOperationException();
		}