this module contains routines for accessing and iterating over typescode owner: Arne Döring e-mail: arne.doering@gmx.net included from types.nim
Types
- BackendViewKind = enum bvcNone, ## no view bvcSingle, ## single-location view bvcSequence ## view of contiguous locations 
- Source Edit
- OrdinalType = enum NoneLike, IntLike, FloatLike 
- Source Edit
- TDistinctCompare = enum dcEq, ## a and b should be the same type dcEqIgnoreDistinct, ## compare symmetrically: (distinct a) == b, a == b ## or a == (distinct b) dcEqOrDistinctOf ## a equals b or a is distinct of b 
- how distinct types are to be compared Source Edit
- TParamsEquality = enum paramsNotEqual, paramsEqual, paramsIncompatible 
- Source Edit
- TPreferedDesc = enum preferName, preferDesc, preferExported, preferModuleInfo, preferGenericArg, preferTypeName, preferResolved, preferMixed 
- Source Edit
- TTypeCmpFlag = enum IgnoreTupleFields, ## NOTE: Only set this flag for backends! IgnoreCC, ExactTypeDescValues, ExactGenericParams, ExactConstraints, ExactGcSafety, AllowCommonBase, PickyCAliases 
- Source Edit
- TTypeCmpFlags = set[TTypeCmpFlag] 
- Source Edit
- TTypeFieldResult = enum frNone, frHeader, frEmbedded 
- Source Edit
- TTypeMutator = proc (t: PType; closure: RootRef): PType {.nimcall.} 
- Source Edit
- TTypePredicate = proc (t: PType): bool {.nimcall.} 
- Source Edit
Consts
- szIllegalRecursion = -2 
- Source Edit
- szTooBigSize = -4 
- Source Edit
- szUncomputedSize = -1 
- Source Edit
- szUnknownSize = -3 
- Source Edit
Procs
- proc analyseObjectWithTypeField(t: PType): TTypeFieldResult {. ...raises: [Exception], tags: [RootEffect].} 
- Source Edit
- proc baseOfDistinct(t: PType; g: ModuleGraph; idgen: IdGenerator): PType {. ...raises: [KeyError, Exception], tags: [ReadDirEffect, RootEffect].} 
- Source Edit
- proc canFormAcycle(typ: PType): bool {....raises: [Exception], tags: [RootEffect].} 
- Source Edit
- proc classify(t: PType): OrdinalType {....raises: [], tags: [].} 
- for convenient type checking: Source Edit
- proc classifyBackendView(t: PType): BackendViewKind {....raises: [], tags: [].} 
- For the resolved type t, computes and returns what kind of view the type represents. This is meant to be used during the backend phase. Source Edit
- proc commonSuperclass(a, b: PType): PType {....raises: [], tags: [].} 
- Source Edit
- proc compareTypes(x, y: PType; cmp: TDistinctCompare = dcEq; flags: TTypeCmpFlags = {}): bool {. ...raises: [Exception, ERecoverableError], tags: [RootEffect].} 
- compares two type for equality (modulo type distinction) Source Edit
- proc compatibleEffects(formal, actual: PType): EffectsCompat {....raises: [], tags: [].} 
- Source Edit
- proc computeSize(conf: ConfigRef; typ: PType): BiggestInt {. ...raises: [Exception, ERecoverableError], tags: [RootEffect].} 
- Source Edit
- proc containsCompileTimeOnly(t: PType): bool {....raises: [], tags: [].} 
- Source Edit
- proc containsGarbageCollectedRef(typ: PType): bool {....raises: [Exception], tags: [RootEffect].} 
- Source Edit
- proc containsGenericType(t: PType): bool {....raises: [Exception], tags: [RootEffect].} 
- Source Edit
- proc containsHiddenPointer(typ: PType): bool {....raises: [Exception], tags: [RootEffect].} 
- Source Edit
- proc containsManagedMemory(typ: PType): bool {....raises: [Exception], tags: [RootEffect].} 
- Source Edit
- proc containsObject(t: PType): bool {....raises: [Exception], tags: [RootEffect].} 
- Source Edit
- proc containsTyRef(typ: PType): bool {....raises: [Exception], tags: [RootEffect].} 
- Source Edit
- proc enumHasHoles(t: PType): bool {....raises: [], tags: [].} 
- Source Edit
- proc equalParams(a, b: PNode): TParamsEquality {....raises: [Exception], tags: [RootEffect].} 
- Source Edit
- proc firstFloat(t: PType): BiggestFloat {....raises: [], tags: [].} 
- Source Edit
- proc firstOrd(conf: ConfigRef; t: PType): Int128 {....raises: [], tags: [].} 
- 
computes the first ordinal value of a concrete type, taking into account:- int bit-width via the conf param (a nil conf assumes 64 bits)
- the ordinal value set of the first enum element
 
- proc floatRangeCheck(x: BiggestFloat; t: PType): bool {....raises: [], tags: [].} 
- Source Edit
- proc getAlign(conf: ConfigRef; typ: PType): BiggestInt {. ...raises: [Exception, ERecoverableError], tags: [RootEffect].} 
- Source Edit
- proc getFloatValue(n: PNode): BiggestFloat {....raises: [], tags: [].} 
- Source Edit
- proc getProcConvMismatch(c: ConfigRef; f, a: PType; rel = isNone): ( set[ProcConvMismatch], TTypeRelation) {....raises: [], tags: [].} 
- Returns a set of the reason of mismatch, and the relation for conversion. Source Edit
- proc getReturnType(s: PSym): PType {....raises: [], tags: [].} 
- Source Edit
- proc getSize(conf: ConfigRef; typ: PType): BiggestInt {. ...raises: [Exception, ERecoverableError], tags: [RootEffect].} 
- Source Edit
- proc inheritanceDiff(a, b: PType): int {....raises: [], tags: [].} 
- Source Edit
- proc invalidGenericInst(f: PType): bool {....raises: [], tags: [].} 
- Source Edit
- proc isCharArrayPtr(t: PType; allowPointerToChar: bool): bool {....raises: [], tags: [].} 
- Source Edit
- proc isCompileTimeOnly(t: PType): bool {.inline, ...raises: [], tags: [].} 
- Source Edit
- proc isCyclePossible(typ: PType; g: ModuleGraph): bool {. ...raises: [Exception, ERecoverableError, KeyError], tags: [RootEffect, ReadDirEffect].} 
- 
Analyses and returns whether typ can possibly be the root of a reference cycle, or in other words, whether a heap cell of type typ can keep itself alive. The analysis is conservative: if a location of typ can have shared ownership (ref or closure) of a heap location with a dynamic type that might not match the static one (i.e. a polymorphic ref or closure, the latter uses type erasure), typ is treated as possibly cyclic. Source Edit
- proc isDefectException(t: PType): bool {....raises: [], tags: [].} 
- Source Edit
- proc isEmptyContainer(t: PType): bool {....raises: [], tags: [].} 
- true if the type is considered a container and is empty, otherwise false. container types are untyped, nil, array/seq/set/etc[T] with an emtpy type for T. Source Edit
- proc isException(t: PType): bool {....raises: [], tags: [].} 
- Source Edit
- proc isFloatLit(t: PType): bool {.inline, ...raises: [], tags: [].} 
- Source Edit
- proc isGenericAlias(t: PType): bool {....raises: [], tags: [].} 
- Source Edit
- proc isImportedException(t: PType; conf: ConfigRef): bool {....raises: [], tags: [].} 
- true of the Exception described by type t was imported Source Edit
- proc isObjLackingTypeField(typ: PType): bool {.inline, ...raises: [], tags: [].} 
- Tests if typ has no type field (header). The only types that store a type header are non-final object types where the inheritance root is not marked as .pure (the sfPure flags is not present on it) Source Edit
- proc isOrdinalType(t: PType; allowEnumWithHoles: bool = false): bool {. ...raises: [], tags: [].} 
- Source Edit
- proc isPureObject(typ: PType): bool {....raises: [], tags: [].} 
- Source Edit
- proc isSinkTypeForParam(t: PType): bool {....raises: [], tags: [].} 
- Returns whether t is considered to be a sink-like type when used in a parameter context. Source Edit
- proc isTupleRecursive(t: PType): bool {....raises: [], tags: [].} 
- Source Edit
- func isUnsigned(t: PType): bool {.inline, ...raises: [], tags: [].} 
- Source Edit
- proc iterOverType(t: PType; iter: TTypeIter; closure: RootRef): bool {. ...raises: [Exception], tags: [RootEffect].} 
- Source Edit
- proc lacksMTypeField(typ: PType): bool {.inline, ...raises: [], tags: [].} 
- Tests if typ has a type field itself . Doesn't consider base types Source Edit
- proc lastOrd(conf: ConfigRef; t: PType): Int128 {....raises: [], tags: [].} 
- 
computes the last ordinal value of a concrete type, taking into account:- int bit-width via the conf param (a nil conf assumes 64 bits)
- the ordinal value set of the last enum element
 
- proc lengthOrd(conf: ConfigRef; t: PType): Int128 {....raises: [], tags: [].} 
- Computes the length, or rather cardinality, of concrete ordinal type (including distincts with ordinal type bases). The cardinality of a type is the total number of possible values that may represent by it. Source Edit
- proc lookupInType(ty: PType; position: int): PSym {....raises: [], tags: [].} 
- Looks up and returns the field with the given position in ty. Returns nil if there's no such field. ty is expected to be a fully resolved object or ref object/ptr object type. Source Edit
- proc matchType(a: PType; pattern: openArray[tuple[k: TTypeKind, i: int]]; last: TTypeKind): bool {....raises: [], tags: [].} 
- Source Edit
- proc mutableSkipConv(n: var PNode): var PNode {....raises: [], tags: [].} 
- Source Edit
- proc mutateType(t: PType; iter: TTypeMutator; closure: RootRef): PType {. ...raises: [Exception, KeyError], tags: [RootEffect].} 
- Source Edit
- proc safeInheritanceDiff(a, b: PType): int {....raises: [], tags: [].} 
- Source Edit
- proc safeSkipTypes(t: PType; kinds: TTypeKinds): PType {....raises: [], tags: [].} 
- same as 'skipTypes' but with a simple cycle detector. Source Edit
- proc sameBackendType(x, y: PType): bool {. ...raises: [Exception, ERecoverableError], tags: [RootEffect].} 
- Source Edit
- proc sameDistinctTypes(a, b: PType): bool {.inline, ...raises: [], tags: [].} 
- Source Edit
- proc sameEnumTypes(a, b: PType): bool {.inline, ...raises: [], tags: [].} 
- Source Edit
- proc sameLocationType(x, y: PType): bool {. ...raises: [Exception, ERecoverableError], tags: [RootEffect].} 
- Tests and returns whether x and y are the same when used as the type for locations Source Edit
- proc sameObjectTypes(a, b: PType): bool {....raises: [], tags: [].} 
- Source Edit
- proc sameType(a, b: PType; flags: TTypeCmpFlags = {}): bool {. ...raises: [Exception], tags: [RootEffect].} 
- Source Edit
- proc sameTypeOrNil(a, b: PType; flags: TTypeCmpFlags = {}): bool {. ...raises: [Exception], tags: [RootEffect].} 
- Source Edit
- proc searchTypeFor(t: PType; predicate: TTypePredicate): bool {. ...raises: [Exception], tags: [RootEffect].} 
- Source Edit
- proc searchTypeNodeFor(n: PNode; predicate: TTypePredicate): bool {. ...raises: [Exception], tags: [RootEffect].} 
- Source Edit
- proc semDiagTypeMismatch(node: PNode; expected: set[TTypeKind]; received: PType): PAstDiag {. ...raises: [], tags: [].} 
- Source Edit
- proc skipConvTakeType(n: PNode): PNode {....raises: [], tags: [].} 
- Source Edit
- proc skipGenericAlias(t: PType): PType {....raises: [], tags: [].} 
- Source Edit
- proc skipHidden(n: PNode): PNode {....raises: [], tags: [].} 
- Source Edit
- proc skipToObject(t: PType; numIndirectsAllowed = 1): PType {.inline, ...raises: [], tags: [].} 
- 
Tries to skip to the underlying tyObject of a type that is used as an object's base type. Unresolved generic invocations are traversed in simple cases. Either the tyObject type or the first encountered type that couldn't be traversed is returned. numIndirectsAllowed specifies the number of ptr and ref types to skip before bailing out. Source Edit
- proc typeMismatch(conf: ConfigRef; info: TLineInfo; formal, actual: PType; n: PNode): PNode {....raises: [], tags: [].} 
- If formal and actual types are not tyError, create a new wrapper nkError node and construct type mismatch report for it. Source Edit
- proc typeMismatch(formal, actual: PType): SemTypeMismatch {....raises: [], tags: [].} 
- Source Edit
- proc typeMismatch(formal: set[TTypeKind]; actual: PType): SemTypeMismatch {. ...raises: [], tags: [].} 
- Source Edit
Templates
- template bindConcreteTypeToUserTypeClass(tc, concrete: PType) 
- Source Edit
- template foldOffsetOf(conf: ConfigRef; n: PNode; fallback: PNode): PNode 
- Returns an int literal node of the given offsetof expression in n. Falls back to fallback, if the offsetof expression can't be processed. Source Edit
- template isResolvedUserTypeClass(t: PType): bool 
- Source Edit