Types
LowerShort = distinct LowerShortImpl
-
uses last 2 bytes as tag, shifts pointer left by 2 bytes, sign extends when converting to pointer
tag bytes are addressable
Source Edit LowerShortImpl = uint16
- Source Edit
LowerShortTagged[T] = Tagged[T, LowerShort]
- Source Edit
Procs
proc splitTag(tagged: Tagged[uint, LowerShort]): LowerShort {.inline, ...raises: [], tags: [], forbids: [].}
- Source Edit
proc splitTag[T: PointerLike](tagged: Tagged[T, LowerShort]): LowerShort {. inline.}
- Source Edit
proc splitTagMut(tagged: var Tagged[uint, LowerShort]): var LowerShort {.inline, ...raises: [], tags: [], forbids: [].}
- Source Edit
proc splitTagMut[T: PointerLike](tagged: var Tagged[T, LowerShort]): var LowerShort
- Source Edit
proc tagLowerShort[T](val: T; tag: LowerShortImpl): LowerShortTagged[T] {.inline.}
- Source Edit
proc untag(tagged: Tagged[uint, LowerShort]): uint {.inline, ...raises: [], tags: [], forbids: [].}
- Source Edit
proc untag[T: PointerLike](tagged: Tagged[T, LowerShort]): T {.inline.}
- Source Edit
proc withTag(val: uint; tag: LowerShort): Tagged[uint, LowerShort] {.inline, ...raises: [], tags: [], forbids: [].}
- Source Edit
proc withTag[T: PointerLike](val: T; t: LowerShort): Tagged[T, LowerShort] {. inline.}
- Source Edit
Templates
template `[]`[T: PointerLike](tagged: Tagged[T, LowerShort]): untyped
- Source Edit
template getTag[T](tagged: LowerShortTagged[T]): LowerShortImpl
- Source Edit
template getTagMut[T](tagged: LowerShortTagged[T]): LowerShortImpl
- Source Edit
template isNil[T: PointerLike](tagged: Tagged[T, LowerShort]): bool
- Source Edit
template splitTagInline(tagged: Tagged[uint, LowerShort]): LowerShort
- Source Edit
template splitTagInline[T: PointerLike](tagged: Tagged[T, LowerShort]): LowerShort
- Source Edit
template splitTagMutInline(tagged: var Tagged[uint, LowerShort]): var LowerShort
- Source Edit
template splitTagMutInline[T: PointerLike](tagged: var Tagged[T, LowerShort]): var LowerShort
- Source Edit
template untagInline(tagged: Tagged[uint, LowerShort]): uint
- Source Edit
template untagInline[T: PointerLike](tagged: Tagged[T, LowerShort]): T
- Source Edit
template withTagInline(val: uint; tag: LowerShort): Tagged[uint, LowerShort]
- Source Edit
template withTagInline[T: PointerLike](val: T; t: LowerShort): Tagged[T, LowerShort]
- Source Edit