func (p *parser) readExtension(ext *ast.Extension) *parseError { if err := p.readToken("extend"); err != nil { return err } ext.Position = p.cur.astPosition() tok := p.next() if tok.err != nil { return tok.err } ext.Extendee = tok.value // checked during resolution if err := p.readToken("{"); err != nil { return err } for !p.done { tok := p.next() if tok.err != nil { return tok.err } if tok.value == "}" { // end of extension return nil } p.back() field := new(ast.Field) ext.Fields = append(ext.Fields, field) field.Up = ext // p.readFile uses this if err := p.readField(field); err != nil { return err } } return p.errorf("unexpected EOF while parsing extension") }