public object Visit(CalledAndIndexedMemberNode n, object o) { n.Member.Accept(this, null); n.Call.Accept(this, null); Append("["); n.Index.Accept(this, null); Append("]"); return(null); }
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 object Visit(CalledAndIndexedMemberNode n, object o) { return(null); }