if file.Size() != len(src) {
panic(fmt.Sprintf("file size (%d) does not match src len (%d)", file.Size(), len(src)))
}
- s.file = file
- s.dir, _ = filepath.Split(file.Name())
- s.src = src
- s.err = err
- s.mode = mode
-
- s.ch = ' '
- s.offset = 0
- s.rdOffset = 0
- s.lineOffset = 0
- s.insertSemi = false
- s.ErrorCount = 0
+
+ dir, _ := filepath.Split(file.Name())
+
+ *s = Scanner{
+ file: file,
+ dir: dir,
+ src: src,
+ err: err,
+ mode: mode,
+
+ ch: ' ',
+ }
s.next()
if s.ch == bom {
}
}
}
+
+func TestScanReuseSemiInNewlineComment(t *testing.T) {
+ fset := token.NewFileSet()
+
+ const src = "identifier /*a\nb*/ + other"
+ var s Scanner
+ s.Init(fset.AddFile("test.go", -1, len(src)), []byte(src), func(pos token.Position, msg string) {
+ t.Fatal(msg)
+ }, ScanComments)
+
+ s.Scan() // IDENT(identifier)
+
+ _, tok, _ := s.Scan() // COMMENT(/*a\nb*/)
+ if tok != token.COMMENT {
+ t.Fatalf("tok = %v; want = token.SEMICOLON", tok)
+ }
+
+ s.Init(fset.AddFile("test.go", -1, len(src)), []byte(src), func(pos token.Position, msg string) {
+ t.Fatal(msg)
+ }, ScanComments)
+
+ _, tok, _ = s.Scan()
+ if tok != token.IDENT {
+ t.Fatalf("tok = %v; want = token.IDENT", tok)
+ }
+}