bug163 bug164 bug166

R=ken
OCL=30889
CL=30889
diff --git a/src/cmd/gc/go.y b/src/cmd/gc/go.y
index 8e844e3..fa6e1c7 100644
--- a/src/cmd/gc/go.y
+++ b/src/cmd/gc/go.y
@@ -344,7 +344,8 @@
 
 varoptsemi:
 	{
-		yyoptsemi('=');
+		if(yylast == LSEMIBRACE)
+			yyoptsemi('=');
 	}
 
 vardcl:
diff --git a/src/cmd/gc/lex.c b/src/cmd/gc/lex.c
index 05671cc..586dc47 100644
--- a/src/cmd/gc/lex.c
+++ b/src/cmd/gc/lex.c
@@ -811,10 +811,13 @@
 				cp[c1++] = c;
 				if(fullrune(cp, c1)) {
 					chartorune(&rune, cp);
-					 if(isfrog(rune)) {
-					 	yyerror("illegal character 0x%ux", rune);
-					 	goto l0;
-					 }
+					if(isfrog(rune)) {
+						yyerror("illegal character 0x%ux", rune);
+						goto l0;
+					}
+					// 0xb7 · is used for internal names
+					if(!isalpharune(c) && !isdigitrune(c) && c != 0xb7)
+						yyerror("invalid identifier character 0x%ux", rune);
 					break;
 				}
 				c = getc();
diff --git a/src/pkg/http/request.go b/src/pkg/http/request.go
index 59801e1..0cc83a8 100644
--- a/src/pkg/http/request.go
+++ b/src/pkg/http/request.go
@@ -173,7 +173,7 @@
 	Loop:
 		for {
 			var nr, nw int;
-			var er, ew os.Error
+			var er, ew os.Error;
 			if nr, er = req.Body.Read(buf); nr > 0 {
 				if er == nil || er == os.EOF {
 					fmt.Fprintf(w, "%x\r\n", nr);
diff --git a/test/bugs/bug164.go b/test/bugs/bug164.go
deleted file mode 100644
index 7a78c86..0000000
--- a/test/bugs/bug164.go
+++ /dev/null
@@ -1,18 +0,0 @@
-// $G $D/$F.go
-
-// Copyright 2009 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.
-
-package main
-
-// Multi-line string literal do not allow newline chars according to spec
-// but 6g accepts this code with the newlines interpreted as newlines.
-
-const s = `
-Hello, World!
-`
-
-func main() {
-	print(s)
-}
diff --git a/test/bugs/bug163.go b/test/fixedbugs/bug163.go
similarity index 80%
rename from test/bugs/bug163.go
rename to test/fixedbugs/bug163.go
index 30d2cab..c1eec4c 100644
--- a/test/bugs/bug163.go
+++ b/test/fixedbugs/bug163.go
@@ -9,5 +9,5 @@
 import "fmt"
 
 func main() {
-	日本語 := 1;	// Japanese ideographs are not letters
+	日本語 := 1;	// ERROR "identifier"
 }
diff --git a/test/bugs/bug163.go b/test/fixedbugs/bug164.go
similarity index 66%
copy from test/bugs/bug163.go
copy to test/fixedbugs/bug164.go
index 30d2cab..746f631 100644
--- a/test/bugs/bug163.go
+++ b/test/fixedbugs/bug164.go
@@ -1,4 +1,4 @@
-// errchk $G $D/$F.go
+// $G $D/$F.go
 
 // Copyright 2009 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
@@ -6,8 +6,12 @@
 
 package main
 
-import "fmt"
+// Multi-line string literal now allowed.
+
+const s = `
+Hello, World!
+`
 
 func main() {
-	日本語 := 1;	// Japanese ideographs are not letters
+	print(s)
 }
diff --git a/test/bugs/bug166.go b/test/fixedbugs/bug166.go
similarity index 100%
rename from test/bugs/bug166.go
rename to test/fixedbugs/bug166.go
diff --git a/test/golden.out b/test/golden.out
index d83fd0c..3f15f48 100644
--- a/test/golden.out
+++ b/test/golden.out
@@ -105,15 +105,6 @@
 123
 BUG: should fail
 
-=========== bugs/bug163.go
-BUG: should not compile
-
-=========== bugs/bug164.go
-BUG: should not compile
-
-=========== bugs/bug166.go
-BUG: errchk: command succeeded unexpectedly:  6g bugs/bug166.go
-
 =========== fixedbugs/bug016.go
 fixedbugs/bug016.go:7: constant -3 overflows uint