]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: allow pointers to strings to be printed
authorLee Packham <lpackham@gmail.com>
Mon, 30 Mar 2015 16:36:49 +0000 (17:36 +0100)
committerIan Lance Taylor <iant@golang.org>
Mon, 30 Mar 2015 23:59:24 +0000 (23:59 +0000)
Being able to printer pointers to strings means one will able to output
the result of things like the flag library and other components that use
string pointers.

While here, adjusted the tests for gdb to test original string pretty
printing as well as pointers to them. It was doing it via the map before
but for completeness this ensures it's tested as a unit.

Change-Id: I4926547ae4fa6c85ef74301e7d96d49ba4a7b0c6
Reviewed-on: https://go-review.googlesource.com/8217
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/runtime/runtime-gdb.py
src/runtime/runtime-gdb_test.go

index 9f2ba9f934878f1717d68e6eb7a594c5a2fc25d1..c70aea71bb75f1cc4b64c326339e8a09e3592a42 100644 (file)
@@ -60,7 +60,7 @@ class SliceValue:
 class StringTypePrinter:
        "Pretty print Go strings."
 
-       pattern = re.compile(r'^struct string$')
+       pattern = re.compile(r'^struct string( \*)?$')
 
        def __init__(self, val):
                self.val = val
index 7184120122811c813b5eea585dc405a567938651..7569d074665c426a8de333eea04901521846ada3 100644 (file)
@@ -31,7 +31,10 @@ func main() {
        mapvar := make(map[string]string,5)
        mapvar["abc"] = "def"
        mapvar["ghi"] = "jkl"
-       fmt.Println("hi") // line 8
+       strvar := "abc"
+       ptrvar := &strvar
+       fmt.Println("hi") // line 10
+       _ = ptrvar
 }
 `
 
@@ -63,7 +66,7 @@ func TestGdbPython(t *testing.T) {
 
        got, _ := exec.Command("gdb", "-nx", "-q", "--batch", "-iex",
                fmt.Sprintf("add-auto-load-safe-path %s/src/runtime", runtime.GOROOT()),
-               "-ex", "br main.go:8",
+               "-ex", "br main.go:10",
                "-ex", "run",
                "-ex", "echo BEGIN info goroutines\n",
                "-ex", "info goroutines",
@@ -71,6 +74,12 @@ func TestGdbPython(t *testing.T) {
                "-ex", "echo BEGIN print mapvar\n",
                "-ex", "print mapvar",
                "-ex", "echo END\n",
+               "-ex", "echo BEGIN print strvar\n",
+               "-ex", "print strvar",
+               "-ex", "echo END\n",
+               "-ex", "echo BEGIN print ptrvar\n",
+               "-ex", "print ptrvar",
+               "-ex", "echo END\n",
                filepath.Join(dir, "a.exe")).CombinedOutput()
 
        firstLine := bytes.SplitN(got, []byte("\n"), 2)[0]
@@ -94,4 +103,13 @@ func TestGdbPython(t *testing.T) {
        if bl := blocks["print mapvar"]; !printMapvarRe.MatchString(bl) {
                t.Fatalf("print mapvar failed: %s", bl)
        }
+
+       strVarRe := regexp.MustCompile(`\Q = "abc"\E$`)
+       if bl := blocks["print strvar"]; !strVarRe.MatchString(bl) {
+               t.Fatalf("print strvar failed: %s", bl)
+       }
+
+       if bl := blocks["print ptrvar"]; !strVarRe.MatchString(bl) {
+               t.Fatalf("print ptrvar failed: %s", bl)
+       }
 }