示例#1
0
		LNode AddWords(LNode stmt, bool partialIsWA = true) { return stmt.PlusAttrs(@public, @new, partialIsWA ? partialWA : partial, @static); }
示例#2
0
 LNode AddWords(LNode stmt, bool partialIsWA = true)
 {
     return(stmt.PlusAttrs(@public, @new, partialIsWA ? partialWA : partial, @static));
 }
示例#3
0
        protected LNode TopExpr()
        {
            TT            la0, la1;
            Token         at    = default(Token);
            VList <LNode> attrs = default(VList <LNode>);
            LNode         e     = default(LNode);
            Token         t     = default(Token);

            // Line 91: greedy((TT.At)? TT.LBrack ExprList TT.RBrack)?
            do
            {
                la0 = (TT)LA0;
                if (la0 == TT.At)
                {
                    la1 = (TT)LA(1);
                    if (la1 == TT.LBrack)
                    {
                        goto match1;
                    }
                }
                else if (la0 == TT.LBrack)
                {
                    switch ((TT)LA(1))
                    {
                    case TT.Assignment:
                    case TT.At:
                    case TT.BQString:
                    case TT.Colon:
                    case TT.Comma:
                    case TT.Dot:
                    case TT.Id:
                    case TT.LBrace:
                    case TT.LBrack:
                    case TT.Literal:
                    case TT.LParen:
                    case TT.NormalOp:
                    case TT.Not:
                    case TT.PrefixOp:
                    case TT.PreOrSufOp:
                    case TT.RBrack:
                    case TT.Semicolon:
                    case TT.SpaceLParen:
                        goto match1;
                    }
                }
                break;
match1:
                {
                    // Line 91: (TT.At)?
                    la0 = (TT)LA0;
                    if (la0 == TT.At)
                    {
                        at = MatchAny();
                    }
                    // line 92
                    if (at.Type() == default(TT))
                    {
                        ErrorSink.Write(Severity.Warning, LaIndexToSourcePos(0), "Attribute: expected '@['");
                    }
                    t     = Match((int)TT.LBrack);
                    attrs = ExprList();
                    Match((int)TT.RBrack);
                }
            } while (false);
            // Line 95: (Expr / TT.Id Expr (Particle)*)
            do
            {
                switch ((TT)LA0)
                {
                case TT.Assignment:
                case TT.BQString:
                case TT.Dot:
                case TT.NormalOp:
                case TT.Not:
                case TT.PrefixOp:
                case TT.PreOrSufOp:
                    e = Expr(StartStmt);
                    break;

                case TT.Id:
                {
                    switch ((TT)LA(1))
                    {
                    case TT.Assignment:
                    case TT.BQString:
                    case TT.Dot:
                    case TT.NormalOp:
                        e = Expr(StartStmt);
                        break;

                    case TT.Colon:
                    {
                        if (LA(1 + 1) != (int)TT.Indent)
                        {
                            e = Expr(StartStmt);
                        }
                        else
                        {
                            goto match2;
                        }
                    }
                    break;

                    case EOF:
                    case TT.Comma:
                    case TT.Dedent:
                    case TT.LBrack:
                    case TT.LParen:
                    case TT.Not:
                    case TT.PreOrSufOp:
                    case TT.RBrace:
                    case TT.RBrack:
                    case TT.RParen:
                    case TT.Semicolon:
                        e = Expr(StartStmt);
                        break;

                    default:
                        goto match2;
                    }
                }
                break;

                default:
                    e = Expr(StartStmt);
                    break;
                }
                break;
match2:
                {
                    var id = MatchAny();
                    // line 98
                    var args = VList <LNode> .Empty;
                    args.Add(Expr(P.SuperExpr));
                    // Line 100: (Particle)*
                    for (;;)
                    {
                        switch ((TT)LA0)
                        {
                        case TT.At:
                        case TT.Colon:
                        case TT.Id:
                        case TT.LBrace:
                        case TT.LBrack:
                        case TT.Literal:
                        case TT.LParen:
                        case TT.SpaceLParen:
                        {
                            // line 101
                            if (((TT)LA0 == TT.LParen))
                            {
                                var loc = args[args.Count - 2, args.Last].Range.End;
                                Error(0, "Expected a space before '(' (possibly missing ';' or ',' at {0})", loc);
                            }
                            args.Add(Particle());
                        }
                        break;

                        default:
                            goto stop;
                        }
                    }
                    stop :;
                    // line 108
                    e = MarkSpecial(F.Call(id, args, id.StartIndex, args.Last.Range.EndIndex));
                }
            } while (false);
            if ((t.TypeInt != 0))
            {
                e = e.WithRange(t.StartIndex, e.Range.EndIndex);
            }
            return(e.PlusAttrs(attrs));
        }
示例#4
0
        protected LNode TopExpr()
        {
            TT             la0;
            RVList <LNode> attrs = default(RVList <LNode>);
            LNode          e     = default(LNode);
            Token          t     = default(Token);

            // Line 90: (TT.LBrack ExprList TT.RBrack)?
            la0 = (TT)LA0;
            if (la0 == TT.LBrack)
            {
                t     = MatchAny();
                attrs = ExprList();
                Match((int)TT.RBrack);
            }
            // Line 92: (Expr / TT.Id Expr (Particle)*)
            do
            {
                switch ((TT)LA0)
                {
                case TT.Assignment:
                case TT.BQString:
                case TT.Dot:
                case TT.NormalOp:
                case TT.Not:
                case TT.PrefixOp:
                case TT.PreOrSufOp:
                    e = Expr(StartStmt);
                    break;

                case TT.Id:
                {
                    switch ((TT)LA(1))
                    {
                    case TT.Assignment:
                    case TT.BQString:
                    case TT.Dot:
                    case TT.NormalOp:
                        e = Expr(StartStmt);
                        break;

                    case TT.Colon:
                    {
                        if (LA(1 + 1) != (int)TT.Indent)
                        {
                            e = Expr(StartStmt);
                        }
                        else
                        {
                            goto match2;
                        }
                    }
                    break;

                    case EOF:
                    case TT.Comma:
                    case TT.Dedent:
                    case TT.LBrack:
                    case TT.LParen:
                    case TT.Not:
                    case TT.PreOrSufOp:
                    case TT.RBrace:
                    case TT.RBrack:
                    case TT.RParen:
                    case TT.Semicolon:
                        e = Expr(StartStmt);
                        break;

                    default:
                        goto match2;
                    }
                }
                break;

                default:
                    e = Expr(StartStmt);
                    break;
                }
                break;
match2:
                {
                    var id = MatchAny();
                    // line 95
                    var args = RVList <LNode> .Empty;
                    args.Add(Expr(P.SuperExpr));
                    // Line 97: (Particle)*
                    for (;;)
                    {
                        switch ((TT)LA0)
                        {
                        case TT.At:
                        case TT.Colon:
                        case TT.Id:
                        case TT.LBrace:
                        case TT.LParen:
                        case TT.Number:
                        case TT.OtherLit:
                        case TT.SpaceLParen:
                        case TT.String:
                        {
                            // line 98
                            if (((TT)LA0 == TT.LParen))
                            {
                                var loc = args[args.Count - 2, args.Last].Range.End;
                                Error(0, "Expected a space before '(' (possibly missing ';' or ',' at {0})", loc);
                            }
                            args.Add(Particle());
                        }
                        break;

                        default:
                            goto stop;
                        }
                    }
                    stop :;
                    // line 105
                    e = MarkSpecial(F.Call((Symbol)id.Value, args, id.StartIndex, args.Last.Range.EndIndex));
                }
            } while (false);
            if ((t.TypeInt != 0))
            {
                e = e.WithRange(t.StartIndex, e.Range.EndIndex);
            }
            return(e.PlusAttrs(attrs));
        }