Handle octal values correctly

This commit is contained in:
Ganesh Viswanathan 2020-06-19 18:03:37 -05:00
commit 7c9d826998
3 changed files with 5 additions and 2 deletions

View file

@ -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]

View file

@ -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)

View file

@ -110,6 +110,7 @@ assert B == 1.0
assert C == 0x10
assert D == "hello"
assert E == 'c'
assert F == 0o1234
assert not defined(NOTSUPPORTEDSTR)