diff options
author | Timothee Cour <timothee.cour2@gmail.com> | 2020-12-14 02:17:24 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-14 11:17:24 +0100 |
commit | 4850f9b5969d52980177400a75af890f72d579d0 (patch) | |
tree | afde7d50e015d3dff3d52b0852bc3704e9beb015 | |
parent | 9ac2ee7b8d80a6b4a6369626018492142889d158 (diff) | |
download | Nim-4850f9b5969d52980177400a75af890f72d579d0.tar.gz |
fix #16265; fix #13999 (HCR on OSX); cgen now does not line wrap string litterals (#16329)
* fix #16265: cgen now does not line wrap string litterals which, in combination with other hacks, caused a really obscure looking bug * fix #13999; nimhcr_integration.nim now works for osx * try to make appveyor CI disappear * disable openbsd + add diagnostic for openbsd * enable for openbsd * PTEMP * re-disable openbsd
-rw-r--r-- | compiler/cgen.nim | 3 | ||||
-rw-r--r-- | compiler/msgs.nim | 8 | ||||
-rw-r--r-- | tests/dll/nimhcr_integration.nim | 17 |
3 files changed, 23 insertions, 5 deletions
diff --git a/compiler/cgen.nim b/compiler/cgen.nim index c4544bbc5..220b8e3c1 100644 --- a/compiler/cgen.nim +++ b/compiler/cgen.nim @@ -1556,6 +1556,9 @@ proc registerModuleToMain(g: BModuleList; m: BModule) = # nasty nasty hack to get the command line functionality working with HCR # register the 2 variables on behalf of the os module which might not even # be loaded (in which case it will get collected but that is not a problem) + # EDIT: indeed, this hack, in combination with another un-necessary one + # (`makeCString` was doing line wrap of string litterals) was root cause for + # bug #16265. let osModulePath = ($systemModulePath).replace("stdlib_system", "stdlib_os").rope g.mainDatInit.addf("\thcrAddModule($1);\n", [osModulePath]) g.mainDatInit.add("\tint* cmd_count;\n") diff --git a/compiler/msgs.nim b/compiler/msgs.nim index d0209db5d..1a005788e 100644 --- a/compiler/msgs.nim +++ b/compiler/msgs.nim @@ -34,13 +34,15 @@ proc toCChar*(c: char; result: var string) = result.add c proc makeCString*(s: string): Rope = - const MaxLineLength = 64 result = nil var res = newStringOfCap(int(s.len.toFloat * 1.1) + 1) res.add("\"") for i in 0..<s.len: - if (i + 1) mod MaxLineLength == 0: - res.add("\"\L\"") + # line wrapping of string litterals in cgen'd code was a bad idea, e.g. causes: bug #16265 + # It also makes reading c sources or grepping harder, for zero benefit. + # const MaxLineLength = 64 + # if (i + 1) mod MaxLineLength == 0: + # res.add("\"\L\"") toCChar(s[i], res) res.add('\"') result.add(rope(res)) diff --git a/tests/dll/nimhcr_integration.nim b/tests/dll/nimhcr_integration.nim index 626502364..58851b5c4 100644 --- a/tests/dll/nimhcr_integration.nim +++ b/tests/dll/nimhcr_integration.nim @@ -1,7 +1,5 @@ discard """ disabled: "openbsd" - disabled: "netbsd" - disabled: "macosx" output: ''' main: HELLO! main: hasAnyModuleChanged? true @@ -56,6 +54,20 @@ done ''' """ +#[ +xxx disabled: "openbsd" because it would otherwise give: +/home/build/Nim/lib/nimhcr.nim(532) hcrInit +/home/build/Nim/lib/nimhcr.nim(503) initModules +/home/build/Nim/lib/nimhcr.nim(463) initPointerData +/home/build/Nim/lib/nimhcr.nim(346) hcrRegisterProc +/home/build/Nim/lib/pure/reservedmem.nim(223) setLen +/home/build/Nim/lib/pure/reservedmem.nim(97) setLen +/home/build/Nim/lib/pure/includes/oserr.nim(94) raiseOSError +Error: unhandled exception: Not supported [OSError] + +After instrumenting code, the stacktrace actually points to the call to `check mprotect` +]# + ## This is perhaps the most complex test in the nim test suite - calling the ## compiler on the file itself with the same set or arguments and reloading ## parts of the program at runtime! In the same folder there are a few modules @@ -100,6 +112,7 @@ proc compileReloadExecute() = # binary triggers rebuilding itself here it shouldn't rebuild the main module - # that would lead to replacing the main binary executable which is running! let cmd = commandLineParams()[0..^1].join(" ").replace(" --forceBuild") + doAssert cmd.len > 0 let (stdout, exitcode) = execCmdEx(cmd) if exitcode != 0: echo "COMPILATION ERROR!" |