1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
#
#
# Nim's Runtime Library
# (c) Copyright 2012 Andreas Rumpf
#
# See the file "copying.txt", included in this
# distribution, for details about the copyright.
#
type
# This should be the same as ast.TTypeKind
# many enum fields are not used at runtime
TNimKind = enum
tyNone,
tyBool,
tyChar,
tyEmpty,
tyArrayConstr,
tyNil,
tyUntyped,
tyTyped,
tyTypeDesc,
tyGenericInvocation, # ``T[a, b]`` for types to invoke
tyGenericBody, # ``T[a, b, body]`` last parameter is the body
tyGenericInst, # ``T[a, b, realInstance]`` instantiated generic type
tyGenericParam, # ``a`` in the example
tyDistinct, # distinct type
tyEnum,
tyOrdinal,
tyArray,
tyObject,
tyTuple, # WARNING: The compiler uses tyTuple for pure objects!
tySet,
tyRange,
tyPtr,
tyRef,
tyVar,
tySequence,
tyProc,
tyPointer,
tyOpenArray,
tyString,
tyCString,
tyForward,
tyInt,
tyInt8,
tyInt16,
tyInt32,
tyInt64,
tyFloat,
tyFloat32,
tyFloat64,
tyFloat128,
tyUInt,
tyUInt8,
tyUInt16,
tyUInt32,
tyUInt64,
tyOwned, tyUnused1, tyUnused2,
tyVarargsHidden,
tyUncheckedArray,
tyProxyHidden,
tyBuiltInTypeClassHidden,
tyUserTypeClassHidden,
tyUserTypeClassInstHidden,
tyCompositeTypeClassHidden,
tyInferredHidden,
tyAndHidden, tyOrHidden, tyNotHidden,
tyAnythingHidden,
tyStaticHidden,
tyFromExprHidden,
tyOptDeprecated,
tyVoidHidden
TNimNodeKind = enum nkNone, nkSlot, nkList, nkCase
TNimNode {.compilerproc.} = object
kind: TNimNodeKind
offset: int
typ: ptr TNimType
name: cstring
len: int
sons: ptr array[0x7fff, ptr TNimNode]
TNimTypeFlag = enum
ntfNoRefs = 0, # type contains no tyRef, tySequence, tyString
ntfAcyclic = 1, # type cannot form a cycle
ntfEnumHole = 2 # enum has holes and thus `$` for them needs the slow
# version
TNimType {.compilerproc.} = object
when defined(gcHooks):
head*: pointer
size*: int
align*: int
kind: TNimKind
flags: set[TNimTypeFlag]
base*: ptr TNimType
node: ptr TNimNode # valid for tyRecord, tyObject, tyTuple, tyEnum
finalizer*: pointer # the finalizer for the type
marker*: proc (p: pointer, op: int) {.nimcall, benign, tags: [], raises: [].} # marker proc for GC
deepcopy: proc (p: pointer): pointer {.nimcall, benign, tags: [], raises: [].}
when defined(nimSeqsV2):
typeInfoV2*: pointer
when defined(nimTypeNames):
name: cstring
nextType: ptr TNimType
instances: int # count the number of instances
sizes: int # sizes of all instances in bytes
when defined(gcHooks):
type
PNimType* = ptr TNimType
else:
type
PNimType = ptr TNimType
when defined(nimTypeNames):
# Declare this variable only once in system.nim
when declared(ThisIsSystem):
var nimTypeRoot {.compilerproc.}: PNimType
else:
var nimTypeRoot {.importc.}: PNimType
# node.len may be the ``first`` element of a set
|