MCPcopy Create free account
hub / github.com/FEX-Emu/FEX / CompareStructs

Function CompareStructs

Scripts/StructPackVerifier.py:506–542  ·  view source on GitHub ↗
(Struct1, Struct2)

Source from the content-addressed store, hash-verified

504 logging.error ("\t'{0}' member '{1}' Doesn't exist in '{2}'".format(Struct1.Name, Member1.Name, Struct2.Name));
505
506def CompareStructs(Struct1, Struct2):
507 HadWarning = False
508 HadError = False
509
510 # Check if the struct size is a mismatch
511 if (Struct1.Size != Struct2.Size):
512 logging.warning ("\t#### Warning: Struct size mismatch. {0} != {1}".format(Struct1.Size, Struct2.Size))
513 logging.warning ("\t\tMight not be a problem if struct isn't in used inside another struct, or end of object")
514 HadWarning = True
515
516 # Check if the number of members differ
517 if (len(Struct1.Members) != len(Struct2.Members)):
518 logging.error ("@@@@ ERROR: Struct fields mismatch! Number of fields don't match! {0} != {1}".format(len(Struct1.Members), len(Struct2.Members)));
519 PrintMissingMembers(Struct1, Struct2)
520 PrintMissingMembers(Struct2, Struct1)
521 HadError = True
522 else:
523 # Compare the members themselves
524 for StructMemberIndex in range(0, len(Struct1.Members)):
525 Member1 = Struct1.Members[StructMemberIndex]
526 Member2 = Struct2.Members[StructMemberIndex]
527 if (Member1.Type == TypeDefinition.TYPE_FIELD):
528 if (Member1.Size != Member2.Size):
529 logging.error ("\t@@@@ ERROR: Member '{0}' mismatch Size! {1} != {2}".format(Member1.Name, Member1.Size, Member2.Size));
530 HadError = True
531 if (Member1.OffsetOf != Member2.OffsetOf):
532 logging.error ("\t@@@@ ERROR: Member '{0}' mismatch OffsetOf! {1} != {2}".format(Member1.Name, Member1.OffsetOf, Member2.OffsetOf));
533 HadError = True
534 if (Member1.Alignment != Member2.Alignment):
535 logging.error ("\t@@@@ ERROR: Member '{0}' mismatch Alignment! {1} != {2}".format(Member1.Name, Member1.Alignment, Member2.Alignment));
536 logging.error ("\t\tProbably not a problem if offset and size matches");
537 HadWarning = True
538 else:
539 logging.critical ("Oops, didn't handle member type {0}".format(Member1.Type))
540 pass
541
542 return not (HadWarning or HadError)
543
544def CompareAliases(DB, DBs):
545 Passed = True

Callers 2

CompareAliasesFunction · 0.85
CompareCrossArchFunction · 0.85

Calls 2

PrintMissingMembersFunction · 0.85
formatMethod · 0.45

Tested by

no test coverage detected