From 17264df11223436a3b05f47f58a233961b43c3f6 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Thu, 15 Dec 2011 10:47:09 -0500 Subject: [PATCH] gc: implement and test \r in raw strings For issue 680. R=ken2 CC=golang-dev https://golang.org/cl/5492046 --- src/cmd/gc/lex.c | 2 ++ test/crlf.go | 52 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 test/crlf.go diff --git a/src/cmd/gc/lex.c b/src/cmd/gc/lex.c index b582ab5c4f2..ba9148726cd 100644 --- a/src/cmd/gc/lex.c +++ b/src/cmd/gc/lex.c @@ -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 index 00000000000..292b63bf4b3 --- /dev/null +++ b/test/crlf.go @@ -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) + } +} +`