diff --git a/nimterop/exprparser.nim b/nimterop/exprparser.nim index 0fea184..0d2099a 100644 --- a/nimterop/exprparser.nim +++ b/nimterop/exprparser.nim @@ -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] diff --git a/tests/include/tast2.h b/tests/include/tast2.h index 019f7c4..6f569d5 100644 --- a/tests/include/tast2.h +++ b/tests/include/tast2.h @@ -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) diff --git a/tests/tast2.nim b/tests/tast2.nim index fd0175a..124c4e4 100644 --- a/tests/tast2.nim +++ b/tests/tast2.nim @@ -110,6 +110,7 @@ assert B == 1.0 assert C == 0x10 assert D == "hello" assert E == 'c' +assert F == 0o1234 assert not defined(NOTSUPPORTEDSTR)