mirror of
https://github.com/golang/go
synced 2024-11-21 19:54:41 -07:00
go/scanner: support for complex (imaginary) constants
R=rsc CC=golang-dev https://golang.org/cl/223044
This commit is contained in:
parent
7c99dcbdf9
commit
d5248c4a96
@ -959,7 +959,7 @@ func (p *parser) parseOperand() ast.Expr {
|
||||
case token.IDENT:
|
||||
return p.findIdent()
|
||||
|
||||
case token.INT, token.FLOAT, token.CHAR, token.STRING:
|
||||
case token.INT, token.FLOAT, token.IMAG, token.CHAR, token.STRING:
|
||||
x := &ast.BasicLit{p.pos, p.tok, p.lit}
|
||||
p.next()
|
||||
return x
|
||||
|
42
src/pkg/go/printer/testdata/declarations.golden
vendored
42
src/pkg/go/printer/testdata/declarations.golden
vendored
@ -68,6 +68,48 @@ import _ "io"
|
||||
var _ int
|
||||
|
||||
|
||||
// printing of constant literals
|
||||
const (
|
||||
_ = "foobar"
|
||||
_ = "a۰۱۸"
|
||||
_ = "foo६४"
|
||||
_ = "bar9876"
|
||||
_ = 0
|
||||
_ = 1
|
||||
_ = 123456789012345678890
|
||||
_ = 01234567
|
||||
_ = 0xcafebabe
|
||||
_ = 0.
|
||||
_ = .0
|
||||
_ = 3.14159265
|
||||
_ = 1e0
|
||||
_ = 1e+100
|
||||
_ = 1e-100
|
||||
_ = 2.71828e-1000
|
||||
_ = 0i
|
||||
_ = 1i
|
||||
_ = 012345678901234567889i
|
||||
_ = 123456789012345678890i
|
||||
_ = 0.i
|
||||
_ = .0i
|
||||
_ = 3.14159265i
|
||||
_ = 1e0i
|
||||
_ = 1e+100i
|
||||
_ = 1e-100i
|
||||
_ = 2.71828e-1000i
|
||||
_ = 'a'
|
||||
_ = '\000'
|
||||
_ = '\xFF'
|
||||
_ = '\uff16'
|
||||
_ = '\U0000ff16'
|
||||
_ = `foobar`
|
||||
_ = `foo
|
||||
---
|
||||
---
|
||||
bar`
|
||||
)
|
||||
|
||||
|
||||
func _() {
|
||||
// the following decls need a semicolon at the end
|
||||
type _ int
|
||||
|
42
src/pkg/go/printer/testdata/declarations.input
vendored
42
src/pkg/go/printer/testdata/declarations.input
vendored
@ -67,6 +67,48 @@ import _ "io"
|
||||
var _ int
|
||||
|
||||
|
||||
// printing of constant literals
|
||||
const (
|
||||
_ = "foobar"
|
||||
_ = "a۰۱۸"
|
||||
_ = "foo६४"
|
||||
_ = "bar9876"
|
||||
_ = 0
|
||||
_ = 1
|
||||
_ = 123456789012345678890
|
||||
_ = 01234567
|
||||
_ = 0xcafebabe
|
||||
_ = 0.
|
||||
_ = .0
|
||||
_ = 3.14159265
|
||||
_ = 1e0
|
||||
_ = 1e+100
|
||||
_ = 1e-100
|
||||
_ = 2.71828e-1000
|
||||
_ = 0i
|
||||
_ = 1i
|
||||
_ = 012345678901234567889i
|
||||
_ = 123456789012345678890i
|
||||
_ = 0.i
|
||||
_ = .0i
|
||||
_ = 3.14159265i
|
||||
_ = 1e0i
|
||||
_ = 1e+100i
|
||||
_ = 1e-100i
|
||||
_ = 2.71828e-1000i
|
||||
_ = 'a'
|
||||
_ = '\000'
|
||||
_ = '\xFF'
|
||||
_ = '\uff16'
|
||||
_ = '\U0000ff16'
|
||||
_ = `foobar`
|
||||
_ = `foo
|
||||
---
|
||||
---
|
||||
bar`
|
||||
)
|
||||
|
||||
|
||||
func _() {
|
||||
// the following decls need a semicolon at the end
|
||||
type _ int
|
||||
|
@ -302,7 +302,7 @@ func (S *Scanner) scanNumber(pos token.Position, seenDecimalPoint bool) token.To
|
||||
seenDecimalDigit = true
|
||||
S.scanMantissa(10)
|
||||
}
|
||||
if S.ch == '.' || S.ch == 'e' || S.ch == 'E' {
|
||||
if S.ch == '.' || S.ch == 'e' || S.ch == 'E' || S.ch == 'i' {
|
||||
goto fraction
|
||||
}
|
||||
// octal int
|
||||
@ -333,6 +333,11 @@ exponent:
|
||||
S.scanMantissa(10)
|
||||
}
|
||||
|
||||
if S.ch == 'i' {
|
||||
tok = token.IMAG
|
||||
S.next()
|
||||
}
|
||||
|
||||
exit:
|
||||
return tok
|
||||
}
|
||||
|
@ -51,6 +51,8 @@ var tokens = [...]elt{
|
||||
elt{token.IDENT, "foo६४", literal},
|
||||
elt{token.IDENT, "bar9876", literal},
|
||||
elt{token.INT, "0", literal},
|
||||
elt{token.INT, "1", literal},
|
||||
elt{token.INT, "123456789012345678890", literal},
|
||||
elt{token.INT, "01234567", literal},
|
||||
elt{token.INT, "0xcafebabe", literal},
|
||||
elt{token.FLOAT, "0.", literal},
|
||||
@ -60,6 +62,17 @@ var tokens = [...]elt{
|
||||
elt{token.FLOAT, "1e+100", literal},
|
||||
elt{token.FLOAT, "1e-100", literal},
|
||||
elt{token.FLOAT, "2.71828e-1000", literal},
|
||||
elt{token.IMAG, "0i", literal},
|
||||
elt{token.IMAG, "1i", literal},
|
||||
elt{token.IMAG, "012345678901234567889i", literal},
|
||||
elt{token.IMAG, "123456789012345678890i", literal},
|
||||
elt{token.IMAG, "0.i", literal},
|
||||
elt{token.IMAG, ".0i", literal},
|
||||
elt{token.IMAG, "3.14159265i", literal},
|
||||
elt{token.IMAG, "1e0i", literal},
|
||||
elt{token.IMAG, "1e+100i", literal},
|
||||
elt{token.IMAG, "1e-100i", literal},
|
||||
elt{token.IMAG, "2.71828e-1000i", literal},
|
||||
elt{token.CHAR, "'a'", literal},
|
||||
elt{token.CHAR, "'\\000'", literal},
|
||||
elt{token.CHAR, "'\\xFF'", literal},
|
||||
|
@ -30,6 +30,7 @@ const (
|
||||
IDENT // main
|
||||
INT // 12345
|
||||
FLOAT // 123.45
|
||||
IMAG // 123.45i
|
||||
CHAR // 'a'
|
||||
STRING // "abc"
|
||||
literal_end
|
||||
@ -140,6 +141,7 @@ var tokens = map[Token]string{
|
||||
IDENT: "IDENT",
|
||||
INT: "INT",
|
||||
FLOAT: "FLOAT",
|
||||
IMAG: "IMAG",
|
||||
CHAR: "CHAR",
|
||||
STRING: "STRING",
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user