This module implements an interface to Nim's runtime type information (RTTI). Note that even though Any and its operations hide the nasty low level details from its clients, it remains inherently unsafe!
See the marshal module for what this module allows you to do.
Types
AnyKind = enum akNone = 0, ## invalid any akBool = 1, ## any represents a ``bool`` akChar = 2, ## any represents a ``char`` akEnum = 14, ## any represents an enum akArray = 16, ## any represents an array akObject = 17, ## any represents an object akTuple = 18, ## any represents a tuple akSet = 19, ## any represents a set akRange = 20, ## any represents a range akPtr = 21, ## any represents a ptr akRef = 22, ## any represents a ref akSequence = 24, ## any represents a sequence akProc = 25, ## any represents a proc akPointer = 26, ## any represents a pointer akString = 28, ## any represents a string akCString = 29, ## any represents a cstring akInt = 31, ## any represents an int akInt8 = 32, ## any represents an int8 akInt16 = 33, ## any represents an int16 akInt32 = 34, ## any represents an int32 akInt64 = 35, ## any represents an int64 akFloat = 36, ## any represents a float akFloat32 = 37, ## any represents a float32 akFloat64 = 38, ## any represents a float64 akFloat128 = 39, ## any represents a float128 akUInt = 40, ## any represents an unsigned int akUInt8 = 41, ## any represents an unsigned int8 akUInt16 = 42, ## any represents an unsigned in16 akUInt32 = 43, ## any represents an unsigned int32 akUInt64 = 44 ## any represents an unsigned int64
- what kind of any it is Source
Any = object value: pointer rawType: PNimType
- can represent any nim value; NOTE: the wrapped value can be modified with its wrapper! This means that Any keeps a non-traced pointer to its wrapped value and must not live longer than its wrapped value. Source
Procs
proc toAny[T](x: var T): Any {.inline.}
- constructs a Any object from x. This captures x's address, so x can be modified with its Any wrapper! The client needs to ensure that the wrapper does not live longer than x! Source
proc kind(x: Any): AnyKind {.inline, raises: [], tags: [].}
- get the type kind Source
proc size(x: Any): int {.inline, raises: [], tags: [].}
- returns the size of x's type. Source
proc baseTypeKind(x: Any): AnyKind {.inline, raises: [], tags: [].}
- get the base type's kind; akNone is returned if x has no base type. Source
proc baseTypeSize(x: Any): int {.inline, raises: [], tags: [].}
- returns the size of x's basetype. Source
proc invokeNew(x: Any) {.raises: [], tags: [].}
- performs new(x). x needs to represent a ref. Source
proc invokeNewSeq(x: Any; len: int) {.raises: [], tags: [].}
- performs newSeq(x, len). x needs to represent a seq. Source
proc extendSeq(x: Any) {.raises: [], tags: [].}
- performs setLen(x, x.len+1). x needs to represent a seq. Source
proc setObjectRuntimeType(x: Any) {.raises: [], tags: [].}
- this needs to be called to set x's runtime object type field. Source
proc `[]`(x: Any; i: int): Any {.raises: [IndexError, ValueError], tags: [].}
- accessor for an any x that represents an array or a sequence. Source
proc `[]=`(x: Any; i: int; y: Any) {.raises: [IndexError, ValueError], tags: [].}
- accessor for an any x that represents an array or a sequence. Source
proc len(x: Any): int {.raises: [], tags: [].}
- len for an any x that represents an array or a sequence. Source
proc base(x: Any): Any {.raises: [], tags: [].}
- returns base Any (useful for inherited object types). Source
proc isNil(x: Any): bool {.raises: [], tags: [].}
- isNil for an any x that represents a sequence, string, cstring, proc or some pointer type. Source
proc getPointer(x: Any): pointer {.raises: [], tags: [].}
- retrieve the pointer value out of x. x needs to be of kind akString, akCString, akProc, akRef, akPtr, akPointer, akSequence. Source
proc setPointer(x: Any; y: pointer) {.raises: [], tags: [].}
- sets the pointer value of x. x needs to be of kind akString, akCString, akProc, akRef, akPtr, akPointer, akSequence. Source
proc `[]=`(x: Any; fieldName: string; value: Any) {.raises: [ValueError], tags: [].}
- sets a field of x; x represents an object or a tuple. Source
proc `[]`(x: Any; fieldName: string): Any {.raises: [ValueError], tags: [].}
- gets a field of x; x represents an object or a tuple. Source
proc `[]`(x: Any): Any {.raises: [], tags: [].}
- dereference operation for the any x that represents a ptr or a ref. Source
proc `[]=`(x, y: Any) {.raises: [], tags: [].}
- dereference operation for the any x that represents a ptr or a ref. Source
proc getInt(x: Any): int {.raises: [], tags: [].}
- retrieve the int value out of x. x needs to represent an int. Source
proc getInt8(x: Any): int8 {.raises: [], tags: [].}
- retrieve the int8 value out of x. x needs to represent an int8. Source
proc getInt16(x: Any): int16 {.raises: [], tags: [].}
- retrieve the int16 value out of x. x needs to represent an int16. Source
proc getInt32(x: Any): int32 {.raises: [], tags: [].}
- retrieve the int32 value out of x. x needs to represent an int32. Source
proc getInt64(x: Any): int64 {.raises: [], tags: [].}
- retrieve the int64 value out of x. x needs to represent an int64. Source
proc getBiggestInt(x: Any): BiggestInt {.raises: [], tags: [].}
- retrieve the integer value out of x. x needs to represent some integer, a bool, a char, an enum or a small enough bit set. The value might be sign-extended to BiggestInt. Source
proc setBiggestInt(x: Any; y: BiggestInt) {.raises: [], tags: [].}
- sets the integer value of x. x needs to represent some integer, a bool, a char, an enum or a small enough bit set. Source
proc getUInt(x: Any): uint {.raises: [], tags: [].}
- retrieve the uint value out of x, x needs to represent an uint. Source
proc getUInt8(x: Any): uint8 {.raises: [], tags: [].}
- retrieve the uint8 value out of x, x needs to represent an uint8. Source
proc getUInt16(x: Any): uint16 {.raises: [], tags: [].}
- retrieve the uint16 value out of x, x needs to represent an uint16. Source
proc getUInt32(x: Any): uint32 {.raises: [], tags: [].}
- retrieve the uint32 value out of x, x needs to represent an uint32. Source
proc getUInt64(x: Any): uint64 {.raises: [], tags: [].}
- retrieve the uint64 value out of x, x needs to represent an uint64. Source
proc getBiggestUint(x: Any): uint64 {.raises: [], tags: [].}
- retrieve the unsigned integer value out of x. x needs to represent an unsigned integer. Source
proc setBiggestUint(x: Any; y: uint64) {.raises: [], tags: [].}
- sets the unsigned integer value of c. c needs to represent an unsigned integer. Source
proc getChar(x: Any): char {.raises: [], tags: [].}
- retrieve the char value out of x. x needs to represent a char. Source
proc getBool(x: Any): bool {.raises: [], tags: [].}
- retrieve the bool value out of x. x needs to represent a bool. Source
proc skipRange(x: Any): Any {.raises: [], tags: [].}
- skips the range information of x. Source
proc getEnumOrdinal(x: Any; name: string): int {.raises: [], tags: [].}
- gets the enum field ordinal from name. x needs to represent an enum but is only used to access the type information. In case of an error low(int) is returned. Source
proc getEnumField(x: Any; ordinalValue: int): string {.raises: [], tags: [].}
- gets the enum field name as a string. x needs to represent an enum but is only used to access the type information. The field name of ordinalValue is returned. Source
proc getEnumField(x: Any): string {.raises: [], tags: [].}
- gets the enum field name as a string. x needs to represent an enum. Source
proc getFloat(x: Any): float {.raises: [], tags: [].}
- retrieve the float value out of x. x needs to represent an float. Source
proc getFloat32(x: Any): float32 {.raises: [], tags: [].}
- retrieve the float32 value out of x. x needs to represent an float32. Source
proc getFloat64(x: Any): float64 {.raises: [], tags: [].}
- retrieve the float64 value out of x. x needs to represent an float64. Source
proc getBiggestFloat(x: Any): BiggestFloat {.raises: [], tags: [].}
- retrieve the float value out of x. x needs to represent some float. The value is extended to BiggestFloat. Source
proc setBiggestFloat(x: Any; y: BiggestFloat) {.raises: [], tags: [].}
- sets the float value of x. x needs to represent some float. Source
proc getString(x: Any): string {.raises: [], tags: [].}
- retrieve the string value out of x. x needs to represent a string. Source
proc setString(x: Any; y: string) {.raises: [], tags: [].}
- sets the string value of x. x needs to represent a string. Source
proc getCString(x: Any): cstring {.raises: [], tags: [].}
- retrieve the cstring value out of x. x needs to represent a cstring. Source
proc assign(x, y: Any) {.raises: [], tags: [].}
- copies the value of y to x. The assignment operator for Any does NOT do this; it performs a shallow copy instead! Source
proc inclSetElement(x: Any; elem: int) {.raises: [], tags: [].}
- includes an element elem in x. x needs to represent a Nim bitset. Source