public ResolveUnaryOperator ( UnaryOperatorType op, ResolveResult expression ) : ResolveResult | ||
op | UnaryOperatorType | |
expression | ResolveResult | |
리턴 | ResolveResult |
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"); }
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"); }
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(); }