internal static ParsedObject <WeakAlias> Parse(ParseSession parser) { if (!parser.CheckToken(0, "alias")) { return(null); } var nametoken = parser.PeekToken(1); if (nametoken == null) { return(null); } if (!parser.CheckToken(2, "=")) { return(null); } parser.ConsumeTokens(4); var aliastype = new WeakAlias { }; return(new ParsedObject <WeakAlias> { Name = nametoken, Object = aliastype }); }
internal static ParsedObject <SumType> Parse(ParseSession parser) { int totaltokens = 0; if (!parser.CheckToken(0, "type")) { return(null); } Token sumtypename = parser.PeekToken(1); if (sumtypename == null || string.IsNullOrEmpty(sumtypename.Text)) { return(null); } if (parser.CheckToken(2, "<")) { if (!parser.ParseTemplateParameters(3, sumtypename, out totaltokens)) { return(null); } if (!parser.CheckToken(totaltokens, ":")) { return(null); } } else if (!parser.CheckToken(2, ":")) { return(null); } else if (!parser.CheckToken(4, "|")) { return(null); } else { totaltokens = 2; } do { ++totaltokens; if (parser.CheckToken(totaltokens + 1, "<")) { var token = parser.PeekToken(totaltokens); if (token == null) { return(null); } if (!parser.ParseTemplateArguments(totaltokens + 2, token, out totaltokens)) { return(null); } } else { ++totaltokens; } } while (parser.CheckToken(totaltokens, "|")); // Success! Consume everything and return the constructed result parser.ConsumeTokens(totaltokens); var sumtype = new SumType { }; return(new ParsedObject <SumType> { Name = sumtypename, Object = sumtype }); }