349 } 350 351 // check for function symbols in libraries & warn missing symbols 352 if (tree instanceof FunctionTree && !isSymbolFound(name)) { 353 err.println(Main.format("warn.symbol.not.found", name)); 354 } 355 356 return true; 357 } 358 359 public void parse(Function<HeaderFile, AsmCodeFactory> fn) { 360 initSymChecker(); 361 initSymFilter(); 362 363 List<HeaderTree> headers = parser.parse(sources, clangArgs); 364 processHeaders(headers, fn); 365 } 366 367 private void processHeaders(List<HeaderTree> headers, Function<HeaderFile, AsmCodeFactory> fn) { 368 headers.stream(). 369 map((new TreeFilter(this::symbolFilter))::transform). 370 map((new TypedefHandler())::transform). 371 map((new EmptyNameHandler())::transform). 372 forEach(header -> { 373 HeaderFile hf = headerMap.computeIfAbsent(header.path(), p -> getHeaderFile(p, null)); 374 hf.useLibraries(libraryNames, libraryPaths); 375 hf.useCodeFactory(fn.apply(hf)); 376 logger.info(() -> "Processing header file " + header.path()); 377 378 header.declarations().stream() 379 .peek(decl -> logger.finest( 380 () -> "Cursor: " + decl.name() + "@" + decl.USR() + "?" + decl.isDeclaration())) 381 .forEach(decl -> processTree(decl, hf, fn)); 382 }); 383 } 384 385 private Map<String, List<AsmCodeFactory>> getPkgCfMap() { 386 final Map<String, List<AsmCodeFactory>> mapPkgCf = new HashMap<>(); 387 // Build the pkg to CodeFactory map 388 headerMap.values().forEach(header -> { 389 AsmCodeFactory cf = header.getCodeFactory(); 390 String pkg = header.pkgName; 391 logger.config(() -> "File " + header + " is in package: " + pkg); | 349 } 350 351 // check for function symbols in libraries & warn missing symbols 352 if (tree instanceof FunctionTree && !isSymbolFound(name)) { 353 err.println(Main.format("warn.symbol.not.found", name)); 354 } 355 356 return true; 357 } 358 359 public void parse(Function<HeaderFile, AsmCodeFactory> fn) { 360 initSymChecker(); 361 initSymFilter(); 362 363 List<HeaderTree> headers = parser.parse(sources, clangArgs); 364 processHeaders(headers, fn); 365 } 366 367 private void processHeaders(List<HeaderTree> headers, Function<HeaderFile, AsmCodeFactory> fn) { 368 headers.stream(). 369 map(new TreeFilter(this::symbolFilter)). 370 map(new TypedefHandler()). 371 map(new EmptyNameHandler()). 372 forEach(header -> { 373 HeaderFile hf = headerMap.computeIfAbsent(header.path(), p -> getHeaderFile(p, null)); 374 hf.useLibraries(libraryNames, libraryPaths); 375 hf.useCodeFactory(fn.apply(hf)); 376 logger.info(() -> "Processing header file " + header.path()); 377 378 header.declarations().stream() 379 .peek(decl -> logger.finest( 380 () -> "Cursor: " + decl.name() + "@" + decl.USR() + "?" + decl.isDeclaration())) 381 .forEach(decl -> processTree(decl, hf, fn)); 382 }); 383 } 384 385 private Map<String, List<AsmCodeFactory>> getPkgCfMap() { 386 final Map<String, List<AsmCodeFactory>> mapPkgCf = new HashMap<>(); 387 // Build the pkg to CodeFactory map 388 headerMap.values().forEach(header -> { 389 AsmCodeFactory cf = header.getCodeFactory(); 390 String pkg = header.pkgName; 391 logger.config(() -> "File " + header + " is in package: " + pkg); |