public Expression Visit(AstExpression node) {
            if (node == null) {
                return node;
            }

            return node.Accept(this);
        }
        protected internal Assign(NRefactory.AssignmentExpression assignmentExpression, IScope scope, INRefcatoryExpressionVisitor visitor)
            : base(scope, visitor) {

            AstExpression left = null;

            _assignment = assignmentExpression;
            Right = _rightExpression = assignmentExpression.Right.AcceptVisitor(Visitor, ParentScope);
            left = assignmentExpression.Left.AcceptVisitor(Visitor, ParentScope);
            Left = left.Reduce();
            _isInvocable = IsInvocable(Left, out _invokedType);
            InternalType = left.Type;
        }
        private void ResolveMember() {
            var @event = _memberReferenceExpression.Annotation<EventReference>();

            if (@event != null) {
                EventInfo eventInfo = null;

                _memberReference = @event;
                Member = eventInfo = @event.GetActualEvent();
                InternalType = eventInfo.EventHandlerType;
                _isStatic = false;
                return;
            }

            var field = _memberReferenceExpression.Annotation<FieldReference>();

            if (field != null) {
                FieldInfo fieldInfo = null;

                _memberReference = field;
                Member = fieldInfo = field.GetActualField();
                _isStatic = fieldInfo.IsStatic;
                InternalType = fieldInfo.FieldType;
                return;
            }

            var property = _memberReferenceExpression.Annotation<PropertyDefinition>();

            if (property != null) {
                MethodInfo methodInfo = null;
                PropertyInfo propertyInfo = null;
                var methodReference = _memberReferenceExpression.Annotation<MethodReference>();

                _memberReference = property;
                propertyInfo = property.GetActualProperty();
                methodInfo = methodReference.GetActualMethod<MethodInfo>();
                _isStatic = methodInfo.IsStatic;

                if (propertyInfo.CanWrite && propertyInfo.GetSetMethod().Equals(methodInfo)) {
                    Member = propertyInfo;
                    InternalType = propertyInfo.PropertyType;
                }
                else {
                    Member = methodInfo;
                    InternalType = methodInfo.ReturnType;
                }

                return;
            }

            var method = _memberReferenceExpression.Annotation<MethodReference>() ??
                              _memberReferenceExpression.Parent.Annotation<MethodReference>();

            if (method != null) {
                MethodInfo methodInfo = null;

                _memberReference = method;
                Member = methodInfo = method.GetActualMethod<MethodInfo>();
                _isStatic = methodInfo.IsStatic;
                InternalType = methodInfo.ReturnType;
                return;
            }

            var typeInformation = _memberReferenceExpression.Annotation<TypeInformation>();

            if (typeInformation != null) {
                MemberInfo[] members = null;

                _astExpression = _memberReferenceExpression.Target.AcceptVisitor(Visitor, ParentScope);
                members = _astExpression.Type.GetMember(_memberReferenceExpression.MemberName);

                if (members.Length > 0) {
                    Member = members[0];
                }

                InternalType = typeInformation.InferredType.GetActualType();
            }
        }
        private void BuildExpression() {
            var target = _memberReferenceExpression.Target;
            string memberName = _memberReferenceExpression.MemberName;

            _astExpression = _astExpression ?? target.AcceptVisitor(Visitor, ParentScope);

            if (memberName.Equals("GetMethodFromHandle")) {
                BuildMethodHandleExpression();
                return;
            }

            if (memberName.Equals("GetTypeFromHandle")) {
                BuildTypeHandleExpression();
                return;
            }

            if (!_isStatic) {
                Expression = _astExpression;
            }
        }
 protected virtual Expression CreateBody(NRefactory.BlockStatement blockStatement, IEnumerable <ParameterExpression> parameters, IScope scope, INRefcatoryExpressionVisitor visitor)
 {
     return(AstExpression.MethodBlock(blockStatement, parameters: parameters, scope: this, visitor: visitor));
 }
 protected override Expression CreateConditionalExpression()
 {
     return(AstExpression.IfElseCondition(ConditionNode, ParentScope, Visitor));
 }