bugfix: keep the information of a raw float literal in the AST
This commit is contained in:
parent
82175b43bb
commit
ee43fc82d5
2 changed files with 7 additions and 6 deletions
|
|
@ -386,11 +386,11 @@ proc getNumber(L: var TLexer, result: var TToken) =
|
||||||
else:
|
else:
|
||||||
matchUnderscoreChars(L, result, {'0'..'9'})
|
matchUnderscoreChars(L, result, {'0'..'9'})
|
||||||
if (L.buf[L.bufpos] == '.') and (L.buf[L.bufpos + 1] in {'0'..'9'}):
|
if (L.buf[L.bufpos] == '.') and (L.buf[L.bufpos + 1] in {'0'..'9'}):
|
||||||
result.tokType = tkFloat64Lit
|
result.tokType = tkFloatLit
|
||||||
eatChar(L, result, '.')
|
eatChar(L, result, '.')
|
||||||
matchUnderscoreChars(L, result, {'0'..'9'})
|
matchUnderscoreChars(L, result, {'0'..'9'})
|
||||||
if L.buf[L.bufpos] in {'e', 'E'}:
|
if L.buf[L.bufpos] in {'e', 'E'}:
|
||||||
result.tokType = tkFloat64Lit
|
result.tokType = tkFloatLit
|
||||||
eatChar(L, result, 'e')
|
eatChar(L, result, 'e')
|
||||||
if L.buf[L.bufpos] in {'+', '-'}:
|
if L.buf[L.bufpos] in {'+', '-'}:
|
||||||
eatChar(L, result)
|
eatChar(L, result)
|
||||||
|
|
@ -516,7 +516,8 @@ proc getNumber(L: var TLexer, result: var TToken) =
|
||||||
result.fNumber = (cast[PFloat32](addr(xi)))[]
|
result.fNumber = (cast[PFloat32](addr(xi)))[]
|
||||||
# note: this code is endian neutral!
|
# note: this code is endian neutral!
|
||||||
# XXX: Test this on big endian machine!
|
# XXX: Test this on big endian machine!
|
||||||
of tkFloat64Lit: result.fNumber = (cast[PFloat64](addr(xi)))[]
|
of tkFloat64Lit, tkFloatLit:
|
||||||
|
result.fNumber = (cast[PFloat64](addr(xi)))[]
|
||||||
else: internalError(getLineInfo(L), "getNumber")
|
else: internalError(getLineInfo(L), "getNumber")
|
||||||
|
|
||||||
# Bounds checks. Non decimal literals are allowed to overflow the range of
|
# Bounds checks. Non decimal literals are allowed to overflow the range of
|
||||||
|
|
|
||||||
|
|
@ -2187,11 +2187,11 @@ proc semExpr(c: PContext, n: PNode, flags: TExprFlags = {}): PNode =
|
||||||
if result.typ == nil: result.typ = getSysType(tyUInt32)
|
if result.typ == nil: result.typ = getSysType(tyUInt32)
|
||||||
of nkUInt64Lit:
|
of nkUInt64Lit:
|
||||||
if result.typ == nil: result.typ = getSysType(tyUInt64)
|
if result.typ == nil: result.typ = getSysType(tyUInt64)
|
||||||
of nkFloatLit:
|
#of nkFloatLit:
|
||||||
if result.typ == nil: result.typ = getFloatLitType(result)
|
# if result.typ == nil: result.typ = getFloatLitType(result)
|
||||||
of nkFloat32Lit:
|
of nkFloat32Lit:
|
||||||
if result.typ == nil: result.typ = getSysType(tyFloat32)
|
if result.typ == nil: result.typ = getSysType(tyFloat32)
|
||||||
of nkFloat64Lit:
|
of nkFloat64Lit, nkFloatLit:
|
||||||
if result.typ == nil: result.typ = getSysType(tyFloat64)
|
if result.typ == nil: result.typ = getSysType(tyFloat64)
|
||||||
of nkFloat128Lit:
|
of nkFloat128Lit:
|
||||||
if result.typ == nil: result.typ = getSysType(tyFloat128)
|
if result.typ == nil: result.typ = getSysType(tyFloat128)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue