List? parseSavedMacros()

in lib/src/header_parser/sub_parsers/macro_parser.dart [51:96]


List<Constant>? parseSavedMacros() {
  _bindings = [];

  if (savedMacros.keys.isEmpty) {
    return _bindings;
  }

  // Create a file for parsing macros;
  final file = createFileForMacros();

  final index = clang.clang_createIndex(0, 0);
  Pointer<Pointer<Utf8>> clangCmdArgs = nullptr;
  var cmdLen = 0;
  clangCmdArgs = createDynamicStringArray(config.compilerOpts);
  cmdLen = config.compilerOpts.length;
  final tu = clang.clang_parseTranslationUnit(
    index,
    file.path.toNativeUtf8().cast(),
    clangCmdArgs.cast(),
    cmdLen,
    nullptr,
    0,
    clang_types.CXTranslationUnit_Flags.CXTranslationUnit_KeepGoing,
  );

  if (tu == nullptr) {
    _logger.severe('Unable to parse Macros.');
  } else {
    final rootCursor = clang.clang_getTranslationUnitCursor(tu);

    final resultCode = clang.clang_visitChildren(
      rootCursor,
      Pointer.fromFunction(_macroVariablevisitor, exceptional_visitor_return),
      nullptr,
    );

    visitChildrenResultChecker(resultCode);
  }

  clang.clang_disposeTranslationUnit(tu);
  clang.clang_disposeIndex(index);
  // Delete the temp file created for macros.
  file.deleteSync();

  return _bindings;
}