func (p *noder) pragma(pos, line int, text string) syntax.Pragma { switch { case strings.HasPrefix(text, "line "): // Want to use LastIndexByte below but it's not defined in Go1.4 and bootstrap fails. i := strings.LastIndex(text, ":") // look from right (Windows filenames may contain ':') if i < 0 { break } n, err := strconv.Atoi(text[i+1:]) if err != nil { // TODO: make this an error instead? it is almost certainly a bug. break } if n > 1e8 { p.error(syntax.Error{Pos: pos, Line: line, Msg: "line number out of range"}) errorexit() } if n <= 0 { break } lexlineno = p.baseline + int32(line) linehistupdate(text[5:i], n) case strings.HasPrefix(text, "go:linkname "): // Record line number so we can emit an error later if // the file doesn't import package unsafe. p.linknames = append(p.linknames, line) f := strings.Fields(text) if len(f) != 3 { p.error(syntax.Error{Pos: pos, Line: line, Msg: "usage: //go:linkname localname linkname"}) break } lookup(f[1]).Linkname = f[2] case strings.HasPrefix(text, "go:cgo_"): pragcgobuf += pragcgo(text) fallthrough // because of //go:cgo_unsafe_args default: verb := text if i := strings.Index(text, " "); i >= 0 { verb = verb[:i] } return syntax.Pragma(pragmaValue(verb)) } return 0 }
func (p *noder) pragma(pos, line int, text string) syntax.Pragma { switch { case strings.HasPrefix(text, "line "): i := strings.IndexByte(text, ':') if i < 0 { break } n, err := strconv.Atoi(text[i+1:]) if err != nil { // todo: make this an error instead? it is almost certainly a bug. break } if n > 1e8 { p.error(pos, line, "line number out of range") errorexit() } if n <= 0 { break } lexlineno = p.baseline + int32(line) linehistupdate(text[5:i], n) case strings.HasPrefix(text, "go:linkname "): // Record line number so we can emit an error later if // the file doesn't import package unsafe. p.linknames = append(p.linknames, line) f := strings.Fields(text) if len(f) != 3 { p.error(pos, line, "usage: //go:linkname localname linkname") break } lookup(f[1]).Linkname = f[2] case strings.HasPrefix(text, "go:cgo_"): pragcgobuf += pragcgo(text) fallthrough // because of //go:cgo_unsafe_args default: verb := text if i := strings.Index(text, " "); i >= 0 { verb = verb[:i] } return syntax.Pragma(pragmaValue(verb)) } return 0 }