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); }
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); }