|  | import sys | 
|  |  | 
|  |  | 
|  | def check_duplicates(): | 
|  | auto_content = "" | 
|  | manual_content = "" | 
|  |  | 
|  | with open("src/intrinsic/llvm.rs", "r", encoding="utf8") as f: | 
|  | manual_content = f.read() | 
|  | with open("src/intrinsic/archs.rs", "r", encoding="utf8") as f: | 
|  | auto_content = f.read() | 
|  |  | 
|  | intrinsics_map = {} | 
|  | for line in auto_content.splitlines(): | 
|  | line = line.strip() | 
|  | if not line.startswith('"'): | 
|  | continue | 
|  | parts = line.split('"') | 
|  | if len(parts) != 5: | 
|  | continue | 
|  | intrinsics_map[parts[1]] = parts[3] | 
|  |  | 
|  | if len(intrinsics_map) == 0: | 
|  | print("No intrinsics found in auto code... Aborting.") | 
|  | return 1 | 
|  | print("Found {} intrinsics in auto code".format(len(intrinsics_map))) | 
|  | errors = [] | 
|  | lines = manual_content.splitlines() | 
|  | pos = 0 | 
|  | found = 0 | 
|  | while pos < len(lines): | 
|  | line = lines[pos].strip() | 
|  | # This is our marker. | 
|  | if line == "let gcc_name = match name {": | 
|  | while pos < len(lines): | 
|  | line = lines[pos].strip() | 
|  | pos += 1 | 
|  | if line == "};": | 
|  | # We're done! | 
|  | if found == 0: | 
|  | print("No intrinsics found in manual code even though we found the " | 
|  | "marker... Aborting...") | 
|  | return 1 | 
|  | for error in errors: | 
|  | print("ERROR => {}".format(error)) | 
|  | return 1 if len(errors) != 0 else 0 | 
|  | parts = line.split('"') | 
|  | if len(parts) != 5: | 
|  | continue | 
|  | found += 1 | 
|  | if parts[1] in intrinsics_map: | 
|  | if parts[3] != intrinsics_map[parts[1]]: | 
|  | print("Same intrinsics (`{}` at line {}) but different GCC " | 
|  | "translations: `{}` != `{}`".format( | 
|  | parts[1], pos, intrinsics_map[parts[1]], parts[3])) | 
|  | else: | 
|  | errors.append("Duplicated intrinsics: `{}` at line {}. Please remove it " | 
|  | " from manual code".format(parts[1], pos)) | 
|  | # Weird but whatever... | 
|  | return 1 if len(errors) != 0 else 0 | 
|  | pos += 1 | 
|  | print("No intrinsics found in manual code... Aborting") | 
|  | return 1 | 
|  |  | 
|  |  | 
|  | if __name__ == "__main__": | 
|  | sys.exit(check_duplicates()) |