Nim is a statically typed compiled systems programming language. It combines successful concepts from mature languages like Python, Ada and Modula. Its design focuses on efficiency, expressiveness, and elegance (in that order of priority).
Similar to #12096 but this one is still crashing while #12096 returns an error "Maybe generic arguments are missing?"
type Foo = object
hook: tuple[onHeartbeat: proc(env: pointer) {.nimcall.}, env: pointer]
type Bar[T] = object
registeredAt: ptr tuple[onHeartbeat: proc(env: pointer) {.nimcall.}, env: pointer]
proc onHeartbeat[T](bar: ptr Bar[T]) =
if bar.isNil:
return
echo "bazinga"
proc setHeartbeat[T](hook: var tuple[onHeartbeat: proc(env: pointer) {.nimcall.}, env: pointer],
bar: var Bar[T]) =
# Next line is triggering the crash
# using onHeartbeat[T] instead solves the problem
hook.onHeartbeat = cast[proc(env: pointer) {.nimcall.}](onHeartbeat)
hook.env = bar.addr
bar.registeredAt = hook.addr
var foo: Foo
var bar: Bar[int]
foo.hook.setHeartbeat(bar)
foo.hook.onHeartbeat(foo.hook.env)
Similar to #12096 but this one is still crashing while #12096 returns an error "Maybe generic arguments are missing?"