Пример #1
0
 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);
 }
Пример #2
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);
        }
Пример #3
0
 public object Visit(CalledAndIndexedMemberNode n, object o)
 {
     return(null);
 }