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; }
public void CompileAnonymousCall(AnonymousCall anCall) { MayBeParenthesize(anCall.Callee); DumpExpressionsList(anCall.Arguments); }
/// <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); }