private static ILAssemblyExtern ToAssemblyExtern(this IDLParserToken p) { var dot = p.SkipTo().AssertSymbol("."); var _assmembly = dot.Next.AssertName("assembly"); var _extern = _assmembly.SkipTo(); if (_extern.Text != "extern") return null; var q = new IDLParserTokenPair(); q.Item1 = _extern.SkipTo().AssertSymbol("'"); var _name = q.Item1.TakeWhile(k => k.Text != "'").Combine(); q.Item2 = _name.Next.AssertSymbol("'"); var n = new ILAssemblyExtern { Token = dot, Name = _name }; var scope = new IDLParserTokenPair(); n.Scope = scope; scope.Item1 = q.Item2.SkipTo().AssertSymbol("{"); Func<IDLParserToken, IDLParserToken> _publickeytoken_value = __publickeytoken => __publickeytoken.AssertName("publickeytoken").SkipTo().AssertSymbol("=").SkipTo().AssertSymbol("(").TakeWhile( k => !((k.IsWhiteSpace && k.Next.Text == ")") || k.Text == ")") ).Combine(); Func<IDLParserToken, IDLParserToken> _ver_value = __ver => __ver.AssertName("ver").SkipWhile(k => k.IsWhiteSpace).TakeWhile(k => !k.IsWhiteSpace).Combine(); var _publickeytoken = scope.Item1.SkipTo().AssertSymbol(".").Next; if (_publickeytoken.Text == "publickeytoken") { n.PublicKeyToken = _publickeytoken_value(_publickeytoken); var _ver = n.PublicKeyToken.SkipTo().AssertSymbol(")").SkipTo().AssertSymbol(".").Next; n.Version = _ver_value(_ver); } else { n.Version = _ver_value(_publickeytoken); } scope.Item2 = n.Version.SkipTo().AssertSymbol("}"); return n; }
private static void ToParameters(List<IDLParameter> Parameters, IDLParserTokenPair ParameterSymbols) { ParameterSymbols.Item1 = ParameterSymbols.Item1.AssertSymbol("("); ParameterSymbols.Item2 = ParameterSymbols.Item1.SkipTo().UntilSelected( p => { if (p.Text != ")") { if (Parameters.Count > 0) { p.AssertSymbol(","); p = p.SkipTo(); } var ParameterTypeToken = p; #region KeywordAttribute var KeywordAttribute = default(IDLParserToken); // C# default constructor is so cool that we want it for idl! if (ParameterTypeToken.Text == "attribute") { KeywordAttribute = ParameterTypeToken; ParameterTypeToken = ParameterTypeToken.SkipTo(); } #endregion var KeywordIn = default(IDLParserToken); var KeywordOptional = default(IDLParserToken); #region KeywordIn if (ParameterTypeToken.Text == "in") { KeywordIn = ParameterTypeToken; ParameterTypeToken = ParameterTypeToken.SkipTo(); } #endregion #region KeywordOptional // can we make it implicitly optional by attribute and haveng a value for it? if (ParameterTypeToken.Text == "optional") { KeywordOptional = ParameterTypeToken; ParameterTypeToken = ParameterTypeToken.SkipTo(); } #endregion var ParameterType = ToTypeReference(ParameterTypeToken); var param = new IDLParameter { KeywordAttribute = KeywordAttribute, KeywordIn = KeywordIn, KeywordOptional = KeywordOptional, ParameterType = ParameterType, }; // like the const param.Name = ParameterType.Terminator.SkipTo().AssertName(); #region DefaultValue if (param.Name.SkipTo().Text == "=") { param.KeywordAssignment = param.Name.SkipTo().AssertSymbol("="); param.DefaultValue = param.KeywordAssignment.SkipTo().ToNumericLiteral(); Parameters.Add(param); return param.DefaultValue.Terminator.SkipTo(); } #endregion Parameters.Add(param); return param.Name.SkipTo(); } return p; } ).AssertSymbol(")"); }
private static void ToParameters(List <IDLParameter> Parameters, IDLParserTokenPair ParameterSymbols) { ParameterSymbols.Item1 = ParameterSymbols.Item1.AssertSymbol("("); ParameterSymbols.Item2 = ParameterSymbols.Item1.SkipTo().UntilSelected( p => { if (p.Text != ")") { if (Parameters.Count > 0) { p.AssertSymbol(","); p = p.SkipTo(); } var ParameterTypeToken = p; #region KeywordAttribute var KeywordAttribute = default(IDLParserToken); // C# default constructor is so cool that we want it for idl! if (ParameterTypeToken.Text == "attribute") { KeywordAttribute = ParameterTypeToken; ParameterTypeToken = ParameterTypeToken.SkipTo(); } #endregion var KeywordIn = default(IDLParserToken); var KeywordOptional = default(IDLParserToken); #region KeywordIn if (ParameterTypeToken.Text == "in") { KeywordIn = ParameterTypeToken; ParameterTypeToken = ParameterTypeToken.SkipTo(); } #endregion #region KeywordOptional // can we make it implicitly optional by attribute and haveng a value for it? if (ParameterTypeToken.Text == "optional") { KeywordOptional = ParameterTypeToken; ParameterTypeToken = ParameterTypeToken.SkipTo(); } #endregion var ParameterType = ToTypeReference(ParameterTypeToken); var param = new IDLParameter { KeywordAttribute = KeywordAttribute, KeywordIn = KeywordIn, KeywordOptional = KeywordOptional, ParameterType = ParameterType, }; // like the const param.Name = ParameterType.Terminator.SkipTo().AssertName(); #region DefaultValue if (param.Name.SkipTo().Text == "=") { param.KeywordAssignment = param.Name.SkipTo().AssertSymbol("="); param.DefaultValue = param.KeywordAssignment.SkipTo().ToNumericLiteral(); Parameters.Add(param); return(param.DefaultValue.Terminator.SkipTo()); } #endregion Parameters.Add(param); return(param.Name.SkipTo()); } return(p); } ).AssertSymbol(")"); }