UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
syms_parser_invariants.c
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
4//~ NOTE(allen): Parser Invariants
5
8 SYMS_B32 result = syms_true;
9
10 // The way we write result pointers for accelerators it is a little bit easy
11 // to accidentally modify syms_format_nil, this invariant is here to catch
12 // whenever we make that mistake.
14
16 return(result);
17}
18
21 SYMS_B32 result = syms_true;
22
23 SYMS_U64 count = ranges->count;
25 for (SYMS_U64 i = 0; i < count; i += 1, range_ptr += 1){
26 // no empty ranges
27 SYMS_INVARIANT(result, range_ptr->vrange.min < range_ptr->vrange.max);
28 // no ranges that refer to the null unit id
29 SYMS_INVARIANT(result, range_ptr->uid != 0);
30 }
31
33 return(result);
34}
35
38 SYMS_B32 result = syms_true;
39
40 SYMS_U64 unit_count = syms_unit_count_from_set(unit_set);
41 SYMS_U64 count = ranges->count;
43 for (SYMS_U64 i = 0; i < count; i += 1, range_ptr += 1){
44 // all unit ids map to an actual unit
46 SYMS_INVARIANT(result, 0 < n && n <= unit_count);
47 }
48
50 return(result);
51}
52
55 SYMS_B32 result = syms_true;
56
57 SYMS_U64 line_count = line_table->line_count;
58 SYMS_U64 seq_count = line_table->sequence_count;
59
60 // no sequences and no lines, or at least one of each
61 SYMS_INVARIANT(result, (line_count == 0) == (seq_count == 0));
62
63 if (seq_count > 0 && line_count > 0){
64 // first sequence index is zero
65 SYMS_INVARIANT(result, line_table->sequence_index_array[0] == 0);
66 // ender sequence index is line_count
67 SYMS_INVARIANT(result, line_table->sequence_index_array[seq_count] == line_count);
68
70 for (SYMS_U64 i = 0; i < seq_count; i += 1){
71 SYMS_U64 first = *seq_idx_ptr;
72 seq_idx_ptr += 1;
73 SYMS_U64 opl = *seq_idx_ptr;
74 // no empty sequences
75 SYMS_INVARIANT(result, first + 1 < opl);
76 }
77 }
78
80 return(result);
81}
82
85 SYMS_B32 result = syms_true;
86
87 SYMS_U64 seq_count = line_table->sequence_count;
89 for (SYMS_U64 i = 0; i < seq_count; i += 1){
90 SYMS_U64 first = *seq_idx_ptr;
91 seq_idx_ptr += 1;
92 SYMS_U64 opl = *seq_idx_ptr;
93 SYMS_U64 last = opl - 1;
94 SYMS_Line *line = line_table->line_array + first;
95 for (SYMS_U64 j = first; j < last; j += 1, line += 1){
96 // line virtual offsets in non-decreasing order
97 SYMS_INVARIANT(result, line->voff <= (line + 1)->voff);
98 }
99 }
100
102 return(result);
103}
OODEFFUNC typedef const char int line
Definition oodle2.h:678
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
Definition syms_debug_info.h:153
SYMS_U64 line_count
Definition syms_debug_info.h:161
SYMS_Line * line_array
Definition syms_debug_info.h:160
SYMS_U64 * sequence_index_array
Definition syms_debug_info.h:157
SYMS_U64 sequence_count
Definition syms_debug_info.h:158
Definition syms_debug_info.h:136
Definition syms_debug_info.h:97
SYMS_U64 count
Definition syms_debug_info.h:99
SYMS_UnitRange * ranges
Definition syms_debug_info.h:98
Definition syms_debug_info.h:92
SYMS_UnitID uid
Definition syms_debug_info.h:94
#define syms_true
Definition syms_base.h:105
#define SYMS_API
Definition syms_base.h:29
#define SYMS_INVARIANT(r, x)
Definition syms_base.h:138
SYMS_S32 SYMS_B32
Definition syms_base.h:99
uint64_t SYMS_U64
Definition syms_crt_overrides.h:39
SYMS_READ_ONLY SYMS_GLOBAL SYMS_FileFormat syms_format_nil
Definition syms_debug_info.h:398
@ SYMS_FileFormat_Null
Definition syms_meta_base.h:95
SYMS_API SYMS_U64 syms_unit_count_from_set(SYMS_UnitSetAccel *accel)
Definition syms_parser.c:522
SYMS_API SYMS_B32 syms_line_table_high_level_invariants(SYMS_LineTable *line_table)
Definition syms_parser_invariants.c:84
SYMS_API SYMS_B32 syms_line_table_low_level_invariants(SYMS_LineTable *line_table)
Definition syms_parser_invariants.c:54
SYMS_API SYMS_B32 syms_parser_api_invariants(void)
Definition syms_parser_invariants.c:7
SYMS_API SYMS_B32 syms_unit_ranges_high_level_invariants(SYMS_UnitRangeArray *ranges, SYMS_UnitSetAccel *unit_set)
Definition syms_parser_invariants.c:37
SYMS_API SYMS_B32 syms_unit_ranges_low_level_invariants(SYMS_UnitRangeArray *ranges)
Definition syms_parser_invariants.c:20
Definition syms_parser.h:36