public override bool VisitMemberReferenceExpression(MemberReferenceExpression memberReferenceExpression, object data) { bool result = base.VisitMemberReferenceExpression(memberReferenceExpression, data); UnaryOperatorExpression uoe = memberReferenceExpression.Target as UnaryOperatorExpression; if (uoe != null && uoe.Operator == UnaryOperatorType.Dereference) { PointerReferenceExpression pre = new PointerReferenceExpression(); pre.Target = uoe.Expression.Detach(); pre.MemberNameToken = (Identifier)memberReferenceExpression.MemberNameToken.Clone(); memberReferenceExpression.TypeArguments.MoveTo(pre.TypeArguments); pre.CopyAnnotationsFrom(uoe); pre.CopyAnnotationsFrom(memberReferenceExpression); pre.AddAnnotation(memberReferenceExpression.GetAllRecursiveILRanges()); memberReferenceExpression.ReplaceWith(pre); } return(result); }