Exemple #1
0
        static AstInterfaceNode ParseInterface(AstAttributes interfaceAttrs, ref TokenParser parser)
        {
            var    interfaceName = parser.ParseIdentifier();
            string inheritsFrom  = null;

            if (parser.TryConsume(":"))
            {
                inheritsFrom = parser.ParseIdentifier();
            }

            EnsureOpenBracket(ref parser);
            var rv = new AstInterfaceNode
            {
                Name = interfaceName, Attributes = interfaceAttrs, Inherits = inheritsFrom
            };

            while (!parser.TryConsume('}') && !parser.Eof)
            {
                var memberAttrs = ParseLocalAttributes(ref parser);
                var returnType  = ParseType(ref parser);
                var name        = parser.ParseIdentifier();
                var member      = new AstInterfaceMemberNode
                {
                    Name = name, ReturnType = returnType, Attributes = memberAttrs
                };
                rv.Add(member);

                parser.Consume('(');
                while (true)
                {
                    if (parser.TryConsume(')'))
                    {
                        break;
                    }

                    var argumentAttrs = ParseLocalAttributes(ref parser);
                    var type          = ParseType(ref parser);
                    var argName       = parser.ParseIdentifier();
                    member.Add(new AstInterfaceMemberArgumentNode
                    {
                        Name = argName, Type = type, Attributes = argumentAttrs
                    });

                    if (parser.TryConsume(')'))
                    {
                        break;
                    }
                    if (parser.TryConsume(','))
                    {
                        continue;
                    }
                    throw new ParseException("Unexpected character", ref parser);
                }

                parser.Consume(';');
            }

            return(rv);
        }
Exemple #2
0
 protected override void VisitInterfaceMember(AstInterfaceMemberNode member)
 {
     if (member.HasAttribute("intptr"))
     {
         ConvertIntPtr(member.ReturnType);
     }
     base.VisitInterfaceMember(member);
 }
 protected override void VisitInterfaceMember(AstInterfaceMemberNode member)
 {
     if (member.HasAttribute("intptr"))
     {
         ConvertIntPtr(member.ReturnType);
     }
     if (member.HasAttribute("propget") && !member.Name.StartsWith("Get"))
     {
         member.Name = "Get" + member.Name;
     }
     if (member.HasAttribute("propput") && !member.Name.StartsWith("Set"))
     {
         member.Name = "Set" + member.Name;
     }
     base.VisitInterfaceMember(member);
 }