コード例 #1
0
 static NullConditionalOperatorVisitor()
 {
     Instance            = new NullConditionalOperatorVisitor();
     TypeConstantNode    = new ConstantExpressionNode(typeof(NullConditionalOperatorVisitor));
     LambdaParameterNode = new MemberExpressionNode(null, "x");
     LambdaParameters    = new[] { LambdaParameterNode.Member };
 }
コード例 #2
0
        protected override Expression VisitMember(MemberExpression node)
        {
            var memberExpression = new MemberExpressionNode(node.Member.Name);

            AddChild(memberExpression);

            memberExpression.Expression = (ExpressionNode)VisitNode(node.Expression);

            return(node);
        }
コード例 #3
0
ファイル: NodeWrapper.cs プロジェクト: neostoic/refazer
        private static PythonNode Wrap(MemberExpression exp, PythonNode parent)
        {
            var result = new MemberExpressionNode(exp)
            {
                Parent = parent
            };

            result.AddChild(Wrap(exp.Target, result));
            result.Value = exp.Name;
            return(result);
        }
コード例 #4
0
        IExpressionNode IExpressionVisitor.Visit(IExpressionNode node)
        {
            var methodCallExpressionNode = node as IMethodCallExpressionNode;

            if (methodCallExpressionNode == null)
            {
                return(node);
            }

            if (methodCallExpressionNode.Method == GetErrorsMethod &&
                methodCallExpressionNode.Target is ResourceExpressionNode)
            {
                var  paths    = new List <string>();
                bool isDirect = false;
                var  args     = methodCallExpressionNode.Arguments.ToList();
                for (int i = 0; i < args.Count; i++)
                {
                    var arg  = args[i];
                    var path = (arg as IConstantExpressionNode)?.Value as string;
                    if (path != null)
                    {
                        paths.Add(path);
                        continue;
                    }
                    var methodExpr = arg as IMethodCallExpressionNode;
                    if (methodExpr?.Method == AttachedMemberConstants.AsErrorsSource && methodExpr.Target is IMemberExpressionNode)
                    {
                        arg     = new MemberExpressionNode(methodExpr.Target, AttachedMemberConstants.AsErrorsSource);
                        args[i] = arg;
                    }

                    if (!isDirect)
                    {
                        isDirect = (arg as IMemberExpressionNode)?.Member == AttachedMemberConstants.AsErrorsSource;
                    }
                }

                Guid id = Guid.NewGuid();
                _errorPathNames[id] = new KeyValuePair <string[], bool>(paths.ToArray(), isDirect);
                var idNode = new ConstantExpressionNode(id, typeof(Guid));

                //Adding binding source member if the expression does not contain members.
                if (args.Count == 0)
                {
                    args.Add(new MemberExpressionNode(ResourceExpressionNode.DynamicInstance,
                                                      BindingServiceProvider.ResourceResolver.BindingSourceResourceName));
                }
                args.Insert(0, idNode);
                return(new MethodCallExpressionNode(methodCallExpressionNode.Target, methodCallExpressionNode.Method, args, methodCallExpressionNode.TypeArgs));
            }
            return(node);
        }
コード例 #5
0
        private MemberExpressionNode MemberReference()
        {
            MemberExpressionNode itsAST;
            SourceCodePosition   itsPos  = _currentToken.SourcePosition;
            IdentifierNode       itsName = new IdentifierNode(_currentToken);

            Accept(Token.TokenType.Identifier);
            MemberNode itsMember = new SimpleMemberNode(itsName, itsPos);

            if (_currentToken.Type == Token.TokenType.LeftParen)
            {
                CallExpressionNode itsCall = Call(itsName);     // add the associated identifier to the call
                itsMember = new CalledMemberNode(itsMember, itsCall, itsPos);
                if (_currentToken.Type == Token.TokenType.LeftBracket)
                {
                    ExpressionNode itsIndex = ArrayExpression();
                    itsMember = new CalledAndIndexedMemberNode(itsMember, itsCall, itsIndex, itsPos);
                }
            }
            else if (_currentToken.Type == Token.TokenType.LeftBracket)
            {
                ExpressionNode itsIndex = ArrayExpression();
                itsMember = new IndexedMemberNode(itsMember, itsIndex, itsPos);
            }

            while (_currentToken.Type == Token.TokenType.Dot)
            {
                Accept(Token.TokenType.Dot);
                itsName = new IdentifierNode(_currentToken);
                Accept(Token.TokenType.Identifier);
                itsMember = new DotMemberNode(itsMember, itsName, itsPos);

                if (_currentToken.Type == Token.TokenType.LeftParen)
                {
                    CallExpressionNode itsCall = Call(itsName);     // add the associated identifier to the call
                    itsMember = new CalledMemberNode(itsMember, itsCall, itsPos);
                    if (_currentToken.Type == Token.TokenType.LeftBracket)
                    {
                        ExpressionNode itsIndex = ArrayExpression();
                        itsMember = new CalledAndIndexedMemberNode(itsMember, itsCall, itsIndex, itsPos);
                    }
                }
                else if (_currentToken.Type == Token.TokenType.LeftBracket)
                {
                    ExpressionNode itsIndex = ArrayExpression();
                    itsMember = new IndexedMemberNode(itsMember, itsIndex, itsPos);
                }
            }
            itsAST = new MemberExpressionNode(itsMember, itsPos);
            return(itsAST);
        }
コード例 #6
0
 public virtual Value evaluate(Context cx, MemberExpressionNode node)
 {
     output("<MemberExpressionNode position=\"" + node.pos() + "\">");
     indent_Renamed_Field++;
     if (node.base_Renamed != null)
     {
         node.base_Renamed.evaluate(cx, this);
     }
     if (node.selector != null)
     {
         node.selector.evaluate(cx, this);
     }
     indent_Renamed_Field--;
     output("</MemberExpressionNode>");
     return(null);
 }
コード例 #7
0
        private ActionNode ParseActionStatement()
        {
            ActionNode         itsAST;
            SourceCodePosition itsPos = _currentToken.SourcePosition;

            if (_currentToken.Type == Token.TokenType.Identifier)
            {
                MemberExpressionNode itsMemberExpr = MemberReference();
                if (_currentToken.Type == Token.TokenType.AssignmentOperator)
                {
                    itsAST = new AssigningActionNode(itsMemberExpr, Assigning(), itsPos);
                }
                else
                {
                    itsAST = new MemberReferenceAction(itsMemberExpr, itsPos);
                }
                Accept(Token.TokenType.Semicolon);
            }
            else if (_currentToken.Type == Token.TokenType.This)
            {
                ThisExpressionNode itsMemberExpr = ThisReference();
                if (_currentToken.Type == Token.TokenType.AssignmentOperator)
                {
                    itsAST = new AssigningActionNode(itsMemberExpr, Assigning(), itsPos);
                }
                else
                {
                    itsAST = new ThisReferenceAction(itsMemberExpr, itsPos);
                }
                Accept(Token.TokenType.Semicolon);
            }
            else
            {
                itsAST = ControlStatement();
            }
            return(itsAST);
        }
コード例 #8
0
 public AssigningActionNode(MemberExpressionNode lhs, ExpressionNode rhs, SourceCodePosition pos)
     : base(pos)
 {
     LHS = lhs;
     RHS = rhs;
 }
コード例 #9
0
 public object Visit(MemberExpressionNode n, object o)
 {
     return(null);
 }
コード例 #10
0
		public virtual Value evaluate(Context cx, MemberExpressionNode node)
		{
			output("<MemberExpressionNode position=\"" + node.pos() + "\">");
			indent_Renamed_Field++;
			if (node.base_Renamed != null)
			{
				node.base_Renamed.evaluate(cx, this);
			}
			if (node.selector != null)
			{
				node.selector.evaluate(cx, this);
			}
			indent_Renamed_Field--;
			output("</MemberExpressionNode>");
			return null;
		}
コード例 #11
0
ファイル: Unparser.cs プロジェクト: neostoic/refazer
 private void Write(MemberExpressionNode exp)
 {
     Write(exp.Children[0]);
     _code.Append(".");
     _code.Append(exp.Value);
 }
コード例 #12
0
ファイル: CodeGenerator.cs プロジェクト: tbyrresen/Deslang
 public object Visit(MemberExpressionNode n, object o)
 {
     n.Member.Accept(this, null);
     return(null);
 }
コード例 #13
0
 public ThisReferenceAction(MemberExpressionNode memberRef, SourceCodePosition pos) : base(pos)
 {
     MemberReference = memberRef;
 }
コード例 #14
0
 public ThisNode(MemberExpressionNode member, SourceCodePosition pos) : base(pos)
 {
     Member = member;
 }