Пример #1
0
        Expr HandleLet()
        {
            var multi = new List <Expr>();

            do
            {
                string name = _parser.ReadIdentifier();
                if (name == null)
                {
                    return(new SyntaxErrorExpr(_parser.Location, "Expected identifier (variable name)."));
                }
                Expr e = _scope.Declare(name, new AccessorLetExpr(_parser.PrevNonCommentLocation, name));
                if (_parser.Match(JSTokenizerToken.Assign))
                {
                    e = HandleAssign(e, true);
                }
                multi.Add(e);
                if (e is SyntaxErrorExpr)
                {
                    break;
                }
            }while(_parser.Match(JSTokenizerToken.Comma));
            if (multi.Count == 1)
            {
                return(multi[0]);
            }
            return(new ListOfExpr(multi));
        }
Пример #2
0
        Expr HandleLet()
        {
            List <AccessorLetExpr> decl  = null;
            List <Expr>            multi = null;

            for ( ;;)
            {
                string name = _parser.ReadIdentifier();
                if (name == null)
                {
                    return(new SyntaxErrorExpr(_parser.Location, "Expected identifier (variable name)."));
                }
                var  v = new AccessorLetExpr(_parser.PrevNonCommentLocation, name);
                Expr e = _parser.IsAssignOperator
                            ? HandleAssign(v, _scope.Find(name), name)
                            : v;
                Debug.Assert(!(e is SyntaxErrorExpr));
                if (_parser.Match(TokenizerToken.Comma))
                {
                    if (multi == null)
                    {
                        multi = new List <Expr>();
                        decl  = new List <AccessorLetExpr>();
                    }
                    multi.Add(e);
                    decl.Add(v);
                }
                else
                {
                    Expr reg = _scope.Declare(v);
                    if (reg is SyntaxErrorExpr)
                    {
                        return(reg);
                    }
                    if (multi == null)
                    {
                        return(e);
                    }
                    foreach (var var in decl)
                    {
                        reg = _scope.Declare(var);
                        if (reg is SyntaxErrorExpr)
                        {
                            return(reg);
                        }
                    }
                    multi.Add(e);
                    return(new ListOfExpr(multi));
                }
            }
        }