std/importutils

Search:
Source   Edit  

Utilities related to import and symbol resolution.

Experimental API, subject to change.

Procs

proc privateAccess(t: typedesc) {.magic: "PrivateAccess", ...raises: [], tags: [],
                                  forbids: [].}
Enables access to private fields of t in current scope.

Example: cmd: -d:nimImportutilsExample

# here we're importing a module containing:
# type
#   Foo = object
#     f0: int # private
#   Goo*[T] = object
#     g0: int # private
# proc initFoo*(): auto = Foo()
var f = initFoo()
block:
  assert not compiles(f.f0)
  privateAccess(f.type)
  f.f0 = 1 # accessible in this scope
  block:
    assert f.f0 == 1 # still in scope
assert not compiles(f.f0)

# this also works with generics
privateAccess(Goo)
assert Goo[float](g0: 1).g0 == 1
Source   Edit