diff options
-rw-r--r-- | changelogs/changelog_2_0_0.md | 4 | ||||
-rw-r--r-- | compiler/commands.nim | 6 | ||||
-rw-r--r-- | lib/pure/unittest.nim | 6 | ||||
-rw-r--r-- | lib/std/exitprocs.nim | 10 |
4 files changed, 19 insertions, 7 deletions
diff --git a/changelogs/changelog_2_0_0.md b/changelogs/changelog_2_0_0.md index b15818ae6..11fa8cba3 100644 --- a/changelogs/changelog_2_0_0.md +++ b/changelogs/changelog_2_0_0.md @@ -249,6 +249,10 @@ these deprecated aliases are likely not used anymore and it may make sense to simply remove these statements. +- `getProgramResult` and `setProgramResult` in `std/exitprocs` are no longer + declared when they are not available on the backend. Previously it would call + `doAssert false` at runtime despite the condition being compile-time. + ## Standard library additions and changes [//]: # "Changes:" diff --git a/compiler/commands.nim b/compiler/commands.nim index 93a36e714..4980ff268 100644 --- a/compiler/commands.nim +++ b/compiler/commands.nim @@ -654,6 +654,9 @@ proc processSwitch*(switch, arg: string, pass: TCmdLinePass, info: TLineInfo; if backend == TBackend.default: localError(conf, info, "invalid backend: '$1'" % arg) if backend == backendJs: # bug #21209 conf.globalOptions.excl {optThreadAnalysis, optThreads} + if optRun in conf.globalOptions: + # for now, -r uses nodejs, so define nodejs + defineSymbol(conf.symbols, "nodejs") conf.backend = backend of "doccmd": conf.docCmd = arg of "define", "d": @@ -864,6 +867,9 @@ proc processSwitch*(switch, arg: string, pass: TCmdLinePass, info: TLineInfo; setTarget(conf.target, conf.target.targetOS, cpu) of "run", "r": processOnOffSwitchG(conf, {optRun}, arg, pass, info) + if conf.backend == backendJs: + # for now, -r uses nodejs, so define nodejs + defineSymbol(conf.symbols, "nodejs") of "maxloopiterationsvm": expectArg(conf, switch, arg, pass, info) conf.maxLoopIterationsVM = parseInt(arg) diff --git a/lib/pure/unittest.nim b/lib/pure/unittest.nim index 9dafa8f03..964fba0e4 100644 --- a/lib/pure/unittest.nim +++ b/lib/pure/unittest.nim @@ -519,6 +519,12 @@ proc exceptionTypeName(e: ref Exception): string {.inline.} = if e == nil: "<foreign exception>" else: $e.name +when not declared(setProgramResult): + {.warning: "setProgramResult not available on platform, unittest will not" & + " give failing exit code on test failure".} + template setProgramResult(a: int) = + discard + template test*(name, body) {.dirty.} = ## Define a single test case identified by `name`. ## diff --git a/lib/std/exitprocs.nim b/lib/std/exitprocs.nim index 736bf06d1..c44eb30d6 100644 --- a/lib/std/exitprocs.nim +++ b/lib/std/exitprocs.nim @@ -69,23 +69,19 @@ proc addExitProc*(cl: proc() {.noconv.}) = fun() gFuns.add Fun(kind: kNoconv, fun2: cl) -when not defined(nimscript): +when not defined(nimscript) and (not defined(js) or defined(nodejs)): proc getProgramResult*(): int = when defined(js) and defined(nodejs): asm """ `result` = process.exitCode; """ - elif not defined(js): - result = programResult else: - doAssert false + result = programResult proc setProgramResult*(a: int) = when defined(js) and defined(nodejs): asm """ process.exitCode = `a`; """ - elif not defined(js): - programResult = a else: - doAssert false + programResult = a |