@@ -96,7 +96,8 @@ bool upb_Message_IsEmpty(const upb_Message* msg, const upb_MiniTable* m) {
96
96
}
97
97
98
98
static bool _upb_Array_IsEqual (const upb_Array * arr1 , const upb_Array * arr2 ,
99
- upb_CType ctype , const upb_MiniTable * m ) {
99
+ upb_CType ctype , const upb_MiniTable * m ,
100
+ int options ) {
100
101
// Check for trivial equality.
101
102
if (arr1 == arr2 ) return true;
102
103
@@ -109,14 +110,14 @@ static bool _upb_Array_IsEqual(const upb_Array* arr1, const upb_Array* arr2,
109
110
const upb_MessageValue val1 = upb_Array_Get (arr1 , i );
110
111
const upb_MessageValue val2 = upb_Array_Get (arr2 , i );
111
112
112
- if (!upb_MessageValue_IsEqual (val1 , val2 , ctype , m )) return false;
113
+ if (!upb_MessageValue_IsEqual (val1 , val2 , ctype , m , options )) return false;
113
114
}
114
115
115
116
return true;
116
117
}
117
118
118
119
static bool _upb_Map_IsEqual (const upb_Map * map1 , const upb_Map * map2 ,
119
- const upb_MiniTable * m ) {
120
+ const upb_MiniTable * m , int options ) {
120
121
// Check for trivial equality.
121
122
if (map1 == map2 ) return true;
122
123
@@ -133,15 +134,17 @@ static bool _upb_Map_IsEqual(const upb_Map* map1, const upb_Map* map2,
133
134
size_t iter = kUpb_Map_Begin ;
134
135
while (upb_Map_Next (map1 , & key , & val1 , & iter )) {
135
136
if (!upb_Map_Get (map2 , key , & val2 )) return false;
136
- if (!upb_MessageValue_IsEqual (val1 , val2 , ctype , m2_value )) return false;
137
+ if (!upb_MessageValue_IsEqual (val1 , val2 , ctype , m2_value , options ))
138
+ return false;
137
139
}
138
140
139
141
return true;
140
142
}
141
143
142
144
static bool _upb_Message_BaseFieldsAreEqual (const upb_Message * msg1 ,
143
145
const upb_Message * msg2 ,
144
- const upb_MiniTable * m ) {
146
+ const upb_MiniTable * m ,
147
+ int options ) {
145
148
// Iterate over all base fields for each message.
146
149
// The order will always match if the messages are equal.
147
150
size_t iter1 = kUpb_BaseField_Begin ;
@@ -164,13 +167,14 @@ static bool _upb_Message_BaseFieldsAreEqual(const upb_Message* msg1,
164
167
bool eq ;
165
168
switch (UPB_PRIVATE (_upb_MiniTableField_Mode )(f1 )) {
166
169
case kUpb_FieldMode_Array :
167
- eq = _upb_Array_IsEqual (val1 .array_val , val2 .array_val , ctype , subm );
170
+ eq = _upb_Array_IsEqual (val1 .array_val , val2 .array_val , ctype , subm ,
171
+ options );
168
172
break ;
169
173
case kUpb_FieldMode_Map :
170
- eq = _upb_Map_IsEqual (val1 .map_val , val2 .map_val , subm );
174
+ eq = _upb_Map_IsEqual (val1 .map_val , val2 .map_val , subm , options );
171
175
break ;
172
176
case kUpb_FieldMode_Scalar :
173
- eq = upb_MessageValue_IsEqual (val1 , val2 , ctype , subm );
177
+ eq = upb_MessageValue_IsEqual (val1 , val2 , ctype , subm , options );
174
178
break ;
175
179
}
176
180
if (!eq ) return false;
@@ -179,7 +183,8 @@ static bool _upb_Message_BaseFieldsAreEqual(const upb_Message* msg1,
179
183
180
184
static bool _upb_Message_ExtensionsAreEqual (const upb_Message * msg1 ,
181
185
const upb_Message * msg2 ,
182
- const upb_MiniTable * m ) {
186
+ const upb_MiniTable * m ,
187
+ int options ) {
183
188
// Must have identical extension counts.
184
189
if (upb_Message_ExtensionCount (msg1 ) != upb_Message_ExtensionCount (msg2 )) {
185
190
return false;
@@ -204,13 +209,14 @@ static bool _upb_Message_ExtensionsAreEqual(const upb_Message* msg1,
204
209
bool eq ;
205
210
switch (UPB_PRIVATE (_upb_MiniTableField_Mode )(f )) {
206
211
case kUpb_FieldMode_Array :
207
- eq = _upb_Array_IsEqual (val1 .array_val , val2 .array_val , ctype , subm );
212
+ eq = _upb_Array_IsEqual (val1 .array_val , val2 .array_val , ctype , subm ,
213
+ options );
208
214
break ;
209
215
case kUpb_FieldMode_Map :
210
216
UPB_UNREACHABLE (); // Maps cannot be extensions.
211
217
break ;
212
218
case kUpb_FieldMode_Scalar : {
213
- eq = upb_MessageValue_IsEqual (val1 , val2 , ctype , subm );
219
+ eq = upb_MessageValue_IsEqual (val1 , val2 , ctype , subm , options );
214
220
break ;
215
221
}
216
222
}
@@ -220,11 +226,11 @@ static bool _upb_Message_ExtensionsAreEqual(const upb_Message* msg1,
220
226
}
221
227
222
228
bool upb_Message_IsEqual (const upb_Message * msg1 , const upb_Message * msg2 ,
223
- const upb_MiniTable * m ) {
229
+ const upb_MiniTable * m , int options ) {
224
230
if (UPB_UNLIKELY (msg1 == msg2 )) return true;
225
231
226
- if (!_upb_Message_BaseFieldsAreEqual (msg1 , msg2 , m )) return false;
227
- if (!_upb_Message_ExtensionsAreEqual (msg1 , msg2 , m )) return false;
232
+ if (!_upb_Message_BaseFieldsAreEqual (msg1 , msg2 , m , options )) return false;
233
+ if (!_upb_Message_ExtensionsAreEqual (msg1 , msg2 , m , options )) return false;
228
234
229
235
// Check the unknown fields.
230
236
size_t usize1 , usize2 ;
0 commit comments