78 lines
2.2 KiB
Nim
78 lines
2.2 KiB
Nim
# SPDX-License-Identifier: LSL-1.0
|
|
# Copyright (c) 2026 Markus Maiwald
|
|
# Stewardship: Self Sovereign Society Foundation
|
|
#
|
|
# This file is part of the Nexus Sovereign Core.
|
|
# See legal/LICENSE_SOVEREIGN.md for license terms.
|
|
|
|
## Rumpk Layer 1: Panic Override (Emergency Procedures)
|
|
|
|
# Rumpk Panic Override
|
|
# Required for Nim --os:any / --os:standalone
|
|
# This file must be named panicoverride.nim
|
|
|
|
var nimErrorFlag* {.exportc: "nimErrorFlag", compilerproc.}: bool = false
|
|
|
|
proc nimAddInt(a, b: int, res: var int): bool {.compilerproc.} =
|
|
let r = a + b
|
|
if (r < a) != (b < 0): return true
|
|
res = r
|
|
return false
|
|
|
|
proc nimSubInt(a, b: int, res: var int): bool {.compilerproc.} =
|
|
let r = a - b
|
|
if (r > a) != (b < 0): return true
|
|
res = r
|
|
return false
|
|
|
|
proc nimMulInt(a, b: int, res: var int): bool {.compilerproc.} =
|
|
let r = a * b
|
|
if b != 0 and (r div b) != a: return true
|
|
res = r
|
|
return false
|
|
|
|
{.push stackTrace: off.}
|
|
|
|
proc console_write(p: pointer, len: csize_t) {.importc, cdecl.}
|
|
proc rumpk_halt() {.importc, cdecl, noreturn.}
|
|
|
|
# Stubs for missing runtime symbols to satisfy linker
|
|
proc setLengthStr*(s: pointer, newLen: int) {.exportc, compilerproc.} = discard
|
|
proc addChar*(s: pointer, c: char) {.exportc, compilerproc.} = discard
|
|
proc callDepthLimitReached*() {.exportc, compilerproc.} =
|
|
while true: discard
|
|
|
|
# Type Info stub for Defect (referenced by digitsutils/exceptions)
|
|
var NTIdefect* {.exportc: "NTIdefect__SEK9acOiG0hv2dnGQbk52qg_", compilerproc.}: pointer = nil
|
|
|
|
proc rawoutput(s: string) =
|
|
if s.len > 0:
|
|
console_write(unsafeAddr s[0], csize_t(s.len))
|
|
|
|
proc panic(s: cstring) {.exportc, noreturn.} =
|
|
rawoutput("[PANIC] ")
|
|
if s != nil:
|
|
var i = 0
|
|
while s[i] != '\0':
|
|
var buf: array[1, char]
|
|
buf[0] = s[i]
|
|
console_write(addr buf[0], 1)
|
|
inc i
|
|
rawoutput("\n")
|
|
rumpk_halt()
|
|
|
|
proc raiseIndexError2(i, n: int) {.exportc, noreturn, compilerproc.} =
|
|
rawoutput("[PANIC] Index Error: ")
|
|
panic("Index Out of Bounds")
|
|
|
|
proc raiseOverflow() {.exportc, noreturn, compilerproc.} =
|
|
panic("Integer Overflow")
|
|
|
|
proc raiseRangeError(val: int64) {.exportc, noreturn, compilerproc.} =
|
|
panic("Range Error")
|
|
|
|
proc raiseDivByZero() {.exportc, noreturn, compilerproc.} =
|
|
panic("Division by Zero")
|
|
|
|
{.pop.}
|