private static void InitializeTypeNameInfo(ParsedUnqualifiedName from, TypeNameInfo to) { to.Name = from.Rootname; to.Namespace = from.Namespace; to.IsGenericType = from.GenericParameters != null; if (to.IsGenericType) { to.IsOpenGeneric = from.GenericParameters.IsOpenGeneric; if (to.IsOpenGeneric) { for (int i = 0; i < from.GenericParameters.Count; ++i) { to.GenericParameters.Add(null); } } else { foreach (var genericParam in from.GenericParameters.Parameters) { to.GenericParameters.Add(genericParam); } } } }
private static ParseResult Match_GenericTypeParameter(InputStream input) { return(FirstOf( WithAction(Match_UnqualifiedName, r => { var result = new TypeNameInfo(); InitializeTypeNameInfo((ParsedUnqualifiedName)r.ResultData, result); return new ParseResult(r.MatchedString, result); }), WithAction(Sequence(Match_LeftBracket, Match_TypeName, Match_RightBracket), r => new SequenceResult(r)[1])) (input)); }
// Parsing expressions from our grammar. private static ParseResult Match_TypeName(InputStream input) { var resultData = new TypeNameInfo(); ParseResult result = Sequence( WithAction(Match_UnqualifiedName, r => InitializeTypeNameInfo((ParsedUnqualifiedName)r.ResultData, resultData)), ZeroOrOne(Sequence(Match_Comma, WithAction(Match_AssemblyName, r => resultData.AssemblyName = r.MatchedString))))(input); if (!result.Matched) { return(result); } return(new ParseResult(result.MatchedString, resultData)); }