* 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
This commit is contained in:
parent
9ac2ee7b8d
commit
4850f9b596
3 changed files with 23 additions and 5 deletions
|
|
@ -1556,6 +1556,9 @@ proc registerModuleToMain(g: BModuleList; m: BModule) =
|
||||||
# nasty nasty hack to get the command line functionality working with HCR
|
# 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
|
# 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)
|
# 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
|
let osModulePath = ($systemModulePath).replace("stdlib_system", "stdlib_os").rope
|
||||||
g.mainDatInit.addf("\thcrAddModule($1);\n", [osModulePath])
|
g.mainDatInit.addf("\thcrAddModule($1);\n", [osModulePath])
|
||||||
g.mainDatInit.add("\tint* cmd_count;\n")
|
g.mainDatInit.add("\tint* cmd_count;\n")
|
||||||
|
|
|
||||||
|
|
@ -34,13 +34,15 @@ proc toCChar*(c: char; result: var string) =
|
||||||
result.add c
|
result.add c
|
||||||
|
|
||||||
proc makeCString*(s: string): Rope =
|
proc makeCString*(s: string): Rope =
|
||||||
const MaxLineLength = 64
|
|
||||||
result = nil
|
result = nil
|
||||||
var res = newStringOfCap(int(s.len.toFloat * 1.1) + 1)
|
var res = newStringOfCap(int(s.len.toFloat * 1.1) + 1)
|
||||||
res.add("\"")
|
res.add("\"")
|
||||||
for i in 0..<s.len:
|
for i in 0..<s.len:
|
||||||
if (i + 1) mod MaxLineLength == 0:
|
# line wrapping of string litterals in cgen'd code was a bad idea, e.g. causes: bug #16265
|
||||||
res.add("\"\L\"")
|
# 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)
|
toCChar(s[i], res)
|
||||||
res.add('\"')
|
res.add('\"')
|
||||||
result.add(rope(res))
|
result.add(rope(res))
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
discard """
|
discard """
|
||||||
disabled: "openbsd"
|
disabled: "openbsd"
|
||||||
disabled: "netbsd"
|
|
||||||
disabled: "macosx"
|
|
||||||
output: '''
|
output: '''
|
||||||
main: HELLO!
|
main: HELLO!
|
||||||
main: hasAnyModuleChanged? true
|
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
|
## 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
|
## 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
|
## 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 -
|
# binary triggers rebuilding itself here it shouldn't rebuild the main module -
|
||||||
# that would lead to replacing the main binary executable which is running!
|
# that would lead to replacing the main binary executable which is running!
|
||||||
let cmd = commandLineParams()[0..^1].join(" ").replace(" --forceBuild")
|
let cmd = commandLineParams()[0..^1].join(" ").replace(" --forceBuild")
|
||||||
|
doAssert cmd.len > 0
|
||||||
let (stdout, exitcode) = execCmdEx(cmd)
|
let (stdout, exitcode) = execCmdEx(cmd)
|
||||||
if exitcode != 0:
|
if exitcode != 0:
|
||||||
echo "COMPILATION ERROR!"
|
echo "COMPILATION ERROR!"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue