public static InterfaceEntryNode Parse(Lexer lex) { InterfaceEntryNode n = new InterfaceEntryNode(); Token tkn; n.IsVirtual = lex.DequeueIf("virtual", out tkn); n.IsUnsafe = lex.DequeueIf("unsafe", out tkn); n.TypeName = TypeNode.Parse(lex); if (GenericParamNode.IsPresent(lex)) { n.GenericParams = GenericParamNode.Parse(lex); } tkn = lex.Dequeue(TokenType.Identifier); n.Identifier = tkn.Value; if (InterfaceFunctionNode.IsPresent(lex)) { n.Entry = InterfaceFunctionNode.Parse(lex); } else if (InterfacePropertyNode.IsPresent(lex)) { n.Entry = InterfacePropertyNode.Parse(lex); } else { throw ExceptionProvider.Syntax(lex.Peek().Cursor, "Unrecognized definition"); } return(n); }
public static InterfaceDefNode Parse(Lexer lex) { InterfaceDefNode n = new InterfaceDefNode(); lex.Dequeue("interface"); n.Identifier = ClassIdentNode.Parse(lex); if (ClassInheritNode.IsPresent(lex)) { n.Parents = ClassInheritNode.Parse(lex); } while (GenericConstraintNode.IsPresent(lex)) { n.Constraints.Add(GenericConstraintNode.Parse(lex)); } lex.Dequeue(TokenType.LBrace); while (InterfaceEntryNode.IsPresent(lex)) { n.Entries.Add(InterfaceEntryNode.Parse(lex)); } lex.Dequeue(TokenType.RBrace); return(n); }