Loyc.Ecs.Parser.EcsParser.FinishPrimaryExpr C# (CSharp) Method

FinishPrimaryExpr() private method

private FinishPrimaryExpr ( LNode &e ) : void
e LNode
return void
		void FinishPrimaryExpr(ref LNode e)
		{
			TokenType la1;
			// Line 541: greedy( (TT.ColonColon|TT.Dot|TT.PtrArrow|TT.QuickBind) AtomOrTypeParamExpr / PrimaryExpr_NewStyleCast / TT.LParen TT.RParen | TT.LBrack TT.RBrack | TT.QuestionMark TT.LBrack TT.RBrack | TT.IncDec | &(TParams ~(TT.ContextualKeyword|TT.Id)) ((TT.LT|TT.Not) | TT.Dot TT.LBrack) => TParams | BracedBlockOrTokenLiteral )*
			for (;;) {
				switch (LA0) {
				case TT.Dot:
					{
						if (Try_FinishPrimaryExpr_Test0(0)) {
							switch (LA(1)) {
							case TT.At: case TT.Base: case TT.Checked: case TT.ContextualKeyword:
							case TT.Default: case TT.Delegate: case TT.Dot: case TT.Id:
							case TT.Is: case TT.LBrace: case TT.Literal: case TT.LParen:
							case TT.New: case TT.Operator: case TT.Sizeof: case TT.Substitute:
							case TT.This: case TT.TypeKeyword: case TT.Typeof: case TT.Unchecked:
								goto match1;
							case TT.LBrack:
								TParams(false, ref e);
								break;
							default:
								goto stop;
							}
						} else {
							switch (LA(1)) {
							case TT.At: case TT.Base: case TT.Checked: case TT.ContextualKeyword:
							case TT.Default: case TT.Delegate: case TT.Dot: case TT.Id:
							case TT.Is: case TT.LBrace: case TT.Literal: case TT.LParen:
							case TT.New: case TT.Operator: case TT.Sizeof: case TT.Substitute:
							case TT.This: case TT.TypeKeyword: case TT.Typeof: case TT.Unchecked:
								goto match1;
							default:
								goto stop;
							}
						}
					}
					break;
				case TT.ColonColon: case TT.PtrArrow: case TT.QuickBind:
					{
						switch (LA(1)) {
						case TT.At: case TT.Base: case TT.Checked: case TT.ContextualKeyword:
						case TT.Default: case TT.Delegate: case TT.Dot: case TT.Id:
						case TT.Is: case TT.LBrace: case TT.Literal: case TT.LParen:
						case TT.New: case TT.Operator: case TT.Sizeof: case TT.Substitute:
						case TT.This: case TT.TypeKeyword: case TT.Typeof: case TT.Unchecked:
							goto match1;
						default:
							goto stop;
						}
					}
				case TT.LParen:
					{
						if (Down(0) && Up(LA0 == TT.As || LA0 == TT.Using || LA0 == TT.PtrArrow)) {
							la1 = LA(1);
							if (la1 == TT.RParen)
								e = PrimaryExpr_NewStyleCast(e);
							else
								goto stop;
						} else {
							la1 = LA(1);
							if (la1 == TT.RParen) {
								var lp = MatchAny();
								var rp = MatchAny();
								// line 545
								e = F.Call(e, ExprListInside(lp), e.Range.StartIndex, rp.EndIndex);
							} else
								goto stop;
						}
					}
					break;
				case TT.LBrack:
					{
						la1 = LA(1);
						if (la1 == TT.RBrack) {
							var lb = MatchAny();
							var rb = MatchAny();
							var list = new VList<LNode> { 
								e
							};
							e = F.Call(S.IndexBracks, AppendExprsInside(lb, list), e.Range.StartIndex, rb.EndIndex, lb.StartIndex, lb.EndIndex);
						} else
							goto stop;
					}
					break;
				case TT.QuestionMark:
					{
						la1 = LA(1);
						if (la1 == TT.LBrack) {
							var t = MatchAny();
							var lb = MatchAny();
							var rb = Match((int) TT.RBrack);
							// line 563
							e = F.Call(S.NullIndexBracks, e, F.List(ExprListInside(lb)), e.Range.StartIndex, rb.EndIndex, t.StartIndex, lb.EndIndex);
						} else
							goto stop;
					}
					break;
				case TT.IncDec:
					{
						var t = MatchAny();
						// line 565
						e = F.Call(t.Value == S.PreInc ? S.PostInc : S.PostDec, e, e.Range.StartIndex, t.EndIndex, t.StartIndex, t.EndIndex);
					}
					break;
				case TT.LT: case TT.Not:
					{
						if (Try_FinishPrimaryExpr_Test0(0))
							TParams(false, ref e);
						else
							goto stop;
					}
					break;
				case TT.At: case TT.LBrace:
					{
						la1 = LA(1);
						if (la1 == TT.LBrace || la1 == TT.LBrack || la1 == TT.RBrace) {
							var bb = BracedBlockOrTokenLiteral();
							// line 569
							if ((!e.IsCall || e.BaseStyle == NodeStyle.Operator)) {
								e = F.Call(e, bb, e.Range.StartIndex, bb.Range.EndIndex);
							} else {
								e = e.WithArgs(e.Args.Add(bb)).WithRange(e.Range.StartIndex, bb.Range.EndIndex);
							}
						} else
							goto stop;
					}
					break;
				default:
					goto stop;
				}
				continue;
			match1:
				{
					var op = MatchAny();
					var rhs = AtomOrTypeParamExpr();
					// line 542
					e = F.Call((Symbol) op.Value, e, rhs, e.Range.StartIndex, rhs.Range.EndIndex, op.StartIndex, op.EndIndex, NodeStyle.Operator);
				}
			}
		stop:;
		}
	
EcsParser