func parseFunc(p *parser) *ast.Func { ret := new(ast.Func) ret.Kw = p.ExpectKeyword("func") ret.Name = p.Expect(Operand) if ret.Name != nil { name := ret.Name.Lit if !IsIdent(name) { p.Errorf(ret.Name.Pos, "invalid func name %q", name) } } ret.Lbrace = p.Expect(Lbrace) if p.skipErrStmt() { // header broken return ret } parseFuncStmts(p, ret) ret.Rbrace = p.Expect(Rbrace) ret.Semi = p.Expect(Semi) p.skipErrStmt() return ret }