]> Cypherpunks repositories - gostls13.git/commitdiff
gc: implement and test \r in raw strings
authorRuss Cox <rsc@golang.org>
Thu, 15 Dec 2011 15:47:09 +0000 (10:47 -0500)
committerRuss Cox <rsc@golang.org>
Thu, 15 Dec 2011 15:47:09 +0000 (10:47 -0500)
For issue 680.

R=ken2
CC=golang-dev
https://golang.org/cl/5492046

src/cmd/gc/lex.c
test/crlf.go [new file with mode: 0644]

index b582ab5c4f298812f75842ed0f7077b877170048..ba9148726cd2de9c6c2e0a9a7cad937f9b0944c3 100644 (file)
@@ -840,6 +840,8 @@ l0:
                                ncp += ncp;
                        }
                        c = getr();
+                       if(c == '\r')
+                               continue;
                        if(c == EOF) {
                                yyerror("eof in string");
                                break;
diff --git a/test/crlf.go b/test/crlf.go
new file mode 100644 (file)
index 0000000..292b63b
--- /dev/null
@@ -0,0 +1,52 @@
+// $G $D/$F.go && $L $F.$A && ./$A.out >tmp.go &&
+// $G tmp.go && $L tmp.$A && ./$A.out
+// rm -f tmp.go
+
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Test source files and strings containing \r and \r\n.
+
+package main
+
+import (
+       "fmt"
+       "strings"
+)
+
+func main() {
+       prog = strings.Replace(prog, "BQ", "`", -1)
+       prog = strings.Replace(prog, "CR", "\r", -1)
+       fmt.Print(prog)
+}
+
+var prog = `
+package main
+CR
+
+import "fmt"
+
+var CR s = "hello\n" + CR
+       " world"CR
+
+var t = BQhelloCR
+ worldBQ
+
+var u = BQhCReCRlCRlCRoCR
+ worldBQ
+
+var golden = "hello\n world"
+
+func main() {
+       if s != golden {
+               fmt.Printf("s=%q, want %q", s, golden)
+       }
+       if t != golden {
+               fmt.Printf("t=%q, want %q", t, golden)
+       }
+       if u != golden {
+               fmt.Printf("u=%q, want %q", u, golden)
+       }
+}
+`