cmd/compile/internal/gc: cleaning lex.go

Cleaning along the way:
-convert variable types from int to bool
-remove unnecessary functions
-remove unnecessary type conversion
-remove unnecessary variable declarations
-transform struct{string,string} with lookup to map[string]string

This change passes go build -toolexec 'toolstash -cmp' -a std.

Change-Id: I259728fe4afd7f23b67f08fab856ce0abee57b21
Reviewed-on: https://go-review.googlesource.com/14435
Reviewed-by: Ian Lance Taylor <iant@golang.org>
diff --git a/src/cmd/compile/internal/gc/go.go b/src/cmd/compile/internal/gc/go.go
index a39cc6d..f3cf173 100644
--- a/src/cmd/compile/internal/gc/go.go
+++ b/src/cmd/compile/internal/gc/go.go
@@ -382,12 +382,12 @@
 type Io struct {
 	infile     string
 	bin        *obj.Biobuf
-	nlsemi     int
-	eofnl      int
+	cp         string // used for content when bin==nil
 	last       int
 	peekc      int
-	peekc1     int    // second peekc for ...
-	cp         string // used for content when bin==nil
+	peekc1     int // second peekc for ...
+	nlsemi     bool
+	eofnl      bool
 	importsafe bool
 }
 
@@ -598,7 +598,7 @@
 
 var statuniqgen int // name generator for static temps
 
-var loophack int
+var loophack bool
 
 var iota_ int32
 
diff --git a/src/cmd/compile/internal/gc/go.y b/src/cmd/compile/internal/gc/go.y
index 6d148e4..599449f 100644
--- a/src/cmd/compile/internal/gc/go.y
+++ b/src/cmd/compile/internal/gc/go.y
@@ -2311,6 +2311,6 @@
 	// set up for another one now that we're done.
 	// See comment in lex.C about loophack.
 	if lbr == LBODY {
-		loophack = 1
+		loophack = true
 	}
 }
diff --git a/src/cmd/compile/internal/gc/lex.go b/src/cmd/compile/internal/gc/lex.go
index 5150e2b..5bd6688 100644
--- a/src/cmd/compile/internal/gc/lex.go
+++ b/src/cmd/compile/internal/gc/lex.go
@@ -26,7 +26,7 @@
 
 var yylast int
 
-var imported_unsafe int
+var imported_unsafe bool
 
 var (
 	goos    string
@@ -60,26 +60,6 @@
 	{"wb", &Debug_wb},                 // print information about write barriers
 }
 
-// Our own isdigit, isspace, isalpha, isalnum that take care
-// of EOF and other out of range arguments.
-func yy_isdigit(c int) bool {
-	return c >= 0 && c <= 0xFF && isdigit(c)
-}
-
-func yy_isspace(c int) bool {
-	return c == ' ' || c == '\t' || c == '\n' || c == '\r'
-}
-
-func yy_isalpha(c int) bool {
-	return 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z'
-}
-
-func yy_isalnum(c int) bool {
-	return c >= 0 && c <= 0xFF && isalnum(c)
-}
-
-// Disallow use of isdigit etc.
-
 const (
 	EOF = -1
 )
@@ -334,8 +314,8 @@
 
 		curio.peekc = 0
 		curio.peekc1 = 0
-		curio.nlsemi = 0
-		curio.eofnl = 0
+		curio.nlsemi = false
+		curio.eofnl = false
 		curio.last = 0
 
 		// Skip initial BOM if present.
@@ -346,7 +326,7 @@
 		block = 1
 		iota_ = -1000000
 
-		imported_unsafe = 0
+		imported_unsafe = false
 
 		yyparse()
 		if nsyntaxerrors != 0 {
@@ -587,7 +567,7 @@
 // is this path a local name?  begins with ./ or ../ or /
 func islocalname(name string) bool {
 	return strings.HasPrefix(name, "/") ||
-		Ctxt.Windows != 0 && len(name) >= 3 && yy_isalpha(int(name[0])) && name[1] == ':' && name[2] == '/' ||
+		Ctxt.Windows != 0 && len(name) >= 3 && isAlpha(int(name[0])) && name[1] == ':' && name[2] == '/' ||
 		strings.HasPrefix(name, "./") || name == "." ||
 		strings.HasPrefix(name, "../") || name == ".."
 }
@@ -702,7 +682,7 @@
 
 		importpkg = mkpkg(f.U.(string))
 		cannedimports("unsafe.o", unsafeimport)
-		imported_unsafe = 1
+		imported_unsafe = true
 		return
 	}
 
@@ -803,19 +783,18 @@
 	curio.peekc = 0
 	curio.peekc1 = 0
 	curio.infile = file
-	curio.nlsemi = 0
+	curio.nlsemi = false
 	typecheckok = true
 
-	var c int32
 	for {
-		c = int32(getc())
+		c := getc()
 		if c == EOF {
 			break
 		}
 		if c != '$' {
 			continue
 		}
-		c = int32(getc())
+		c = getc()
 		if c == EOF {
 			break
 		}
@@ -854,7 +833,7 @@
 	curio.peekc1 = 0
 	curio.infile = file
 	curio.cp = cp
-	curio.nlsemi = 0
+	curio.nlsemi = false
 	curio.importsafe = false
 
 	typecheckok = true
@@ -864,7 +843,7 @@
 func isfrog(c int) bool {
 	// complain about possibly invisible control characters
 	if c < ' ' {
-		return !yy_isspace(c) // exclude good white space
+		return !isSpace(c) // exclude good white space
 	}
 
 	if 0x7f <= c && c <= 0xa0 { // DEL, unicode block including unbreakable space.
@@ -874,8 +853,8 @@
 }
 
 type Loophack struct {
-	v    int
 	next *Loophack
+	v    bool
 }
 
 var _yylex_lstk *Loophack
@@ -885,7 +864,6 @@
 	var escflag int
 	var v int64
 	var cp *bytes.Buffer
-	var rune_ uint
 	var s *Sym
 	var h *Loophack
 	var str string
@@ -894,8 +872,8 @@
 
 l0:
 	c := getc()
-	if yy_isspace(c) {
-		if c == '\n' && curio.nlsemi != 0 {
+	if isSpace(c) {
+		if c == '\n' && curio.nlsemi {
 			ungetc(c)
 			if Debug['x'] != 0 {
 				fmt.Printf("lex: implicit semi\n")
@@ -916,20 +894,20 @@
 		goto talph
 	}
 
-	if yy_isalpha(c) {
+	if isAlpha(c) {
 		cp = &lexbuf
 		cp.Reset()
 		goto talph
 	}
 
-	if yy_isdigit(c) {
+	if isDigit(c) {
 		cp = &lexbuf
 		cp.Reset()
 		if c != '0' {
 			for {
 				cp.WriteByte(byte(c))
 				c = getc()
-				if yy_isdigit(c) {
+				if isDigit(c) {
 					continue
 				}
 				if c == '.' {
@@ -951,7 +929,7 @@
 			for {
 				cp.WriteByte(byte(c))
 				c = getc()
-				if yy_isdigit(c) {
+				if isDigit(c) {
 					continue
 				}
 				if c >= 'a' && c <= 'f' {
@@ -976,7 +954,7 @@
 
 		c1 = 0
 		for {
-			if !yy_isdigit(c) {
+			if !isDigit(c) {
 				break
 			}
 			if c < '0' || c > '7' {
@@ -1014,7 +992,7 @@
 
 	case '.':
 		c1 = getc()
-		if yy_isdigit(c1) {
+		if isDigit(c1) {
 			cp = &lexbuf
 			cp.Reset()
 			cp.WriteByte(byte(c))
@@ -1048,8 +1026,7 @@
 			if v < utf8.RuneSelf || escflag != 0 {
 				cp.WriteByte(byte(v))
 			} else {
-				rune_ = uint(v)
-				cp.WriteRune(rune(rune_))
+				cp.WriteRune(rune(v))
 			}
 		}
 
@@ -1106,23 +1083,23 @@
 	case '/':
 		c1 = getc()
 		if c1 == '*' {
-			nl := 0
+			nl := false
 			for {
 				c = int(getr())
 				if c == '\n' {
-					nl = 1
+					nl = true
 				}
 				for c == '*' {
 					c = int(getr())
 					if c == '/' {
-						if nl != 0 {
+						if nl {
 							ungetc('\n')
 						}
 						goto l0
 					}
 
 					if c == '\n' {
-						nl = 1
+						nl = true
 					}
 				}
 
@@ -1308,15 +1285,15 @@
 		 *
 		 * when we see the keyword, the next
 		 * non-parenthesized '{' becomes an LBODY.
-		 * loophack is normally 0.
-		 * a keyword makes it go up to 1.
-		 * parens push loophack onto a stack and go back to 0.
-		 * a '{' with loophack == 1 becomes LBODY and disables loophack.
+		 * loophack is normally false.
+		 * a keyword sets it to true.
+		 * parens push loophack onto a stack and go back to false.
+		 * a '{' with loophack == true becomes LBODY and disables loophack.
 		 *
 		 * i said it was clumsy.
 		 */
 	case '(', '[':
-		if loophack != 0 || _yylex_lstk != nil {
+		if loophack || _yylex_lstk != nil {
 			h = new(Loophack)
 			if h == nil {
 				Flusherrors()
@@ -1327,7 +1304,7 @@
 			h.v = loophack
 			h.next = _yylex_lstk
 			_yylex_lstk = h
-			loophack = 0
+			loophack = false
 		}
 
 		goto lx
@@ -1342,11 +1319,11 @@
 		goto lx
 
 	case '{':
-		if loophack == 1 {
+		if loophack {
 			if Debug['x'] != 0 {
 				fmt.Printf("%v lex: LBODY\n", Ctxt.Line(int(lexlineno)))
 			}
-			loophack = 0
+			loophack = false
 			return LBODY
 		}
 
@@ -1395,14 +1372,14 @@
 	for {
 		if c >= utf8.RuneSelf {
 			ungetc(c)
-			rune_ = uint(getr())
+			r := rune(getr())
 
 			// 0xb7 ยท is used for internal names
-			if !unicode.IsLetter(rune(rune_)) && !unicode.IsDigit(rune(rune_)) && (importpkg == nil || rune_ != 0xb7) {
-				Yyerror("invalid identifier character U+%04x", rune_)
+			if !unicode.IsLetter(r) && !unicode.IsDigit(r) && (importpkg == nil || r != 0xb7) {
+				Yyerror("invalid identifier character U+%04x", r)
 			}
-			cp.WriteRune(rune(rune_))
-		} else if !yy_isalnum(c) && c != '_' {
+			cp.WriteRune(r)
+		} else if !isAlnum(c) && c != '_' {
 			break
 		} else {
 			cp.WriteByte(byte(c))
@@ -1419,7 +1396,7 @@
 		goto l0
 
 	case LFOR, LIF, LSWITCH, LSELECT:
-		loophack = 1 // see comment about loophack above
+		loophack = true // see comment about loophack above
 	}
 
 	if Debug['x'] != 0 {
@@ -1450,7 +1427,7 @@
 	for {
 		cp.WriteByte(byte(c))
 		c = getc()
-		if !yy_isdigit(c) {
+		if !isDigit(c) {
 			break
 		}
 	}
@@ -1475,10 +1452,10 @@
 		c = getc()
 	}
 
-	if !yy_isdigit(c) {
+	if !isDigit(c) {
 		Yyerror("malformed floating point constant exponent")
 	}
-	for yy_isdigit(c) {
+	for isDigit(c) {
 		cp.WriteByte(byte(c))
 		c = getc()
 	}
@@ -1548,7 +1525,7 @@
 
 func more(pp *string) bool {
 	p := *pp
-	for p != "" && yy_isspace(int(p[0])) {
+	for p != "" && isSpace(int(p[0])) {
 		p = p[1:]
 	}
 	*pp = p
@@ -1594,7 +1571,7 @@
 		}
 
 		if verb == "go:linkname" {
-			if imported_unsafe == 0 {
+			if !imported_unsafe {
 				Yyerror("//go:linkname only allowed in Go files that import \"unsafe\"")
 			}
 			f := strings.Fields(cmd)
@@ -1711,7 +1688,7 @@
 		return ""
 	}
 	i := 0
-	for i < len(p) && !yy_isspace(int(p[i])) && p[i] != '"' {
+	for i < len(p) && !isSpace(int(p[i])) && p[i] != '"' {
 		i++
 	}
 	sym := p[:i]
@@ -1746,9 +1723,7 @@
 	verb := text[3:] // skip "go:"
 
 	if verb == "cgo_dynamic_linker" || verb == "dynlinker" {
-		var ok bool
-		var p string
-		p, ok = getquoted(&q)
+		p, ok := getquoted(&q)
 		if !ok {
 			Yyerror("usage: //go:cgo_dynamic_linker \"path\"")
 			return
@@ -1830,9 +1805,7 @@
 	}
 
 	if verb == "cgo_ldflag" {
-		var ok bool
-		var p string
-		p, ok = getquoted(&q)
+		p, ok := getquoted(&q)
 		if !ok {
 			Yyerror("usage: //go:cgo_ldflag \"arg\"")
 			return
@@ -1866,7 +1839,7 @@
 func yylex(yylval *yySymType) int32 {
 	lx := int(_yylex(yylval))
 
-	if curio.nlsemi != 0 && lx == EOF {
+	if curio.nlsemi && lx == EOF {
 		// Treat EOF as "end of line" for the purposes
 		// of inserting a semicolon.
 		lx = ';'
@@ -1884,10 +1857,10 @@
 		')',
 		'}',
 		']':
-		curio.nlsemi = 1
+		curio.nlsemi = true
 
 	default:
-		curio.nlsemi = 0
+		curio.nlsemi = false
 	}
 
 	// Track last two tokens returned by yylex.
@@ -1942,10 +1915,10 @@
 
 		// insert \n at EOF
 	case EOF:
-		if curio.eofnl != 0 || curio.last == '\n' {
+		if curio.eofnl || curio.last == '\n' {
 			return EOF
 		}
-		curio.eofnl = 1
+		curio.eofnl = true
 		c = '\n'
 		fallthrough
 
@@ -2505,77 +2478,67 @@
 	return fmt.Sprintf("LEX-%d", lex)
 }
 
-var yytfix = []struct {
-	have string
-	want string
-}{
-	{"$end", "EOF"},
-	{"LASOP", "op="},
-	{"LBREAK", "break"},
-	{"LCASE", "case"},
-	{"LCHAN", "chan"},
-	{"LCOLAS", ":="},
-	{"LCONST", "const"},
-	{"LCONTINUE", "continue"},
-	{"LDDD", "..."},
-	{"LDEFAULT", "default"},
-	{"LDEFER", "defer"},
-	{"LELSE", "else"},
-	{"LFALL", "fallthrough"},
-	{"LFOR", "for"},
-	{"LFUNC", "func"},
-	{"LGO", "go"},
-	{"LGOTO", "goto"},
-	{"LIF", "if"},
-	{"LIMPORT", "import"},
-	{"LINTERFACE", "interface"},
-	{"LMAP", "map"},
-	{"LNAME", "name"},
-	{"LPACKAGE", "package"},
-	{"LRANGE", "range"},
-	{"LRETURN", "return"},
-	{"LSELECT", "select"},
-	{"LSTRUCT", "struct"},
-	{"LSWITCH", "switch"},
-	{"LTYPE", "type"},
-	{"LVAR", "var"},
-	{"LANDAND", "&&"},
-	{"LANDNOT", "&^"},
-	{"LBODY", "{"},
-	{"LCOMM", "<-"},
-	{"LDEC", "--"},
-	{"LINC", "++"},
-	{"LEQ", "=="},
-	{"LGE", ">="},
-	{"LGT", ">"},
-	{"LLE", "<="},
-	{"LLT", "<"},
-	{"LLSH", "<<"},
-	{"LRSH", ">>"},
-	{"LOROR", "||"},
-	{"LNE", "!="},
+var yytfix = map[string]string{
+	"$end":       "EOF",
+	"LASOP":      "op=",
+	"LBREAK":     "break",
+	"LCASE":      "case",
+	"LCHAN":      "chan",
+	"LCOLAS":     ":=",
+	"LCONST":     "const",
+	"LCONTINUE":  "continue",
+	"LDDD":       "...",
+	"LDEFAULT":   "default",
+	"LDEFER":     "defer",
+	"LELSE":      "else",
+	"LFALL":      "fallthrough",
+	"LFOR":       "for",
+	"LFUNC":      "func",
+	"LGO":        "go",
+	"LGOTO":      "goto",
+	"LIF":        "if",
+	"LIMPORT":    "import",
+	"LINTERFACE": "interface",
+	"LMAP":       "map",
+	"LNAME":      "name",
+	"LPACKAGE":   "package",
+	"LRANGE":     "range",
+	"LRETURN":    "return",
+	"LSELECT":    "select",
+	"LSTRUCT":    "struct",
+	"LSWITCH":    "switch",
+	"LTYPE":      "type",
+	"LVAR":       "var",
+	"LANDAND":    "&&",
+	"LANDNOT":    "&^",
+	"LBODY":      "{",
+	"LCOMM":      "<-",
+	"LDEC":       "--",
+	"LINC":       "++",
+	"LEQ":        "==",
+	"LGE":        ">=",
+	"LGT":        ">",
+	"LLE":        "<=",
+	"LLT":        "<",
+	"LLSH":       "<<",
+	"LRSH":       ">>",
+	"LOROR":      "||",
+	"LNE":        "!=",
 	// spell out to avoid confusion with punctuation in error messages
-	{"';'", "semicolon or newline"},
-	{"','", "comma"},
+	"';'": "semicolon or newline",
+	"','": "comma",
 }
 
 func init() {
 	yyErrorVerbose = true
 
-Outer:
 	for i, s := range yyToknames {
 		// Apply yytfix if possible.
-		for _, fix := range yytfix {
-			if s == fix.have {
-				yyToknames[i] = fix.want
-				continue Outer
-			}
-		}
-
-		// Turn 'x' into x.
-		if len(s) == 3 && s[0] == '\'' && s[2] == '\'' {
+		if fix, ok := yytfix[s]; ok {
+			yyToknames[i] = fix
+		} else if len(s) == 3 && s[0] == '\'' && s[2] == '\'' {
+			// Turn 'x' into x.
 			yyToknames[i] = s[1:2]
-			continue
 		}
 	}
 }
diff --git a/src/cmd/compile/internal/gc/subr.go b/src/cmd/compile/internal/gc/subr.go
index 68cee52..0a4a111 100644
--- a/src/cmd/compile/internal/gc/subr.go
+++ b/src/cmd/compile/internal/gc/subr.go
@@ -122,7 +122,7 @@
 
 		// An unexpected EOF caused a syntax error. Use the previous
 		// line number since getc generated a fake newline character.
-		if curio.eofnl != 0 {
+		if curio.eofnl {
 			lexlineno = prevlineno
 		}
 
diff --git a/src/cmd/compile/internal/gc/util.go b/src/cmd/compile/internal/gc/util.go
index 8620e0b..d16cd38 100644
--- a/src/cmd/compile/internal/gc/util.go
+++ b/src/cmd/compile/internal/gc/util.go
@@ -18,15 +18,19 @@
 	return int(n)
 }
 
-func isalnum(c int) bool {
-	return isalpha(c) || isdigit(c)
+func isSpace(c int) bool {
+	return c == ' ' || c == '\t' || c == '\n' || c == '\r'
 }
 
-func isalpha(c int) bool {
+func isAlnum(c int) bool {
+	return isAlpha(c) || isDigit(c)
+}
+
+func isAlpha(c int) bool {
 	return 'A' <= c && c <= 'Z' || 'a' <= c && c <= 'z'
 }
 
-func isdigit(c int) bool {
+func isDigit(c int) bool {
 	return '0' <= c && c <= '9'
 }
 
diff --git a/src/cmd/compile/internal/gc/y.go b/src/cmd/compile/internal/gc/y.go
index fafbdf1..dfb0fa4 100644
--- a/src/cmd/compile/internal/gc/y.go
+++ b/src/cmd/compile/internal/gc/y.go
@@ -160,7 +160,7 @@
 	// set up for another one now that we're done.
 	// See comment in lex.C about loophack.
 	if lbr == LBODY {
-		loophack = 1
+		loophack = true
 	}
 }