@@ -384,47 +384,53 @@ private static bool AreArgumentsIdentical(FieldNode fieldA, FieldNode fieldB)
384
384
}
385
385
386
386
private static bool IsValueIdentical (
387
- IValueNode ? valueA ,
388
- IValueNode ? valueB )
387
+ IValueNode valueA ,
388
+ IValueNode valueB )
389
389
{
390
- if ( valueA is null && valueB is null )
391
- {
392
- return true ;
393
- }
394
-
395
- if ( valueA is null || valueB is null )
396
- {
397
- return false ;
398
- }
390
+ var stack = new Stack < ( IValueNode ValueA , IValueNode ValueB ) > ( ) ;
391
+ stack . Push ( ( valueA , valueB ) ) ;
399
392
400
- if ( valueA is ObjectValueNode objectA && valueB is ObjectValueNode objectB )
393
+ while ( stack . Count > 0 )
401
394
{
402
- var validPairs = 0 ;
395
+ var ( currentA , currentB ) = stack . Pop ( ) ;
403
396
404
- for ( var i = 0 ; i < objectA . Fields . Count ; i ++ )
397
+ if ( currentA is ObjectValueNode objectA && currentB is ObjectValueNode objectB )
405
398
{
406
- var fieldA = objectA . Fields [ i ] ;
399
+ if ( objectA . Fields . Count != objectB . Fields . Count )
400
+ {
401
+ return false ;
402
+ }
407
403
408
- for ( var j = 0 ; j < objectB . Fields . Count ; j ++ )
404
+ for ( var i = 0 ; i < objectA . Fields . Count ; i ++ )
409
405
{
410
- var fieldB = objectB . Fields [ j ] ;
406
+ var fieldA = objectA . Fields [ i ] ;
407
+ var matchFound = false ;
411
408
412
- if ( BySyntax . Equals ( fieldA . Name , fieldB . Name ) )
409
+ for ( var j = 0 ; j < objectB . Fields . Count ; j ++ )
413
410
{
414
- if ( IsValueIdentical ( fieldA . Value , fieldB . Value ) )
411
+ var fieldB = objectB . Fields [ j ] ;
412
+
413
+ if ( BySyntax . Equals ( fieldA . Name , fieldB . Name ) )
415
414
{
416
- validPairs ++ ;
415
+ stack . Push ( ( fieldA . Value , fieldB . Value ) ) ;
416
+ matchFound = true ;
417
+ break ;
417
418
}
419
+ }
418
420
419
- break ;
421
+ if ( ! matchFound )
422
+ {
423
+ return false ;
420
424
}
421
425
}
422
426
}
423
-
424
- return objectA . Fields . Count == validPairs ;
427
+ else if ( ! BySyntax . Equals ( currentA , currentB ) )
428
+ {
429
+ return false ;
430
+ }
425
431
}
426
432
427
- return BySyntax . Equals ( valueA , valueB ) ;
433
+ return true ;
428
434
}
429
435
430
436
private static bool SameResponseShape ( IType typeA , IType typeB )
0 commit comments