diff --git a/compiler/renderer.nim b/compiler/renderer.nim index 56f57b25a0..115fd0201b 100644 --- a/compiler/renderer.nim +++ b/compiler/renderer.nim @@ -323,9 +323,10 @@ proc litAux(g: TSrcGen; n: PNode, x: BiggestInt, size: int): string = result &= e.sym.name.s return - if nfBase2 in n.flags: result = "0b" & toBin(x, size * 8) - elif nfBase8 in n.flags: result = "0o" & toOct(x, size * 3) - elif nfBase16 in n.flags: result = "0x" & toHex(x, size * 2) + let y = x and ((1 shl (size*8)) - 1) + if nfBase2 in n.flags: result = "0b" & toBin(y, size * 8) + elif nfBase8 in n.flags: result = "0o" & toOct(y, size * 3) + elif nfBase16 in n.flags: result = "0x" & toHex(y, size * 2) else: result = $x proc ulitAux(g: TSrcGen; n: PNode, x: BiggestInt, size: int): string = diff --git a/tests/macros/tmacros_issues.nim b/tests/macros/tmacros_issues.nim index d32b6a2a26..df385c4453 100644 --- a/tests/macros/tmacros_issues.nim +++ b/tests/macros/tmacros_issues.nim @@ -26,6 +26,7 @@ range[0 .. 100] array[0 .. 100, int] 10 test +0o377'i8 ''' """ @@ -236,3 +237,10 @@ block tbugs: sampleMacroInt(42) sampleMacroBool(false) sampleMacroBool(system.true) + + +# bug #11131 +macro toRendererBug(n): untyped = + result = newLit repr(n) + +echo toRendererBug(0o377'i8)