// labels checks correct label use in body. func (check *Checker) labels(body *syntax.BlockStmt) { … } type block … // insert records a new label declaration for the current block. // The label must not have been declared before in any block. func (b *block) insert(s *syntax.LabeledStmt) { … } // gotoTarget returns the labeled statement in the current // or an enclosing block with the given label name, or nil. func (b *block) gotoTarget(name string) *syntax.LabeledStmt { … } // enclosingTarget returns the innermost enclosing labeled // statement with the given label name, or nil. func (b *block) enclosingTarget(name string) *syntax.LabeledStmt { … } // blockBranches processes a block's statement list and returns the set of outgoing forward jumps. // all is the scope of all declared labels, parent the set of labels declared in the immediately // enclosing block, and lstmt is the labeled statement this block is associated with (or nil). func (check *Checker) blockBranches(all *Scope, parent *block, lstmt *syntax.LabeledStmt, list []syntax.Stmt) []*syntax.BranchStmt { … }