Esempio n. 1
0
        public static IDLTypeReference ToTypeReference(this IDLParserToken source)
        {
            var Namespace = source;
            var Operator = Namespace.Next.CombineToSymbol("::");
            var Name = default(IDLParserToken);

            if (Operator.Text == "::")
            {
                Name = Operator.Next;
            }
            else
            {
                if (Namespace.Text == "unsigned")
                    Name = Operator.Next;
                else
                {
                    Name = Namespace;
                    Namespace = null;
                }

            }

            #region long long
            if (Name.Text == "long")
            {
                var k = Name.SkipTo();

                if (k.Text == "long")
                {
                    Name = new[] { Name, Name.Next, k }.Combine();
                }
            }
            #endregion


            while (Name.Next.Text == ".")
            {
                var NameFragment = Name.Next.SkipTo().AssertName();

                Name = new[] { Name, Name.Next, NameFragment }.Combine();
            }




            var r = new IDLTypeReference
            {
                Name = Name.AssertName(),
                Operator = Operator,
                Namespace = Namespace
            };

            #region generic
            if (Name.Next.Text == "<")
            {
                r.GenericParameterSymbols.Item1 = Name.Next;
                r.GenericParameterSymbols.Item2 = r.GenericParameterSymbols.Item1.UntilSelected(
                    pp =>
                    {
                        if (pp.Text != ">")
                        {
                            if (r.GenericParameters.Count > 0)
                            {
                                pp.AssertSymbol(",");
                            }

                            var rr = ToTypeReference(pp.SkipTo());

                            r.GenericParameters.Add(rr);

                            return rr.Terminator.SkipTo();
                        }

                        return pp;
                    }
                ).AssertSymbol(">");
            }
            #endregion


            if (Name.Next.Text == "[")
            {
                r.ArraySymbols.Item1 = Name.Next;
                r.ArraySymbols.Item2 = r.ArraySymbols.Item1.SkipTo().AssertSymbol("]");
            }


            if (r.Terminator.Next.Text == "?")
            {
                r.NullableSymbol = r.Terminator.Next;

            }

            return r;
        }
Esempio n. 2
0
        public static IDLTypeReference ToTypeReference(this IDLParserToken source)
        {
            var Namespace = source;
            var Operator  = Namespace.Next.CombineToSymbol("::");
            var Name      = default(IDLParserToken);

            if (Operator.Text == "::")
            {
                Name = Operator.Next;
            }
            else
            {
                if (Namespace.Text == "unsigned")
                {
                    Name = Operator.Next;
                }
                else
                {
                    Name      = Namespace;
                    Namespace = null;
                }
            }

            #region long long
            if (Name.Text == "long")
            {
                var k = Name.SkipTo();

                if (k.Text == "long")
                {
                    Name = new[] { Name, Name.Next, k }.Combine();
                }
            }
            #endregion


            while (Name.Next.Text == ".")
            {
                var NameFragment = Name.Next.SkipTo().AssertName();

                Name = new[] { Name, Name.Next, NameFragment }.Combine();
            }



            var r = new IDLTypeReference
            {
                Name      = Name.AssertName(),
                Operator  = Operator,
                Namespace = Namespace
            };

            #region generic
            if (Name.Next.Text == "<")
            {
                r.GenericParameterSymbols.Item1 = Name.Next;
                r.GenericParameterSymbols.Item2 = r.GenericParameterSymbols.Item1.UntilSelected(
                    pp =>
                {
                    if (pp.Text != ">")
                    {
                        if (r.GenericParameters.Count > 0)
                        {
                            pp.AssertSymbol(",");
                        }

                        var rr = ToTypeReference(pp.SkipTo());

                        r.GenericParameters.Add(rr);

                        return(rr.Terminator.SkipTo());
                    }

                    return(pp);
                }
                    ).AssertSymbol(">");
            }
            #endregion


            if (Name.Next.Text == "[")
            {
                r.ArraySymbols.Item1 = Name.Next;
                r.ArraySymbols.Item2 = r.ArraySymbols.Item1.SkipTo().AssertSymbol("]");
            }


            if (r.Terminator.Next.Text == "?")
            {
                r.NullableSymbol = r.Terminator.Next;
            }

            return(r);
        }