UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
syms_type_graph.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2/* date = February 16th 2022 1:40 pm */
3
4#ifndef SYMS_TYPE_GRAPH_H
5#define SYMS_TYPE_GRAPH_H
6
7// (Notes for maintainers at the bottom)
8
10//~ allen: Syms Type Constructor Helper Types
11
17
23
25//~ allen: Syms Cycle-Safe Type Constructor Helper Types
26
27// NOTE(allen): This is a "linear" type (it should not be used more than once, it should not be coppied)
28
32
34//~ allen: Syms Type Graph Helper Tables
35
36#define SYMS_TYPE_GRAPH_TABLE_BUCKET_COUNT 1024
37
38// modifiers,ptrs,arrays,procs -> type node
45
49
50// usid -> type node
56
61
62// consed name -> chain of type nodes
67
73
79
83
84
86//~ allen: Syms Type Graph
87
97
102
107
108typedef struct SYMS_TypeNode{
109 // SYMS_TypeNode extends and completes the information from SYMS_TypeInfo.
110 // See SYMS_TypeInfo for more interpretation info.
111
115
116 // when non-null contains the type's usid and/or source location of the type's definition
118
119 // (in addition to interpretations of SYMS_TypeInfo 'direct_type')
120 // SYMS_TypeKind_Forward* -> the concrete type referenced by the forward reference
122
123 // 'this_type' meaning depends on kind:
124 // SYMS_TypeKind_MemberPtr -> the container type of the member pointer
125 // SYMS_TypeKind_Proc -> if non-nil this is the type of an implicit 'this' in a C++ method
127
128 union{
129 // kind: SYMS_TypeKind_Modifier
131
132 // kind: SYMS_TypeKind_Array
134
135 // kind: SYMS_TypeKind_Bitfield
136 struct{
140
141 // kind: SYMS_TypeKind_Proc
142 struct{
146
147 // kind: SYMS_TypeKind_Struct, SYMS_TypeKind_Union, SYMS_TypeKind_Class, SYMS_TypeKind_Enum
148 // opaque pointer for lazy eval attachments to the type node.
149 void *lazy_ptr;
150 };
152
176
178//~ allen: Syms Type Info Parse Param Bundle Type
179
190
192//~ allen: Syms Type Graph Nils
193
195 SYMS_TypeKind_Null, // kind
196 {(SYMS_U8*)"(nil)", 5}, // name
197 0, // byte_size
198 0, // src_coord
199 &syms_type_node_nil, // direct_type
200 &syms_type_node_nil, // this_type
201};
202
205
207//~ allen: Type Graph Setup Functions
208
209// The graph_arena is a "permanent arena". It is used for all
210// memory allocations on the graph. It should not be popped or
211// released until the graph is no longer in use. It should not
212// be a scratch arena. Similarly the string cons structure should
213// not be released until the graph is no longer in use.
214
218
220//~ allen: Type Mapping Functions
221
223
226
228//~ allen: Type Node Info Getters
229
232 SYMS_TypeNode *node);
233
235
237//~ allen: Type Node Basic Type Getters
238
240
242
248
254
257
259//~ allen: Type Node Constructors
260
261//- deduplicated types
263 SYMS_TypeKind kind, SYMS_U64 size, SYMS_String8 name);
269 SYMS_TypeNode **params, SYMS_U64 count);
271 SYMS_TypeNode *container, SYMS_TypeNode *type);
274
275//- record types from member lists
278 SYMS_String8 name, SYMS_TypeNode *type);
280 SYMS_TypeKind kind, SYMS_String8 name,
282
283//- record types with defered member lists
285 SYMS_TypeKind kind, SYMS_String8 name,
286 SYMS_U64 byte_size,
288
289//- other UDTs
294 SYMS_String8 name, SYMS_TypeNode *type,
297 SYMS_TypeKind kind, SYMS_String8 name, SYMS_TypeNode *type,
299
300//- usid place holders
304 SYMS_TypeNode *node);
305
306//- equipping record members
309
310
311//- equipping enum members
314
315//- unique info helpers
318
319
321//~ allen: Type Info Operators
322
325
327
331
332
334//~ allen: Type Stringizing
335
337
342
344 SYMS_TypeNode *type,
346
348 SYMS_TypeNode *type,
350 SYMS_U32 prec, SYMS_B32 skip);
352 SYMS_TypeNode *type,
354 SYMS_U32 prec);
355
357//~ allen: Type Info Construct From Dbg Info
358
360 SYMS_SymbolID sid);
361
363 SYMS_SymbolID sid);
364
365// NOTE(allen): The "node" must be one that was returned by "syms_type_from_dbg_sid".
366// The "params" used here must match the "params" used from that call (same debug data, same unit).
367// This function has no mechanism for checking this - so it's up to the user to arrange this correctly!
369 SYMS_TypeNode *node);
370
372//~ allen: Type Content Table Functions
373
377 SYMS_String8 key, SYMS_TypeNode *type);
378
380//~ allen: Type USID Table Functions
381
385 SYMS_USID key, SYMS_TypeNode *type);
386
388//~ allen: Type Name Table Functions
389
393 SYMS_U8 *name_ptr, SYMS_TypeNode *type);
394
396//~ allen: Notes for Maintainers
397
398// Depending on the types, type information can require various combinations of:
399// 1. Deduplicating identical types - which requires a consing map of (TypeContents -> Type)
400// 2. Remembering a map of (Name -> ListOfTypes)
401// 3. Remembering a map of (ID -> Type)
402// 4. Preventing data cycles from creating infinite loops in the parser
403// 5. Defering member construction to a later pass
404// 6. Infering type size and layout from members
405// 7. Attaching an ID to a type (allowing the mapping Type -> ID)
406// 8. Attaching source location information
407
408// 1 - For basic types, modified types, pointers (& references), arrays, procedures, and bitfields.
409// Users constructing these will want to know they can summon up something like a pointer to an
410// arbitrary type without creating lots of duplicated versions taking up memory.
411// "ContentBuckets" handles this.
412// The "cons" APIs for these types check for existing copies of the requested type before constructing them.
413// Because of deduplication unique info (7 and 8) are impossible for these types.
414
415// 2 - For basic types, structs, unions, classes, enums, and typedefs.
416// The same name may appear multiple times, hence why this is a list of types.
417// "NameBuckets" handles this.
418// The "cons" APIs for these types automatically insert the type (if it is new) into the name map.
419
420// 3 - For *any* kind of type *if* it is parsed from debug info (which is where IDs come from)
421// "USIDBuckets" handles this.
422// The "usid_place_holder" API handles this.
423// Since any type can have an ID, the API for handling IDs is orthogonal to the "cons" APIs.
424
425// 4 - When constructing type info from serialized data, it is always possible that malformed input
426// may give an unconstructable structure. For instance if X is the ID of a pointer, then that pointer
427// will give it's base type by giving an ID for another type in the serialized data. If that ID is
428// X, the pointer has _itself_ as it's own base type. Since this isn't an allowed structure in type
429// info the only thing the parser needs to do is avoid an infinite loop. To achieve this we insert
430// a nil in the (ID -> Type) map *first* and then later replace it with the final version of the type
431// info. That way if the type info has a data cycle, it will resolve to broken type data and return
432// rather than getting caught in a loop. We cannot do this with a pre-allocated "stub" node because
433// sometimes the final node pointer will be one that _already existed_ and was discovered by
434// deduplication (1).
435// The "usid_place_holder" API handles this.
436
437// 5 - Structs, unions and classes have members which are an exception to the from rule #4. These *can*
438// create data cycles (A struct Foo containing a Foo pointer as a member).
439// When constructing type info from debug info, the debug info gives the size of the struct directly
440// so we don't have to resolve members to find the size anyways. Therefore we can make everything work
441// by defering member construction to a later pass (when all the type IDs are resolved).
442// The "cons_record_defer_members" API handles constructing the type.
443// The "syms_type_equip" APIs handle equipping the members later.
444// Later - to figure out what members this type is supposed to have - the type node needs to remember
445// the ID of the type. Therefore this requires unique info (7).
446
447// 6 - When user code wants to construct a struct, union, or class, it often knows the members but not
448// their exact layout or the size of the final type. This case calls for an API that takes in the
449// list of members and computes the layout and final size when constructing the type. However these
450// types can still want to form cycles (A struct Foo containing a Foo pointer as a member).
451// To support this we need an API that creates a stub type that can be finished later.
452// This is _very different_ from the USID place holders (4). That creates a mapping (ID -> Type)
453// for a type with a known ID, before the type node pointer itself can be known. In this case there
454// is _no ID at all_ and the user neds the type node pointer to proceed.
455// The "cons_artificial_stub" API creates the stub node.
456// The "cons_artificial_finish" API computes the layout & size, finishes the record type, and equips
457// members (no 5 in this case).
458
459// 7 - Types with defered member construction (see 5) need to know their own ID so that their members can
460// be filled in later. For this the types have an optional "UniqueInfo" extension. This unique info
461// can carry the ID of the type. "cons" APIs for structs, unions, classes, and enums have to take an
462// optional "UniqueInfo" to support this case.
463
464// 8 - Structs, unions, classes, enums, typedefs, and "forward" types can have source location information
465// when they come from debug info. To handle this the "cons" APIs for these types have to take an
466// optional "UniqueInfo" which can carry the source location.
467
468#endif //SYMS_TYPE_GRAPH_H
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
Definition syms_debug_info.h:346
Definition syms_debug_info.h:341
Definition syms_parser.h:69
Definition syms_debug_info.h:130
Definition syms_base.h:306
Definition syms_base.h:296
Definition syms_data_structures.h:20
Definition syms_type_graph.h:63
struct SYMS_TypeChainNode * next
Definition syms_type_graph.h:64
struct SYMS_TypeNode * type
Definition syms_type_graph.h:65
Definition syms_type_graph.h:68
SYMS_TypeChainNode * first
Definition syms_type_graph.h:69
SYMS_TypeChainNode * last
Definition syms_type_graph.h:70
SYMS_U64 count
Definition syms_type_graph.h:71
Definition syms_type_graph.h:18
SYMS_TypeConsMember * last
Definition syms_type_graph.h:20
SYMS_U64 count
Definition syms_type_graph.h:21
SYMS_TypeConsMember * first
Definition syms_type_graph.h:19
Definition syms_type_graph.h:12
SYMS_String8 name
Definition syms_type_graph.h:14
struct SYMS_TypeNode * type
Definition syms_type_graph.h:15
struct SYMS_TypeConsMember * next
Definition syms_type_graph.h:13
Definition syms_type_graph.h:46
SYMS_TypeContentNode ** buckets
Definition syms_type_graph.h:47
Definition syms_type_graph.h:39
SYMS_String8 key
Definition syms_type_graph.h:41
struct SYMS_TypeContentNode * next
Definition syms_type_graph.h:40
SYMS_U64 hash
Definition syms_type_graph.h:42
struct SYMS_TypeNode * type
Definition syms_type_graph.h:43
Definition syms_type_graph.h:153
SYMS_TypeNode * type_s8
Definition syms_type_graph.h:168
SYMS_TypeNode * type_f32
Definition syms_type_graph.h:173
SYMS_TypeNode * type_u16
Definition syms_type_graph.h:164
SYMS_TypeNode * type_s64
Definition syms_type_graph.h:171
SYMS_U64 address_size
Definition syms_type_graph.h:156
SYMS_TypeNode * type_void
Definition syms_type_graph.h:161
SYMS_TypeNameBuckets name_buckets
Definition syms_type_graph.h:159
SYMS_TypeNode * type_u64
Definition syms_type_graph.h:166
SYMS_TypeNode * type_bool
Definition syms_type_graph.h:162
SYMS_TypeNode * type_u32
Definition syms_type_graph.h:165
SYMS_StringCons * string_cons
Definition syms_type_graph.h:155
SYMS_TypeNode * type_s32
Definition syms_type_graph.h:170
SYMS_TypeContentBuckets content_buckets
Definition syms_type_graph.h:157
SYMS_TypeNode * type_s128
Definition syms_type_graph.h:172
SYMS_TypeNode * type_u8
Definition syms_type_graph.h:163
SYMS_TypeUSIDBuckets usid_buckets
Definition syms_type_graph.h:158
SYMS_TypeNode * type_u128
Definition syms_type_graph.h:167
SYMS_TypeNode * type_s16
Definition syms_type_graph.h:169
SYMS_TypeNode * type_f64
Definition syms_type_graph.h:174
SYMS_Arena * arena
Definition syms_type_graph.h:154
Definition syms_type_graph.h:103
SYMS_TypeMember * mems
Definition syms_type_graph.h:104
SYMS_U64 count
Definition syms_type_graph.h:105
Definition syms_type_graph.h:88
SYMS_U32 off
Definition syms_type_graph.h:93
SYMS_MemKind kind
Definition syms_type_graph.h:89
struct SYMS_TypeNode * type
Definition syms_type_graph.h:95
SYMS_String8 name
Definition syms_type_graph.h:92
SYMS_U32 virtual_off
Definition syms_type_graph.h:94
SYMS_MemFlags flags
Definition syms_type_graph.h:91
SYMS_MemVisibility visibility
Definition syms_type_graph.h:90
Definition syms_type_graph.h:80
SYMS_TypeNameNode ** buckets
Definition syms_type_graph.h:81
Definition syms_type_graph.h:74
SYMS_U8 * name_ptr
Definition syms_type_graph.h:76
SYMS_TypeChain chain
Definition syms_type_graph.h:77
struct SYMS_TypeNameNode * next
Definition syms_type_graph.h:75
Definition syms_type_graph.h:108
SYMS_U64 param_count
Definition syms_type_graph.h:144
struct SYMS_TypeNode::@2314::@2316 bits
SYMS_U32 count
Definition syms_type_graph.h:138
struct SYMS_TypeNode::@2314::@2317 proc
struct SYMS_TypeNode * direct_type
Definition syms_type_graph.h:121
void * lazy_ptr
Definition syms_type_graph.h:149
SYMS_U64 array_count
Definition syms_type_graph.h:133
SYMS_U64 byte_size
Definition syms_type_graph.h:114
struct SYMS_TypeNode ** params
Definition syms_type_graph.h:143
struct SYMS_TypeNode * this_type
Definition syms_type_graph.h:126
SYMS_TypeModifiers mods
Definition syms_type_graph.h:130
SYMS_String8 name
Definition syms_type_graph.h:113
SYMS_TypeUniqueInfo * unique
Definition syms_type_graph.h:117
SYMS_TypeKind kind
Definition syms_type_graph.h:112
SYMS_U32 off
Definition syms_type_graph.h:137
Definition syms_type_graph.h:180
SYMS_MapAndUnit * type_map
Definition syms_type_graph.h:188
SYMS_UnitSetAccel * unit_set
Definition syms_type_graph.h:183
SYMS_UnitID uid
Definition syms_type_graph.h:185
SYMS_DbgAccel * dbg
Definition syms_type_graph.h:182
SYMS_UnitAccel * unit
Definition syms_type_graph.h:184
SYMS_String8 data
Definition syms_type_graph.h:181
Definition syms_type_graph.h:57
SYMS_U64 * bucket_counts
Definition syms_type_graph.h:59
SYMS_TypeUSIDNode ** buckets
Definition syms_type_graph.h:58
Definition syms_type_graph.h:51
struct SYMS_TypeUSIDNode * next
Definition syms_type_graph.h:52
SYMS_USID key
Definition syms_type_graph.h:53
struct SYMS_TypeNode * type
Definition syms_type_graph.h:54
Definition syms_type_graph.h:29
struct SYMS_TypeUSIDNode * usid_node
Definition syms_type_graph.h:30
Definition syms_type_graph.h:98
SYMS_USID usid
Definition syms_type_graph.h:99
SYMS_SrcCoord src_coord
Definition syms_type_graph.h:100
Definition syms_debug_info.h:234
#define SYMS_READ_ONLY
Definition syms_base.h:57
#define SYMS_API
Definition syms_base.h:29
SYMS_S32 SYMS_B32
Definition syms_base.h:99
#define SYMS_GLOBAL
Definition syms_base.h:42
uint32_t SYMS_U32
Definition syms_crt_overrides.h:38
uint64_t SYMS_U64
Definition syms_crt_overrides.h:39
uint8_t SYMS_U8
Definition syms_crt_overrides.h:36
SYMS_U32 SYMS_MemFlags
Definition syms_debug_info.h:318
SYMS_U64 SYMS_UnitID
Definition syms_debug_info.h:77
SYMS_U64 SYMS_SymbolID
Definition syms_debug_info.h:215
SYMS_MemKind
Definition syms_debug_info.h:306
#define SYMS_Arena
Definition syms_default_arena.h:61
SYMS_MemVisibility
Definition syms_meta_debug_info.h:92
SYMS_U32 SYMS_TypeModifiers
Definition syms_meta_debug_info.h:81
SYMS_TypeKind
Definition syms_meta_debug_info.h:27
@ SYMS_TypeKind_Null
Definition syms_meta_debug_info.h:28
SYMS_API SYMS_U64 syms_type_content_hash(SYMS_String8 data)
Definition syms_type_graph.c:1523
SYMS_API SYMS_U64 syms_type_name_hash(SYMS_U8 *ptr)
Definition syms_type_graph.c:1624
SYMS_API SYMS_TypeNode * syms_type_auto_casted_from_type_nodes(SYMS_TypeGraph *graph, SYMS_TypeNode *l, SYMS_TypeNode *r)
Definition syms_type_graph.c:811
SYMS_API SYMS_TypeNode * syms_type_u8(SYMS_TypeGraph *graph)
Definition syms_type_graph.c:117
SYMS_API SYMS_EnumMemberArray syms_type_enum_members_from_type(SYMS_TypeGraph *graph, SYMS_TypeNode *node)
Definition syms_type_graph.c:73
SYMS_API void syms_type_cons_record_with_members(SYMS_TypeGraph *graph, SYMS_TypeNode *stub, SYMS_TypeKind kind, SYMS_String8 name, SYMS_TypeConsMemberList *list)
Definition syms_type_graph.c:439
SYMS_READ_ONLY SYMS_GLOBAL SYMS_TypeNode syms_type_node_nil
Definition syms_type_graph.h:194
SYMS_API SYMS_TypeNode * syms_type_void(SYMS_TypeGraph *graph)
Definition syms_type_graph.c:97
SYMS_API SYMS_TypeMember * syms_type_equip_mems_pre_allocate(SYMS_TypeGraph *graph, SYMS_TypeNode *node, SYMS_U64 member_count)
Definition syms_type_graph.c:637
SYMS_READ_ONLY SYMS_GLOBAL SYMS_TypeMemberArray syms_type_member_array_nil
Definition syms_type_graph.h:203
SYMS_API SYMS_TypeNode * syms_type_u32(SYMS_TypeGraph *graph)
Definition syms_type_graph.c:137
SYMS_API SYMS_TypeNode * syms_type_promoted_from_type_node(SYMS_TypeGraph *graph, SYMS_TypeNode *c)
Definition syms_type_graph.c:797
SYMS_API SYMS_EnumMember * syms_type_equip_enum_mems_pre_allocate(SYMS_TypeGraph *graph, SYMS_TypeNode *node, SYMS_U64 member_count)
Definition syms_type_graph.c:654
SYMS_API SYMS_TypeNode * syms_type_cons_mod(SYMS_TypeGraph *graph, SYMS_TypeNode *type, SYMS_TypeModifiers mods)
Definition syms_type_graph.c:269
SYMS_API SYMS_TypeNode * syms_type_cons_array(SYMS_TypeGraph *graph, SYMS_TypeNode *type, SYMS_U64 count)
Definition syms_type_graph.c:319
SYMS_API void syms_type_rhs_string_from_type__internal(SYMS_Arena *arena, SYMS_TypeNode *type, SYMS_String8List *out, SYMS_U32 prec)
Definition syms_type_graph.c:1010
SYMS_API SYMS_TypeNode * syms_type_from_usid_buckets(SYMS_TypeUSIDBuckets *buckets, SYMS_USID usid)
Definition syms_type_graph.c:1579
SYMS_API SYMS_B32 syms_type_members_are_equipped(SYMS_TypeGraph *graph, SYMS_TypeNode *node)
Definition syms_type_graph.c:82
SYMS_API SYMS_TypeUniqueInfo syms_type_unique_from_usid_src_coord(SYMS_USID usid, SYMS_SrcCoord *src_coord)
Definition syms_type_graph.c:681
SYMS_API SYMS_TypeNode * syms_type_cons_basic(SYMS_TypeGraph *graph, SYMS_TypeKind kind, SYMS_U64 size, SYMS_String8 name)
Definition syms_type_graph.c:240
SYMS_API void syms_type_lhs_string_from_type(SYMS_Arena *arena, SYMS_TypeNode *type, SYMS_String8List *out)
Definition syms_type_graph.c:877
SYMS_API void syms_type_graph_init(SYMS_TypeGraph *graph, SYMS_Arena *graph_arena, SYMS_StringCons *graph_string_cons, SYMS_U64 address_size_bytes)
Definition syms_type_graph.c:10
SYMS_API SYMS_TypeNode * syms_type_s128(SYMS_TypeGraph *graph)
Definition syms_type_graph.c:207
SYMS_API SYMS_TypeNode * syms_type_cons_typedef(SYMS_TypeGraph *graph, SYMS_String8 name, SYMS_TypeNode *type, SYMS_TypeUniqueInfo *unique_opt)
Definition syms_type_graph.c:581
SYMS_API SYMS_TypeNode * syms_type_f32(SYMS_TypeGraph *graph)
Definition syms_type_graph.c:217
SYMS_API SYMS_U64 syms_type_usid_hash(SYMS_USID usid)
Definition syms_type_graph.c:1573
SYMS_API SYMS_TypeNode * syms_type_from_dbg_sid(SYMS_TypeGraph *graph, SYMS_TypeParseParams *params, SYMS_SymbolID sid)
Definition syms_type_graph.c:1082
SYMS_API void syms_type_lhs_string_from_type_skip_return(SYMS_Arena *arena, SYMS_TypeNode *type, SYMS_String8List *out)
Definition syms_type_graph.c:891
SYMS_API SYMS_TypeNode * syms_type_cons_record_defer_members(SYMS_TypeGraph *graph, SYMS_TypeKind kind, SYMS_String8 name, SYMS_U64 byte_size, SYMS_TypeUniqueInfo *unique_opt)
Definition syms_type_graph.c:541
SYMS_API SYMS_String8 syms_type_content_insert(SYMS_Arena *arena, SYMS_TypeContentBuckets *buckets, SYMS_String8 key, SYMS_TypeNode *type)
Definition syms_type_graph.c:1549
SYMS_API SYMS_String8 syms_type_string_from_type(SYMS_Arena *arena, SYMS_TypeNode *type)
Definition syms_type_graph.c:864
SYMS_API SYMS_TypeNode * syms_type_resolve_enum_to_basic(SYMS_TypeGraph *graph, SYMS_TypeNode *t)
Definition syms_type_graph.c:788
SYMS_API SYMS_TypeUSIDPlaceHolder syms_type_usid_place_holder_insert(SYMS_TypeGraph *graph, SYMS_USID usid)
Definition syms_type_graph.c:621
SYMS_API SYMS_TypeChain * syms_type_chain_from_name_buckets(SYMS_TypeNameBuckets *buckets, SYMS_U8 *name_ptr)
Definition syms_type_graph.c:1632
SYMS_API SYMS_TypeNode * syms_type_s8(SYMS_TypeGraph *graph)
Definition syms_type_graph.c:167
SYMS_API void syms_type_lhs_string_from_type__internal(SYMS_Arena *arena, SYMS_TypeNode *type, SYMS_String8List *out, SYMS_U32 prec, SYMS_B32 skip)
Definition syms_type_graph.c:898
SYMS_API SYMS_TypeNode * syms_type_u64(SYMS_TypeGraph *graph)
Definition syms_type_graph.c:147
SYMS_API SYMS_TypeNode * syms_type_from_dbg_sid__rec(SYMS_TypeGraph *graph, SYMS_TypeParseParams *params, SYMS_SymbolID sid)
Definition syms_type_graph.c:1095
SYMS_API SYMS_TypeNode * syms_type_cons_enum_defer_members(SYMS_TypeGraph *graph, SYMS_String8 name, SYMS_TypeNode *underlying_type, SYMS_TypeUniqueInfo *unique_opt)
Definition syms_type_graph.c:561
SYMS_API SYMS_TypeNode * syms_type_from_usid(SYMS_TypeGraph *graph, SYMS_USID usid)
Definition syms_type_graph.c:44
SYMS_API SYMS_TypeNode * syms_type_cons_mem_ptr(SYMS_TypeGraph *graph, SYMS_TypeNode *container, SYMS_TypeNode *type)
Definition syms_type_graph.c:377
SYMS_API SYMS_TypeNode * syms_type_cons_proc(SYMS_TypeGraph *graph, SYMS_TypeNode *ret_type, SYMS_TypeNode *this_type, SYMS_TypeNode **params, SYMS_U64 count)
Definition syms_type_graph.c:345
SYMS_API SYMS_TypeNode * syms_type_u128(SYMS_TypeGraph *graph)
Definition syms_type_graph.c:157
SYMS_API SYMS_TypeUSIDNode * syms_type_usid_insert(SYMS_Arena *arena, SYMS_TypeUSIDBuckets *buckets, SYMS_USID key, SYMS_TypeNode *type)
Definition syms_type_graph.c:1600
SYMS_API SYMS_TypeUniqueInfo * syms_type_unique_copy(SYMS_Arena *arena, SYMS_TypeUniqueInfo *unique_opt)
Definition syms_type_graph.c:671
SYMS_API SYMS_TypeNode * syms_type_s64(SYMS_TypeGraph *graph)
Definition syms_type_graph.c:197
SYMS_API SYMS_TypeNode * syms_type_bool(SYMS_TypeGraph *graph)
Definition syms_type_graph.c:107
SYMS_API void syms_type_name_insert(SYMS_Arena *arena, SYMS_TypeNameBuckets *buckets, SYMS_U8 *name_ptr, SYMS_TypeNode *type)
Definition syms_type_graph.c:1652
SYMS_API SYMS_TypeNode * syms_type_cons_fwd(SYMS_TypeGraph *graph, SYMS_TypeKind kind, SYMS_String8 name, SYMS_TypeNode *type, SYMS_TypeUniqueInfo *unique_opt)
Definition syms_type_graph.c:601
SYMS_API SYMS_TypeNode * syms_type_s16(SYMS_TypeGraph *graph)
Definition syms_type_graph.c:177
SYMS_API SYMS_TypeNode * syms_type_from_content_buckets(SYMS_TypeContentBuckets *buckets, SYMS_String8 data)
Definition syms_type_graph.c:1529
SYMS_API SYMS_TypeMemberArray syms_type_members_from_type(SYMS_TypeGraph *graph, SYMS_TypeNode *node)
Definition syms_type_graph.c:64
SYMS_API void syms_type_cons_mem_list_push(SYMS_Arena *arena, SYMS_TypeConsMemberList *list, SYMS_String8 name, SYMS_TypeNode *type)
SYMS_API void syms_type_rhs_string_from_type(SYMS_Arena *arena, SYMS_TypeNode *type, SYMS_String8List *out)
Definition syms_type_graph.c:884
SYMS_API SYMS_TypeNode * syms_type_s32(SYMS_TypeGraph *graph)
Definition syms_type_graph.c:187
SYMS_READ_ONLY SYMS_GLOBAL SYMS_EnumMemberArray syms_type_enum_member_array_nil
Definition syms_type_graph.h:204
SYMS_API SYMS_TypeNode * syms_type_u16(SYMS_TypeGraph *graph)
Definition syms_type_graph.c:127
SYMS_API SYMS_TypeNode * syms_type_cons_ptr(SYMS_TypeGraph *graph, SYMS_TypeKind ptr_kind, SYMS_TypeNode *type)
Definition syms_type_graph.c:295
SYMS_API SYMS_TypeNode * syms_type_resolved(SYMS_TypeNode *type)
Definition syms_type_graph.c:695
SYMS_API void syms_type_equip_members_from_dbg(SYMS_TypeGraph *graph, SYMS_TypeParseParams *params, SYMS_TypeNode *node)
Definition syms_type_graph.c:1389
SYMS_API SYMS_TypeNode * syms_type_f64(SYMS_TypeGraph *graph)
Definition syms_type_graph.c:227
SYMS_API SYMS_TypeNode * syms_type_cons_record_stub(SYMS_TypeGraph *graph)
Definition syms_type_graph.c:420
SYMS_API SYMS_TypeNode * syms_type_cons_bitfield(SYMS_TypeGraph *graph, SYMS_TypeNode *underlying_type, SYMS_U32 bitoff, SYMS_U32 bitcount)
Definition syms_type_graph.c:407
SYMS_API SYMS_B32 syms_type_node_match(SYMS_TypeNode *l, SYMS_TypeNode *r)
Definition syms_type_graph.c:706
SYMS_API void syms_type_usid_place_holder_replace(SYMS_TypeGraph *graph, SYMS_TypeUSIDPlaceHolder *place, SYMS_TypeNode *node)
Definition syms_type_graph.c:628
SYMS_API SYMS_String8 syms_type_string_cons(SYMS_TypeGraph *graph, SYMS_String8 name)
Definition syms_type_graph.c:38
SYMS_API SYMS_TypeChain syms_type_from_name(SYMS_TypeGraph *graph, SYMS_String8 name)
Definition syms_type_graph.c:50
Definition syms_parser.h:30
Definition syms_parser.h:42
Definition syms_parser.h:36