diff options
author | ringabout <43030857+ringabout@users.noreply.github.com> | 2023-03-16 21:07:54 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-16 21:07:54 +0800 |
commit | 6552a27ec1e973d1e9a3e002b2e48c8206bf35a5 (patch) | |
tree | 272e976eec79121762a12020465930f1a8985c8e /tests | |
parent | c43ac90390d950fcfd8905fd2f48cb486310f26a (diff) | |
download | Nim-6552a27ec1e973d1e9a3e002b2e48c8206bf35a5.tar.gz |
fixes #19857; Exception raised in closure may be "skipped" in ORC (#21530)
fixes #19857; Exception raised in closure may be "skipped"
Diffstat (limited to 'tests')
-rw-r--r-- | tests/arc/tarcmisc.nim | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/tests/arc/tarcmisc.nim b/tests/arc/tarcmisc.nim index a03da6211..1ae1782a4 100644 --- a/tests/arc/tarcmisc.nim +++ b/tests/arc/tarcmisc.nim @@ -558,3 +558,42 @@ block: doAssert y.id == 778 doAssert x[].id == 778 main() + +block: # bug #19857 + type + ValueKind = enum VNull, VFloat, VObject # need 3 elements. Cannot remove VNull or VObject + + Value = object + case kind: ValueKind + of VFloat: fnum: float + of VObject: tab: Table[int, int] # OrderedTable[T, U] also makes it fail. + # "simpler" types also work though + else: discard # VNull can be like this, but VObject must be filled + + # required. Pure proc works + FormulaNode = proc(c: OrderedTable[string, int]): Value + + proc toF(v: Value): float = + doAssert v.kind == VFloat + case v.kind + of VFloat: result = v.fnum + else: discard + + + proc foo() = + let fuck = initOrderedTable[string, int]() + proc cb(fuck: OrderedTable[string, int]): Value = + # works: + #result = Value(kind: VFloat, fnum: fuck["field_that_does_not_exist"].float) + # broken: + discard "actuall runs!" + let t = fuck["field_that_does_not_exist"] + echo "never runs, but we crash after! ", t + + doAssertRaises(KeyError): + let fn = FormulaNode(cb) + let v = fn(fuck) + #echo v + let res = v.toF() + + foo() |