- fixed a few tests and added 3 incorrectly succeeding tests
- updated go_lang.txt to be more uniform and match the implementation
- made makehtml work on Mac
- fixed a couple of bugs in go.atg

SVN=121520
diff --git a/doc/go_lang.txt b/doc/go_lang.txt
index 3b908f1..c8597f5 100644
--- a/doc/go_lang.txt
+++ b/doc/go_lang.txt
@@ -4,7 +4,7 @@
 Robert Griesemer, Rob Pike, Ken Thompson
 
 ----
-(May 14, 2008)
+(June 6, 2008)
 
 This document is a semi-informal specification/proposal for a new
 systems programming language.  The document is under active
@@ -1563,17 +1563,19 @@
 
 If statements have the traditional form except that the
 condition need not be parenthesized and the "then" statement
-must be in brace brackets.
+must be in brace brackets. The condition may be omitted in which
+case it is assumed to have the value "true".
 
-  IfStat = "if" [ SimpleStat ";" ] Expression Block [ "else" Statement ] .
+  IfStat = "if" [ [ SimpleStat ";" ] Expression ] Block [ "else" Statement ] .
 
   if x > 0 {
     return true;
   }
-  
-An if statement may include the declaration of a single temporary variable.
+
+An "if" statement may include the declaration of a single temporary variable.
 The scope of the declared variable extends to the end of the if statement, and
-the variable is initialized once before the statement is entered. 
+the variable is initialized once before the statement is entered. If a variable
+is declared, the condition cannot be omitted.
 
   if x := f(); x < y {
     return x;
diff --git a/test/func.go b/test/func.go
index 0bb551f..e5cb1e5 100644
--- a/test/func.go
+++ b/test/func.go
@@ -36,12 +36,12 @@
 	return 6;
 }
 
-func f7(a int) (int, float) {
+func f7(a int) (x int, y float) {
 	return 7, 7.0;
 }
 
 
-func f8(a int) (a int, b float) {
+func f8(a int) (x int, y float) {
 	return 8, 8.0;
 }
 
diff --git a/test/func1.go b/test/func1.go
new file mode 100644
index 0000000..2f92c35
--- /dev/null
+++ b/test/func1.go
@@ -0,0 +1,16 @@
+// errchk $G $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
+
+func f1(a int) (int, float) {  // BUG multiple return values must have names
+	return 7, 7.0;
+}
+
+
+func f2(a int) (a int, b float) {  // BUG return value names must be different from parameter names
+	return 8, 8.0;
+}
diff --git a/test/golden.out b/test/golden.out
index 56105a5..cc611d4 100644
--- a/test/golden.out
+++ b/test/golden.out
@@ -23,6 +23,9 @@
 main_f4: doasm: notfound from=75 to=10 (24)    IDIVL   $2,AX
 BUG: known to fail incorrectly
 
+=========== ./func1.go
+BUG: known to succeed incorrectly
+
 =========== ./hashmap.go
 hashmap.go:46: fatal error: optoas: no entry LSH-<uint32>UINT32
 BUG: known to fail incorrectly
@@ -32,6 +35,9 @@
 
 =========== ./if.go
 
+=========== ./if1.go
+BUG: known to succeed incorrectly
+
 =========== ./int_lit.go
 int_lit.go:5: syntax error
 BUG: known to fail incorrectly
@@ -52,6 +58,9 @@
 
 =========== ./switch.go
 
+=========== ./switch1.go
+BUG: known to succeed incorrectly
+
 =========== ./test0.go
 test0.go:23: addtyp: renaming Point/<Point>{<x><int32>INT32;<y><int32>INT32;} to Point2/<Point2>FORW
 test0.go:48: illegal types for operand
diff --git a/test/if.go b/test/if.go
index 2018f70..beb7d6b 100644
--- a/test/if.go
+++ b/test/if.go
@@ -50,7 +50,7 @@
 	assertequal(count, 1, "if empty");
 
 	count = 0;
-	if one := 1; {
+	if one := 1; true {
 		count = count + one;	
 	}
 	assertequal(count, 1, "if empty one");
diff --git a/test/if1.go b/test/if1.go
new file mode 100644
index 0000000..67a58cd
--- /dev/null
+++ b/test/if1.go
@@ -0,0 +1,14 @@
+// $G $F.go && $L $F.$A && ./$A.out
+
+// 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
+
+func main() {
+	count := 0;
+	if one := 1; {  // BUG if there is a simple stat, the condition must be present
+		count = count + one;	
+	}
+}
diff --git a/test/switch.go b/test/switch.go
index 1184230..6022656 100644
--- a/test/switch.go
+++ b/test/switch.go
@@ -35,7 +35,7 @@
 	case i5 > x: assert(false, ">");
 	}
 
-	switch x := 5; {  // BUG?: true should not be necessary but now made mandatory in go_lang.txt
+	switch x := 5; true {
 	case i5 < x: assert(false, "<");
 	case i5 == x: assert(true, "!");
 	case i5 > x: assert(false, ">");
diff --git a/test/switch1.go b/test/switch1.go
new file mode 100644
index 0000000..f2f006f
--- /dev/null
+++ b/test/switch1.go
@@ -0,0 +1,16 @@
+// $G $F.go && $L $F.$A && ./$A.out
+
+// 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
+
+func main() {
+  i := 0;
+	switch x := 5; {  // BUG if there is a simple stat, the condition must be present
+	case i < x:
+	case i == x:
+	case i > x:
+	}
+}