示例#1
0
        private Expression ParseCallOrMemberTail(Expression ret)
        {
            while (true)
            {
                if (MaybeEat(TokenKind.LeftParenthesis))
                {
                    List<Arg> arguments = new List<Arg>();
                    if (!MaybeEat(TokenKind.RightParenthesis))
                    {
                        do
                        {
                            arguments.Add(ParseArg());
                        } while (MaybeEat(TokenKind.Comma));
                        Eat(TokenKind.RightParenthesis);
                    }

                    ret = new CallExpression(ret, arguments.ToArray());
                    ret.SetLoc(_globalParent, ret.StartIndex, GetEnd());
                }
                else if (MaybeEat(TokenKind.Dot))
                {
                    ret = new MemberExpression(ret, ((NameToken)NextToken()).Name);
                    ret.SetLoc(_globalParent, ret.StartIndex, GetEnd());
                }
                else if (MaybeEat(TokenKind.LeftBracket))
                {
                    ret = new IndexExpression(ret, new[] { ParseExpression() }); // TODO: make possible with multiple indexes
                    ret.SetLoc(_globalParent, ret.StartIndex, GetEnd());
                    Eat(TokenKind.RightBracket);
                }
                else
                    return ret;
            }
        }
示例#2
0
        private CallExpression ParseSingleCall(Expression target)
        {
            Eat(TokenKind.LeftParenthesis);
            List<Arg> arguments = new List<Arg>();
            if (!MaybeEat(TokenKind.RightParenthesis))
            {
                do
                {
                    arguments.Add(ParseArg());
                } while (MaybeEat(TokenKind.Comma));
                Eat(TokenKind.RightParenthesis);
            }

            var ret = new CallExpression(target, arguments.ToArray());
            ret.SetLoc(_globalParent, target.StartIndex, GetEnd());
            return ret;
        }
示例#3
0
文件: Arg.cs 项目: Alxandr/IronTotem
 public Arg(string name, Expression expression)
 {
     _name = name;
     _expression = expression;
 }
示例#4
0
 public NewExpression(Expression target, Arg[] args)
 {
     _target = target;
     _args = args;
 }
示例#5
0
文件: Arg.cs 项目: Alxandr/IronTotem
 public Arg(Expression expression)
     : this(null, expression)
 {
 }