diff --git a/clang/tools/include-mapping/gen_std.py b/clang/tools/include-mapping/gen_std.py --- a/clang/tools/include-mapping/gen_std.py +++ b/clang/tools/include-mapping/gen_std.py @@ -64,6 +64,14 @@ default='cpp', help='Generate c or cpp symbols', required=True) + parser.add_argument('-output', + default='SymbolMap.inc', + help='path to the output file for symbol map', + required=True) + parser.add_argument('-removedoutput', + default='RemovedSymbolMap.inc', + help='path to the output file for removed symbols map', + required=False) return parser.parse_args() @@ -87,6 +95,9 @@ (symbol_index_root, "regex_constants.html", "std::regex_constants::"), (symbol_index_root, "this_thread.html", "std::this_thread::"), ] + removed_symbols = cppreference_parser.GetSymbols( + [(symbol_index_root, "zombie_names.html", "std::")]) + WriteSymbols(args.language, removed_symbols, args.removedoutput, page_root) elif args.language == 'c': page_root = os.path.join(args.cppreference, "en", "c") symbol_index_root = page_root @@ -96,24 +107,28 @@ exit("Path %s doesn't exist!" % symbol_index_root) symbols = cppreference_parser.GetSymbols(parse_pages) + WriteSymbols(args.language, symbols, args.output, page_root) +def WriteSymbols(language, symbols, path, page_root): # We don't have version information from the unzipped offline HTML files. # so we use the modified time of the symbol_index.html as the version. index_page_path = os.path.join(page_root, "index.html") cppreference_modified_date = datetime.datetime.fromtimestamp( os.stat(index_page_path).st_mtime).strftime('%Y-%m-%d') - print(CODE_PREFIX % (args.language.upper(), cppreference_modified_date)) - for symbol in symbols: - if len(symbol.headers) == 1: - # SYMBOL(unqualified_name, namespace, header) - print("SYMBOL(%s, %s, %s)" % (symbol.name, symbol.namespace, - symbol.headers[0])) - elif len(symbol.headers) == 0: - sys.stderr.write("No header found for symbol %s\n" % symbol.name) - else: - # FIXME: support symbols with multiple headers (e.g. std::move). - sys.stderr.write("Ambiguous header for symbol %s: %s\n" % ( - symbol.name, ', '.join(symbol.headers))) + with open(path, "w") as f: + f.write(CODE_PREFIX % (language.upper(), cppreference_modified_date)) + f.write("\n") + for symbol in symbols: + if len(symbol.headers) == 1: + # SYMBOL(unqualified_name, namespace, header) + f.write("SYMBOL(%s, %s, %s)\n" % (symbol.name, symbol.namespace, + symbol.headers[0])) + elif len(symbol.headers) == 0: + sys.stderr.write("No header found for symbol %s\n" % symbol.name) + else: + # FIXME: support symbols with multiple headers (e.g. std::move). + sys.stderr.write("Ambiguous header for symbol %s: %s\n" % ( + symbol.name, ', '.join(symbol.headers))) if __name__ == '__main__':