Skip to content

Instantly share code, notes, and snippets.

@zacharycarter
Created July 12, 2019 19:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zacharycarter/d91ce643d6b047f8ec802379cf171ebe to your computer and use it in GitHub Desktop.
Save zacharycarter/d91ce643d6b047f8ec802379cf171ebe to your computer and use it in GitHub Desktop.
type
TypeKind* = enum
tkNone, tkFoo
Foo* = object
bar*: string
Type* = object
case kind*: TypeKind
of tkNone: nil
of tkFoo: fooVal*: Foo
proc getFoo(a: VmArgs; i: Natural): Foo =
doAssert i < a.rc-1
let s = cast[seq[Type]](a.slots)
doAssert s[i+a.rb+1].kind == tkFoo
result = s[i+a.rb+1].fooVal
# output when calling getFoo(a, 0) -
# Traceback (most recent call last)
# C:\Users\carte\projects\embeddedNimScript_old\test.nim(38) test
# C:\Users\carte\projects\embeddedNimScript_old\test.nim(25) main
# C:\Users\carte\projects\embeddedNimScript_old\embeddedNims\enims.nim(156) call
# C:\Users\carte\.nimble\pkgs\compiler-0.20.0\compiler\vm.nim(1946) execProc
# C:\Users\carte\.nimble\pkgs\compiler-0.20.0\compiler\vm.nim(1081) rawExecute
# C:\Users\carte\projects\embeddedNimScript_old\embeddedNims\apiImpl.nim(59) :anonymous
# C:\Users\carte\projects\embeddedNimScript_old\embeddedNims\apiImpl.nim(39) getFoo
# SIGSEGV: Illegal storage access. (Attempt to read from nil?)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment