mirror of
https://github.com/golang/go
synced 2024-11-21 20:44:39 -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:
|
case token.IDENT:
|
||||||
return p.findIdent()
|
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}
|
x := &ast.BasicLit{p.pos, p.tok, p.lit}
|
||||||
p.next()
|
p.next()
|
||||||
return x
|
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
|
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 _() {
|
func _() {
|
||||||
// the following decls need a semicolon at the end
|
// the following decls need a semicolon at the end
|
||||||
type _ int
|
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
|
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 _() {
|
func _() {
|
||||||
// the following decls need a semicolon at the end
|
// the following decls need a semicolon at the end
|
||||||
type _ int
|
type _ int
|
||||||
|
@ -302,7 +302,7 @@ func (S *Scanner) scanNumber(pos token.Position, seenDecimalPoint bool) token.To
|
|||||||
seenDecimalDigit = true
|
seenDecimalDigit = true
|
||||||
S.scanMantissa(10)
|
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
|
goto fraction
|
||||||
}
|
}
|
||||||
// octal int
|
// octal int
|
||||||
@ -333,6 +333,11 @@ exponent:
|
|||||||
S.scanMantissa(10)
|
S.scanMantissa(10)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if S.ch == 'i' {
|
||||||
|
tok = token.IMAG
|
||||||
|
S.next()
|
||||||
|
}
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
return tok
|
return tok
|
||||||
}
|
}
|
||||||
|
@ -51,6 +51,8 @@ var tokens = [...]elt{
|
|||||||
elt{token.IDENT, "foo६४", literal},
|
elt{token.IDENT, "foo६४", literal},
|
||||||
elt{token.IDENT, "bar9876", literal},
|
elt{token.IDENT, "bar9876", literal},
|
||||||
elt{token.INT, "0", literal},
|
elt{token.INT, "0", literal},
|
||||||
|
elt{token.INT, "1", literal},
|
||||||
|
elt{token.INT, "123456789012345678890", literal},
|
||||||
elt{token.INT, "01234567", literal},
|
elt{token.INT, "01234567", literal},
|
||||||
elt{token.INT, "0xcafebabe", literal},
|
elt{token.INT, "0xcafebabe", literal},
|
||||||
elt{token.FLOAT, "0.", 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, "1e-100", literal},
|
elt{token.FLOAT, "1e-100", literal},
|
||||||
elt{token.FLOAT, "2.71828e-1000", 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, "'a'", literal},
|
||||||
elt{token.CHAR, "'\\000'", literal},
|
elt{token.CHAR, "'\\000'", literal},
|
||||||
elt{token.CHAR, "'\\xFF'", literal},
|
elt{token.CHAR, "'\\xFF'", literal},
|
||||||
|
@ -30,6 +30,7 @@ const (
|
|||||||
IDENT // main
|
IDENT // main
|
||||||
INT // 12345
|
INT // 12345
|
||||||
FLOAT // 123.45
|
FLOAT // 123.45
|
||||||
|
IMAG // 123.45i
|
||||||
CHAR // 'a'
|
CHAR // 'a'
|
||||||
STRING // "abc"
|
STRING // "abc"
|
||||||
literal_end
|
literal_end
|
||||||
@ -140,6 +141,7 @@ var tokens = map[Token]string{
|
|||||||
IDENT: "IDENT",
|
IDENT: "IDENT",
|
||||||
INT: "INT",
|
INT: "INT",
|
||||||
FLOAT: "FLOAT",
|
FLOAT: "FLOAT",
|
||||||
|
IMAG: "IMAG",
|
||||||
CHAR: "CHAR",
|
CHAR: "CHAR",
|
||||||
STRING: "STRING",
|
STRING: "STRING",
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user