コード例 #1
0
ファイル: XmlGenerator.cs プロジェクト: michelmbem/AddyScript
        public void CompileAnonymousCall(AnonymousCall anCall)
        {
            XmlElement previousElement = currentElement;
            XmlElement tmpElement      = document.CreateElement("AnonymousCall");

            currentElement = document.CreateElement("Callee");
            anCall.Callee.AcceptCompiler(this);
            tmpElement.AppendChild(currentElement);

            currentElement = document.CreateElement("Arguments");
            foreach (Expression argument in anCall.Arguments)
            {
                argument.AcceptCompiler(this);
            }
            tmpElement.AppendChild(currentElement);

            previousElement.AppendChild(tmpElement);
            currentElement = previousElement;
        }
コード例 #2
0
 public void CompileAnonymousCall(AnonymousCall anCall)
 {
     MayBeParenthesize(anCall.Callee);
     DumpExpressionsList(anCall.Arguments);
 }
コード例 #3
0
        /// <summary>
        /// Recognizes composite expressions like those with a couple of brackets or a dot.
        /// </summary>
        /// <returns>An <see cref="ItemRef"/>, a <see cref="PropertyRef"/> or a <see cref="MethodCall"/></returns>
        protected Expression Composite()
        {
            Expression expr = Atom();

            if (expr == null)
            {
                return(null);
            }

            Token bookmark;
            bool  loop = true;

            while (loop)
            {
                SkipComments();
                switch (token.TokenID)
                {
                case TokenID.LeftBracket:
                {
                    Consume(1);
                    var index = Required <Expression>(Expression, Resources.ExpressionRequired);
                    bookmark = Match(TokenID.RightBracket);

                    Expression owner = expr;
                    expr = new ItemRef(owner, index);
                    expr.SetLocation(owner.Start, bookmark.End);
                }
                break;

                case TokenID.Dot:
                {
                    Consume(1);
                    bookmark = Match(TokenID.Identifier);
                    string memberName = bookmark.ToString();

                    Expression owner = expr;
                    if (TryMatch(TokenID.LeftParenthesis))
                    {
                        Consume(1);
                        Expression[] args = List <Expression>(Expression, false, null);
                        bookmark = Match(TokenID.RightParenthesis);
                        expr     = new MethodCall(owner, memberName, args);
                    }
                    else
                    {
                        expr = new PropertyRef(owner, memberName);
                    }

                    expr.SetLocation(owner.Start, bookmark.End);
                }
                break;

                case TokenID.LeftParenthesis:
                {
                    Consume(1);
                    Expression[] args = List <Expression>(Expression, false, null);
                    bookmark = Match(TokenID.RightParenthesis);
                    Expression callee = expr;
                    expr = new AnonymousCall(callee, args);
                    expr.SetLocation(callee.Start, bookmark.End);
                }
                break;

                default:
                    loop = false;
                    break;
                }
            }

            return(expr);
        }