17db96d56Sopenharmony_ciimport os.path 27db96d56Sopenharmony_ci 37db96d56Sopenharmony_cifrom c_common import fsutil 47db96d56Sopenharmony_ciimport c_common.tables as _tables 57db96d56Sopenharmony_ciimport c_parser.info as _info 67db96d56Sopenharmony_ciimport c_parser.match as _match 77db96d56Sopenharmony_ciimport c_parser.datafiles as _parser 87db96d56Sopenharmony_cifrom . import analyze as _analyze 97db96d56Sopenharmony_ci 107db96d56Sopenharmony_ci 117db96d56Sopenharmony_ci############################# 127db96d56Sopenharmony_ci# "known" decls 137db96d56Sopenharmony_ci 147db96d56Sopenharmony_ciEXTRA_COLUMNS = [ 157db96d56Sopenharmony_ci #'typedecl', 167db96d56Sopenharmony_ci] 177db96d56Sopenharmony_ci 187db96d56Sopenharmony_ci 197db96d56Sopenharmony_cidef get_known(known, extracolumns=None, *, 207db96d56Sopenharmony_ci analyze_resolved=None, 217db96d56Sopenharmony_ci handle_unresolved=True, 227db96d56Sopenharmony_ci relroot=fsutil.USE_CWD, 237db96d56Sopenharmony_ci ): 247db96d56Sopenharmony_ci if isinstance(known, str): 257db96d56Sopenharmony_ci known = read_known(known, extracolumns, relroot) 267db96d56Sopenharmony_ci return analyze_known( 277db96d56Sopenharmony_ci known, 287db96d56Sopenharmony_ci handle_unresolved=handle_unresolved, 297db96d56Sopenharmony_ci analyze_resolved=analyze_resolved, 307db96d56Sopenharmony_ci ) 317db96d56Sopenharmony_ci 327db96d56Sopenharmony_ci 337db96d56Sopenharmony_cidef read_known(infile, extracolumns=None, relroot=fsutil.USE_CWD): 347db96d56Sopenharmony_ci extracolumns = EXTRA_COLUMNS + ( 357db96d56Sopenharmony_ci list(extracolumns) if extracolumns else [] 367db96d56Sopenharmony_ci ) 377db96d56Sopenharmony_ci known = {} 387db96d56Sopenharmony_ci for decl, extra in _parser.iter_decls_tsv(infile, extracolumns, relroot): 397db96d56Sopenharmony_ci known[decl] = extra 407db96d56Sopenharmony_ci return known 417db96d56Sopenharmony_ci 427db96d56Sopenharmony_ci 437db96d56Sopenharmony_cidef analyze_known(known, *, 447db96d56Sopenharmony_ci analyze_resolved=None, 457db96d56Sopenharmony_ci handle_unresolved=True, 467db96d56Sopenharmony_ci ): 477db96d56Sopenharmony_ci knowntypes = knowntypespecs = {} 487db96d56Sopenharmony_ci collated = _match.group_by_kinds(known) 497db96d56Sopenharmony_ci types = {decl: None for decl in collated['type']} 507db96d56Sopenharmony_ci typespecs = _analyze.get_typespecs(types) 517db96d56Sopenharmony_ci def analyze_decl(decl): 527db96d56Sopenharmony_ci return _analyze.analyze_decl( 537db96d56Sopenharmony_ci decl, 547db96d56Sopenharmony_ci typespecs, 557db96d56Sopenharmony_ci knowntypespecs, 567db96d56Sopenharmony_ci types, 577db96d56Sopenharmony_ci knowntypes, 587db96d56Sopenharmony_ci analyze_resolved=analyze_resolved, 597db96d56Sopenharmony_ci ) 607db96d56Sopenharmony_ci _analyze.analyze_type_decls(types, analyze_decl, handle_unresolved) 617db96d56Sopenharmony_ci return types, typespecs 627db96d56Sopenharmony_ci 637db96d56Sopenharmony_ci 647db96d56Sopenharmony_cidef write_known(rows, outfile, extracolumns=None, *, 657db96d56Sopenharmony_ci relroot=fsutil.USE_CWD, 667db96d56Sopenharmony_ci backup=True, 677db96d56Sopenharmony_ci ): 687db96d56Sopenharmony_ci extracolumns = EXTRA_COLUMNS + ( 697db96d56Sopenharmony_ci list(extracolumns) if extracolumns else [] 707db96d56Sopenharmony_ci ) 717db96d56Sopenharmony_ci _parser.write_decls_tsv( 727db96d56Sopenharmony_ci rows, 737db96d56Sopenharmony_ci outfile, 747db96d56Sopenharmony_ci extracolumns, 757db96d56Sopenharmony_ci relroot=relroot, 767db96d56Sopenharmony_ci backup=backup, 777db96d56Sopenharmony_ci ) 787db96d56Sopenharmony_ci 797db96d56Sopenharmony_ci 807db96d56Sopenharmony_ci############################# 817db96d56Sopenharmony_ci# ignored vars 827db96d56Sopenharmony_ci 837db96d56Sopenharmony_ciIGNORED_COLUMNS = [ 847db96d56Sopenharmony_ci 'filename', 857db96d56Sopenharmony_ci 'funcname', 867db96d56Sopenharmony_ci 'name', 877db96d56Sopenharmony_ci 'reason', 887db96d56Sopenharmony_ci] 897db96d56Sopenharmony_ciIGNORED_HEADER = '\t'.join(IGNORED_COLUMNS) 907db96d56Sopenharmony_ci 917db96d56Sopenharmony_ci 927db96d56Sopenharmony_cidef read_ignored(infile, relroot=fsutil.USE_CWD): 937db96d56Sopenharmony_ci return dict(_iter_ignored(infile, relroot)) 947db96d56Sopenharmony_ci 957db96d56Sopenharmony_ci 967db96d56Sopenharmony_cidef _iter_ignored(infile, relroot): 977db96d56Sopenharmony_ci if relroot and relroot is not fsutil.USE_CWD: 987db96d56Sopenharmony_ci relroot = os.path.abspath(relroot) 997db96d56Sopenharmony_ci bogus = {_tables.EMPTY, _tables.UNKNOWN} 1007db96d56Sopenharmony_ci for row in _tables.read_table(infile, IGNORED_HEADER, sep='\t'): 1017db96d56Sopenharmony_ci *varidinfo, reason = row 1027db96d56Sopenharmony_ci if _tables.EMPTY in varidinfo or _tables.UNKNOWN in varidinfo: 1037db96d56Sopenharmony_ci varidinfo = tuple(None if v in bogus else v 1047db96d56Sopenharmony_ci for v in varidinfo) 1057db96d56Sopenharmony_ci if reason in bogus: 1067db96d56Sopenharmony_ci reason = None 1077db96d56Sopenharmony_ci varid = _info.DeclID.from_row(varidinfo) 1087db96d56Sopenharmony_ci varid = varid.fix_filename(relroot, formatted=False, fixroot=False) 1097db96d56Sopenharmony_ci yield varid, reason 1107db96d56Sopenharmony_ci 1117db96d56Sopenharmony_ci 1127db96d56Sopenharmony_cidef write_ignored(variables, outfile, relroot=fsutil.USE_CWD): 1137db96d56Sopenharmony_ci raise NotImplementedError 1147db96d56Sopenharmony_ci if relroot and relroot is not fsutil.USE_CWD: 1157db96d56Sopenharmony_ci relroot = os.path.abspath(relroot) 1167db96d56Sopenharmony_ci reason = '???' 1177db96d56Sopenharmony_ci #if not isinstance(varid, DeclID): 1187db96d56Sopenharmony_ci # varid = getattr(varid, 'parsed', varid).id 1197db96d56Sopenharmony_ci decls = (d.fix_filename(relroot, fixroot=False) for d in decls) 1207db96d56Sopenharmony_ci _tables.write_table( 1217db96d56Sopenharmony_ci outfile, 1227db96d56Sopenharmony_ci IGNORED_HEADER, 1237db96d56Sopenharmony_ci sep='\t', 1247db96d56Sopenharmony_ci rows=(r.render_rowdata() + (reason,) for r in decls), 1257db96d56Sopenharmony_ci ) 126