Handle octal values correctly
This commit is contained in:
parent
7e0b0b1a2b
commit
7c9d826998
3 changed files with 5 additions and 2 deletions
|
|
@ -140,8 +140,6 @@ proc getIntNode(number, suffix: string): PNode {.inline.} =
|
|||
var
|
||||
val: BiggestInt
|
||||
flags: TNodeFlags
|
||||
# I realize these regex are wasteful on performance, but
|
||||
# couldn't come up with a better idea.
|
||||
if number.startsWith("0X") or number.startsWith("0x"):
|
||||
val = parseHexInt(number)
|
||||
flags = {nfBase16}
|
||||
|
|
@ -203,6 +201,9 @@ proc processNumberLiteral(gState: State, node: TSNode): PNode =
|
|||
if number.startsWith("-"):
|
||||
number = number[1 ..< number.len]
|
||||
prefix = "-"
|
||||
if number.len > 1 and number[0] == '0' and number[1] notin ['x', 'X']:
|
||||
# Octal 0123
|
||||
number = "0o" & number[1 .. ^1]
|
||||
if tripleEndings.any(proc (s: string): bool = number.endsWith(s)):
|
||||
suffix = number[^3 .. ^1]
|
||||
number = number[0 ..< ^3]
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ extern "C" {
|
|||
#define C 0x10
|
||||
#define D "hello"
|
||||
#define E 'c'
|
||||
#define F 01234
|
||||
|
||||
#define UEXPR (1234u << 1)
|
||||
#define ULEXPR (1234ul << 2)
|
||||
|
|
|
|||
|
|
@ -110,6 +110,7 @@ assert B == 1.0
|
|||
assert C == 0x10
|
||||
assert D == "hello"
|
||||
assert E == 'c'
|
||||
assert F == 0o1234
|
||||
|
||||
assert not defined(NOTSUPPORTEDSTR)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue