Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
0
        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(")");
        }
Exemplo n.º 3
0
        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(")");
        }