diff options
Diffstat (limited to 'src/pkg/go/scanner')
| -rw-r--r-- | src/pkg/go/scanner/scanner.go | 36 | ||||
| -rw-r--r-- | src/pkg/go/scanner/scanner_test.go | 8 | 
2 files changed, 11 insertions, 33 deletions
| diff --git a/src/pkg/go/scanner/scanner.go b/src/pkg/go/scanner/scanner.go index 07b7454c8..509abeca5 100644 --- a/src/pkg/go/scanner/scanner.go +++ b/src/pkg/go/scanner/scanner.go @@ -134,36 +134,6 @@ func (S *Scanner) Init(file *token.File, src []byte, err ErrorHandler, mode uint  } -func charString(ch int) string { -	var s string -	switch ch { -	case -1: -		return `EOF` -	case '\a': -		s = `\a` -	case '\b': -		s = `\b` -	case '\f': -		s = `\f` -	case '\n': -		s = `\n` -	case '\r': -		s = `\r` -	case '\t': -		s = `\t` -	case '\v': -		s = `\v` -	case '\\': -		s = `\\` -	case '\'': -		s = `\'` -	default: -		s = string(ch) -	} -	return "'" + s + "' (U+" + strconv.Itob(ch, 16) + ")" -} - -  func (S *Scanner) error(offs int, msg string) {  	if S.err != nil {  		S.err.Error(S.file.Position(S.file.Pos(offs)), msg) @@ -327,6 +297,10 @@ func (S *Scanner) scanNumber(seenDecimalPoint bool) token.Token {  			// hexadecimal int  			S.next()  			S.scanMantissa(16) +			if S.offset-offs <= 2 { +				// only scanned "0x" or "0X" +				S.error(offs, "illegal hexadecimal number") +			}  		} else {  			// octal int or float  			seenDecimalDigit := false @@ -700,7 +674,7 @@ scanAgain:  			tok = S.switch3(token.OR, token.OR_ASSIGN, '|', token.LOR)  		default:  			if S.mode&AllowIllegalChars == 0 { -				S.error(offs, "illegal character "+charString(ch)) +				S.error(offs, "illegal character "+strconv.QuoteRune(ch))  			}  			insertSemi = S.insertSemi // preserve insertSemi info  		} diff --git a/src/pkg/go/scanner/scanner_test.go b/src/pkg/go/scanner/scanner_test.go index 8afb00ee5..ee1e830a1 100644 --- a/src/pkg/go/scanner/scanner_test.go +++ b/src/pkg/go/scanner/scanner_test.go @@ -89,7 +89,7 @@ var tokens = [...]elt{  		literal,  	}, -	// Operators and delimitors +	// Operators and delimiters  	{token.ADD, "+", operator},  	{token.SUB, "-", operator},  	{token.MUL, "*", operator}, @@ -650,7 +650,9 @@ var errors = []struct {  	pos int  	err string  }{ -	{`#`, token.ILLEGAL, 0, "illegal character '#' (U+23)"}, +	{"\a", token.ILLEGAL, 0, "illegal character '\\a'"}, +	{`#`, token.ILLEGAL, 0, "illegal character '#'"}, +	{`…`, token.ILLEGAL, 0, "illegal character '…'"},  	{`' '`, token.CHAR, 0, ""},  	{`''`, token.CHAR, 0, "illegal character literal"},  	{`'\8'`, token.CHAR, 2, "unknown escape sequence"}, @@ -670,6 +672,8 @@ var errors = []struct {  	{"078e0", token.FLOAT, 0, ""},  	{"078", token.INT, 0, "illegal octal number"},  	{"07800000009", token.INT, 0, "illegal octal number"}, +	{"0x", token.INT, 0, "illegal hexadecimal number"}, +	{"0X", token.INT, 0, "illegal hexadecimal number"},  	{"\"abc\x00def\"", token.STRING, 4, "illegal character NUL"},  	{"\"abc\x80def\"", token.STRING, 4, "illegal UTF-8 encoding"},  } | 
