Source file test/fixedbugs/issue22662.go

     1  // run
     2  
     3  // Copyright 2018 The Go Authors. All rights reserved.
     4  // Use of this source code is governed by a BSD-style
     5  // license that can be found in the LICENSE file.
     6  
     7  // Verify effect of various line directives.
     8  // TODO: check columns
     9  
    10  package main
    11  
    12  import (
    13  	"fmt"
    14  	"runtime"
    15  )
    16  
    17  func check(file string, line int) {
    18  	_, f, l, ok := runtime.Caller(1)
    19  	if !ok {
    20  		panic("runtime.Caller(1) failed")
    21  	}
    22  	if f != file || l != line {
    23  		panic(fmt.Sprintf("got %s:%d; want %s:%d", f, l, file, line))
    24  	}
    25  }
    26  
    27  func main() {
    28  //-style line directives
    29  //line :1
    30  	check("??", 1) // no file specified
    31  //line foo.go:1
    32  	check("foo.go", 1)
    33  //line bar.go:10:20
    34  	check("bar.go", 10)
    35  //line :11:22
    36  	check("bar.go", 11) // no file, but column specified => keep old filename
    37  
    38  /*-style line directives */
    39  /*line :1*/ check("??", 1) // no file specified
    40  /*line foo.go:1*/ check("foo.go", 1)
    41  /*line bar.go:10:20*/ check("bar.go", 10)
    42  /*line :11:22*/ check("bar.go", 11) // no file, but column specified => keep old filename
    43  
    44  	/*line :10*/ check("??", 10); /*line foo.go:20*/ check("foo.go", 20); /*line :30:1*/ check("foo.go", 30)
    45  	check("foo.go", 31)
    46  }
    47  

View as plain text