static NullConditionalOperatorVisitor() { Instance = new NullConditionalOperatorVisitor(); TypeConstantNode = new ConstantExpressionNode(typeof(NullConditionalOperatorVisitor)); LambdaParameterNode = new MemberExpressionNode(null, "x"); LambdaParameters = new[] { LambdaParameterNode.Member }; }
protected override Expression VisitMember(MemberExpression node) { var memberExpression = new MemberExpressionNode(node.Member.Name); AddChild(memberExpression); memberExpression.Expression = (ExpressionNode)VisitNode(node.Expression); return(node); }
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); }
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); }
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); }
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); }
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); }
public AssigningActionNode(MemberExpressionNode lhs, ExpressionNode rhs, SourceCodePosition pos) : base(pos) { LHS = lhs; RHS = rhs; }
public object Visit(MemberExpressionNode n, object o) { return(null); }
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; }
private void Write(MemberExpressionNode exp) { Write(exp.Children[0]); _code.Append("."); _code.Append(exp.Value); }
public object Visit(MemberExpressionNode n, object o) { n.Member.Accept(this, null); return(null); }
public ThisReferenceAction(MemberExpressionNode memberRef, SourceCodePosition pos) : base(pos) { MemberReference = memberRef; }
public ThisNode(MemberExpressionNode member, SourceCodePosition pos) : base(pos) { Member = member; }