Support for passing/returning Structs by value. (#134) (#163)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4fcb483..1345b70 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,6 @@
+# 2.0.0-dev.1
+- Added support for passing and returning struct by value in functions.
+
 # 2.0.0-dev.0
 - Added support for Nested structs.
 
diff --git a/README.md b/README.md
index 4eb22ec..3956835 100644
--- a/README.md
+++ b/README.md
@@ -373,8 +373,6 @@
 
 ## Limitations
 1. Multi OS support for types such as long. [Issue #7](https://github.com/dart-lang/ffigen/issues/7)
-2. Function's passing/returning structs by value are skipped. [Issue #3](https://github.com/dart-lang/ffigen/issues/3)
-3. Structs containing structs will have all their members removed. [Issue #4](https://github.com/dart-lang/ffigen/issues/4)
 
 ## Trying out examples
 1. `cd examples/<example_u_want_to_run>`, Run `pub get`.
diff --git a/example/libclang-example/generated_bindings.dart b/example/libclang-example/generated_bindings.dart
index 616826f..0edbcb9 100644
--- a/example/libclang-example/generated_bindings.dart
+++ b/example/libclang-example/generated_bindings.dart
@@ -16,6 +16,32 @@
   /// The symbols are looked up in [dynamicLibrary].
   LibClang(ffi.DynamicLibrary dynamicLibrary) : _dylib = dynamicLibrary;
 
+  /// Retrieve the character data associated with the given string.
+  ffi.Pointer<ffi.Int8> clang_getCString(
+    CXString string,
+  ) {
+    return (_clang_getCString ??=
+        _dylib.lookupFunction<_c_clang_getCString, _dart_clang_getCString>(
+            'clang_getCString'))(
+      string,
+    );
+  }
+
+  _dart_clang_getCString? _clang_getCString;
+
+  /// Free the given string.
+  void clang_disposeString(
+    CXString string,
+  ) {
+    return (_clang_disposeString ??= _dylib.lookupFunction<
+        _c_clang_disposeString,
+        _dart_clang_disposeString>('clang_disposeString'))(
+      string,
+    );
+  }
+
+  _dart_clang_disposeString? _clang_disposeString;
+
   /// Free the given string set.
   void clang_disposeStringSet(
     ffi.Pointer<CXStringSet> set_1,
@@ -161,6 +187,19 @@
   _dart_clang_CXIndex_setInvocationEmissionPathOption?
       _clang_CXIndex_setInvocationEmissionPathOption;
 
+  /// Retrieve the complete file and path name of the given file.
+  CXString clang_getFileName(
+    ffi.Pointer<ffi.Void> SFile,
+  ) {
+    return (_clang_getFileName ??=
+        _dylib.lookupFunction<_c_clang_getFileName, _dart_clang_getFileName>(
+            'clang_getFileName'))(
+      SFile,
+    );
+  }
+
+  _dart_clang_getFileName? _clang_getFileName;
+
   /// Retrieve the last modification time of the given file.
   int clang_getFileTime(
     ffi.Pointer<ffi.Void> SFile,
@@ -276,6 +315,403 @@
 
   _dart_clang_File_isEqual? _clang_File_isEqual;
 
+  /// Returns the real path name of \c file.
+  ///
+  /// An empty string may be returned. Use \c clang_getFileName() in that case.
+  CXString clang_File_tryGetRealPathName(
+    ffi.Pointer<ffi.Void> file,
+  ) {
+    return (_clang_File_tryGetRealPathName ??= _dylib.lookupFunction<
+        _c_clang_File_tryGetRealPathName,
+        _dart_clang_File_tryGetRealPathName>('clang_File_tryGetRealPathName'))(
+      file,
+    );
+  }
+
+  _dart_clang_File_tryGetRealPathName? _clang_File_tryGetRealPathName;
+
+  /// Retrieve a NULL (invalid) source location.
+  CXSourceLocation clang_getNullLocation() {
+    return (_clang_getNullLocation ??= _dylib.lookupFunction<
+        _c_clang_getNullLocation,
+        _dart_clang_getNullLocation>('clang_getNullLocation'))();
+  }
+
+  _dart_clang_getNullLocation? _clang_getNullLocation;
+
+  /// Determine whether two source locations, which must refer into
+  /// the same translation unit, refer to exactly the same point in the source
+  /// code.
+  ///
+  /// \returns non-zero if the source locations refer to the same location, zero
+  /// if they refer to different locations.
+  int clang_equalLocations(
+    CXSourceLocation loc1,
+    CXSourceLocation loc2,
+  ) {
+    return (_clang_equalLocations ??= _dylib.lookupFunction<
+        _c_clang_equalLocations,
+        _dart_clang_equalLocations>('clang_equalLocations'))(
+      loc1,
+      loc2,
+    );
+  }
+
+  _dart_clang_equalLocations? _clang_equalLocations;
+
+  /// Retrieves the source location associated with a given file/line/column
+  /// in a particular translation unit.
+  CXSourceLocation clang_getLocation(
+    ffi.Pointer<CXTranslationUnitImpl> tu,
+    ffi.Pointer<ffi.Void> file,
+    int line,
+    int column,
+  ) {
+    return (_clang_getLocation ??=
+        _dylib.lookupFunction<_c_clang_getLocation, _dart_clang_getLocation>(
+            'clang_getLocation'))(
+      tu,
+      file,
+      line,
+      column,
+    );
+  }
+
+  _dart_clang_getLocation? _clang_getLocation;
+
+  /// Retrieves the source location associated with a given character offset
+  /// in a particular translation unit.
+  CXSourceLocation clang_getLocationForOffset(
+    ffi.Pointer<CXTranslationUnitImpl> tu,
+    ffi.Pointer<ffi.Void> file,
+    int offset,
+  ) {
+    return (_clang_getLocationForOffset ??= _dylib.lookupFunction<
+        _c_clang_getLocationForOffset,
+        _dart_clang_getLocationForOffset>('clang_getLocationForOffset'))(
+      tu,
+      file,
+      offset,
+    );
+  }
+
+  _dart_clang_getLocationForOffset? _clang_getLocationForOffset;
+
+  /// Returns non-zero if the given source location is in a system header.
+  int clang_Location_isInSystemHeader(
+    CXSourceLocation location,
+  ) {
+    return (_clang_Location_isInSystemHeader ??= _dylib.lookupFunction<
+            _c_clang_Location_isInSystemHeader,
+            _dart_clang_Location_isInSystemHeader>(
+        'clang_Location_isInSystemHeader'))(
+      location,
+    );
+  }
+
+  _dart_clang_Location_isInSystemHeader? _clang_Location_isInSystemHeader;
+
+  /// Returns non-zero if the given source location is in the main file of
+  /// the corresponding translation unit.
+  int clang_Location_isFromMainFile(
+    CXSourceLocation location,
+  ) {
+    return (_clang_Location_isFromMainFile ??= _dylib.lookupFunction<
+        _c_clang_Location_isFromMainFile,
+        _dart_clang_Location_isFromMainFile>('clang_Location_isFromMainFile'))(
+      location,
+    );
+  }
+
+  _dart_clang_Location_isFromMainFile? _clang_Location_isFromMainFile;
+
+  /// Retrieve a NULL (invalid) source range.
+  CXSourceRange clang_getNullRange() {
+    return (_clang_getNullRange ??=
+        _dylib.lookupFunction<_c_clang_getNullRange, _dart_clang_getNullRange>(
+            'clang_getNullRange'))();
+  }
+
+  _dart_clang_getNullRange? _clang_getNullRange;
+
+  /// Retrieve a source range given the beginning and ending source
+  /// locations.
+  CXSourceRange clang_getRange(
+    CXSourceLocation begin,
+    CXSourceLocation end,
+  ) {
+    return (_clang_getRange ??=
+        _dylib.lookupFunction<_c_clang_getRange, _dart_clang_getRange>(
+            'clang_getRange'))(
+      begin,
+      end,
+    );
+  }
+
+  _dart_clang_getRange? _clang_getRange;
+
+  /// Determine whether two ranges are equivalent.
+  ///
+  /// \returns non-zero if the ranges are the same, zero if they differ.
+  int clang_equalRanges(
+    CXSourceRange range1,
+    CXSourceRange range2,
+  ) {
+    return (_clang_equalRanges ??=
+        _dylib.lookupFunction<_c_clang_equalRanges, _dart_clang_equalRanges>(
+            'clang_equalRanges'))(
+      range1,
+      range2,
+    );
+  }
+
+  _dart_clang_equalRanges? _clang_equalRanges;
+
+  /// Returns non-zero if \p range is null.
+  int clang_Range_isNull(
+    CXSourceRange range,
+  ) {
+    return (_clang_Range_isNull ??=
+        _dylib.lookupFunction<_c_clang_Range_isNull, _dart_clang_Range_isNull>(
+            'clang_Range_isNull'))(
+      range,
+    );
+  }
+
+  _dart_clang_Range_isNull? _clang_Range_isNull;
+
+  /// Retrieve the file, line, column, and offset represented by
+  /// the given source location.
+  ///
+  /// If the location refers into a macro expansion, retrieves the
+  /// location of the macro expansion.
+  ///
+  /// \param location the location within a source file that will be decomposed
+  /// into its parts.
+  ///
+  /// \param file [out] if non-NULL, will be set to the file to which the given
+  /// source location points.
+  ///
+  /// \param line [out] if non-NULL, will be set to the line to which the given
+  /// source location points.
+  ///
+  /// \param column [out] if non-NULL, will be set to the column to which the given
+  /// source location points.
+  ///
+  /// \param offset [out] if non-NULL, will be set to the offset into the
+  /// buffer to which the given source location points.
+  void clang_getExpansionLocation(
+    CXSourceLocation location,
+    ffi.Pointer<ffi.Pointer<ffi.Void>> file,
+    ffi.Pointer<ffi.Uint32> line,
+    ffi.Pointer<ffi.Uint32> column,
+    ffi.Pointer<ffi.Uint32> offset,
+  ) {
+    return (_clang_getExpansionLocation ??= _dylib.lookupFunction<
+        _c_clang_getExpansionLocation,
+        _dart_clang_getExpansionLocation>('clang_getExpansionLocation'))(
+      location,
+      file,
+      line,
+      column,
+      offset,
+    );
+  }
+
+  _dart_clang_getExpansionLocation? _clang_getExpansionLocation;
+
+  /// Retrieve the file, line and column represented by the given source
+  /// location, as specified in a # line directive.
+  ///
+  /// Example: given the following source code in a file somefile.c
+  ///
+  /// \code
+  /// #123 "dummy.c" 1
+  ///
+  /// static int func(void)
+  /// {
+  /// return 0;
+  /// }
+  /// \endcode
+  ///
+  /// the location information returned by this function would be
+  ///
+  /// File: dummy.c Line: 124 Column: 12
+  ///
+  /// whereas clang_getExpansionLocation would have returned
+  ///
+  /// File: somefile.c Line: 3 Column: 12
+  ///
+  /// \param location the location within a source file that will be decomposed
+  /// into its parts.
+  ///
+  /// \param filename [out] if non-NULL, will be set to the filename of the
+  /// source location. Note that filenames returned will be for "virtual" files,
+  /// which don't necessarily exist on the machine running clang - e.g. when
+  /// parsing preprocessed output obtained from a different environment. If
+  /// a non-NULL value is passed in, remember to dispose of the returned value
+  /// using \c clang_disposeString() once you've finished with it. For an invalid
+  /// source location, an empty string is returned.
+  ///
+  /// \param line [out] if non-NULL, will be set to the line number of the
+  /// source location. For an invalid source location, zero is returned.
+  ///
+  /// \param column [out] if non-NULL, will be set to the column number of the
+  /// source location. For an invalid source location, zero is returned.
+  void clang_getPresumedLocation(
+    CXSourceLocation location,
+    ffi.Pointer<CXString> filename,
+    ffi.Pointer<ffi.Uint32> line,
+    ffi.Pointer<ffi.Uint32> column,
+  ) {
+    return (_clang_getPresumedLocation ??= _dylib.lookupFunction<
+        _c_clang_getPresumedLocation,
+        _dart_clang_getPresumedLocation>('clang_getPresumedLocation'))(
+      location,
+      filename,
+      line,
+      column,
+    );
+  }
+
+  _dart_clang_getPresumedLocation? _clang_getPresumedLocation;
+
+  /// Legacy API to retrieve the file, line, column, and offset represented
+  /// by the given source location.
+  ///
+  /// This interface has been replaced by the newer interface
+  /// #clang_getExpansionLocation(). See that interface's documentation for
+  /// details.
+  void clang_getInstantiationLocation(
+    CXSourceLocation location,
+    ffi.Pointer<ffi.Pointer<ffi.Void>> file,
+    ffi.Pointer<ffi.Uint32> line,
+    ffi.Pointer<ffi.Uint32> column,
+    ffi.Pointer<ffi.Uint32> offset,
+  ) {
+    return (_clang_getInstantiationLocation ??= _dylib.lookupFunction<
+            _c_clang_getInstantiationLocation,
+            _dart_clang_getInstantiationLocation>(
+        'clang_getInstantiationLocation'))(
+      location,
+      file,
+      line,
+      column,
+      offset,
+    );
+  }
+
+  _dart_clang_getInstantiationLocation? _clang_getInstantiationLocation;
+
+  /// Retrieve the file, line, column, and offset represented by
+  /// the given source location.
+  ///
+  /// If the location refers into a macro instantiation, return where the
+  /// location was originally spelled in the source file.
+  ///
+  /// \param location the location within a source file that will be decomposed
+  /// into its parts.
+  ///
+  /// \param file [out] if non-NULL, will be set to the file to which the given
+  /// source location points.
+  ///
+  /// \param line [out] if non-NULL, will be set to the line to which the given
+  /// source location points.
+  ///
+  /// \param column [out] if non-NULL, will be set to the column to which the given
+  /// source location points.
+  ///
+  /// \param offset [out] if non-NULL, will be set to the offset into the
+  /// buffer to which the given source location points.
+  void clang_getSpellingLocation(
+    CXSourceLocation location,
+    ffi.Pointer<ffi.Pointer<ffi.Void>> file,
+    ffi.Pointer<ffi.Uint32> line,
+    ffi.Pointer<ffi.Uint32> column,
+    ffi.Pointer<ffi.Uint32> offset,
+  ) {
+    return (_clang_getSpellingLocation ??= _dylib.lookupFunction<
+        _c_clang_getSpellingLocation,
+        _dart_clang_getSpellingLocation>('clang_getSpellingLocation'))(
+      location,
+      file,
+      line,
+      column,
+      offset,
+    );
+  }
+
+  _dart_clang_getSpellingLocation? _clang_getSpellingLocation;
+
+  /// Retrieve the file, line, column, and offset represented by
+  /// the given source location.
+  ///
+  /// If the location refers into a macro expansion, return where the macro was
+  /// expanded or where the macro argument was written, if the location points at
+  /// a macro argument.
+  ///
+  /// \param location the location within a source file that will be decomposed
+  /// into its parts.
+  ///
+  /// \param file [out] if non-NULL, will be set to the file to which the given
+  /// source location points.
+  ///
+  /// \param line [out] if non-NULL, will be set to the line to which the given
+  /// source location points.
+  ///
+  /// \param column [out] if non-NULL, will be set to the column to which the given
+  /// source location points.
+  ///
+  /// \param offset [out] if non-NULL, will be set to the offset into the
+  /// buffer to which the given source location points.
+  void clang_getFileLocation(
+    CXSourceLocation location,
+    ffi.Pointer<ffi.Pointer<ffi.Void>> file,
+    ffi.Pointer<ffi.Uint32> line,
+    ffi.Pointer<ffi.Uint32> column,
+    ffi.Pointer<ffi.Uint32> offset,
+  ) {
+    return (_clang_getFileLocation ??= _dylib.lookupFunction<
+        _c_clang_getFileLocation,
+        _dart_clang_getFileLocation>('clang_getFileLocation'))(
+      location,
+      file,
+      line,
+      column,
+      offset,
+    );
+  }
+
+  _dart_clang_getFileLocation? _clang_getFileLocation;
+
+  /// Retrieve a source location representing the first character within a
+  /// source range.
+  CXSourceLocation clang_getRangeStart(
+    CXSourceRange range,
+  ) {
+    return (_clang_getRangeStart ??= _dylib.lookupFunction<
+        _c_clang_getRangeStart,
+        _dart_clang_getRangeStart>('clang_getRangeStart'))(
+      range,
+    );
+  }
+
+  _dart_clang_getRangeStart? _clang_getRangeStart;
+
+  /// Retrieve a source location representing the last character within a
+  /// source range.
+  CXSourceLocation clang_getRangeEnd(
+    CXSourceRange range,
+  ) {
+    return (_clang_getRangeEnd ??=
+        _dylib.lookupFunction<_c_clang_getRangeEnd, _dart_clang_getRangeEnd>(
+            'clang_getRangeEnd'))(
+      range,
+    );
+  }
+
+  _dart_clang_getRangeEnd? _clang_getRangeEnd;
+
   /// Retrieve all ranges that were skipped by the preprocessor.
   ///
   /// The preprocessor will skip lines when they are surrounded by an
@@ -478,6 +914,33 @@
 
   _dart_clang_disposeDiagnostic? _clang_disposeDiagnostic;
 
+  /// Format the given diagnostic in a manner that is suitable for display.
+  ///
+  /// This routine will format the given diagnostic to a string, rendering
+  /// the diagnostic according to the various options given. The
+  /// \c clang_defaultDiagnosticDisplayOptions() function returns the set of
+  /// options that most closely mimics the behavior of the clang compiler.
+  ///
+  /// \param Diagnostic The diagnostic to print.
+  ///
+  /// \param Options A set of options that control the diagnostic display,
+  /// created by combining \c CXDiagnosticDisplayOptions values.
+  ///
+  /// \returns A new string containing for formatted diagnostic.
+  CXString clang_formatDiagnostic(
+    ffi.Pointer<ffi.Void> Diagnostic,
+    int Options,
+  ) {
+    return (_clang_formatDiagnostic ??= _dylib.lookupFunction<
+        _c_clang_formatDiagnostic,
+        _dart_clang_formatDiagnostic>('clang_formatDiagnostic'))(
+      Diagnostic,
+      Options,
+    );
+  }
+
+  _dart_clang_formatDiagnostic? _clang_formatDiagnostic;
+
   /// Retrieve the set of display options most similar to the
   /// default behavior of the clang compiler.
   ///
@@ -506,6 +969,59 @@
 
   _dart_clang_getDiagnosticSeverity? _clang_getDiagnosticSeverity;
 
+  /// Retrieve the source location of the given diagnostic.
+  ///
+  /// This location is where Clang would print the caret ('^') when
+  /// displaying the diagnostic on the command line.
+  CXSourceLocation clang_getDiagnosticLocation(
+    ffi.Pointer<ffi.Void> arg0,
+  ) {
+    return (_clang_getDiagnosticLocation ??= _dylib.lookupFunction<
+        _c_clang_getDiagnosticLocation,
+        _dart_clang_getDiagnosticLocation>('clang_getDiagnosticLocation'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_getDiagnosticLocation? _clang_getDiagnosticLocation;
+
+  /// Retrieve the text of the given diagnostic.
+  CXString clang_getDiagnosticSpelling(
+    ffi.Pointer<ffi.Void> arg0,
+  ) {
+    return (_clang_getDiagnosticSpelling ??= _dylib.lookupFunction<
+        _c_clang_getDiagnosticSpelling,
+        _dart_clang_getDiagnosticSpelling>('clang_getDiagnosticSpelling'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_getDiagnosticSpelling? _clang_getDiagnosticSpelling;
+
+  /// Retrieve the name of the command-line option that enabled this
+  /// diagnostic.
+  ///
+  /// \param Diag The diagnostic to be queried.
+  ///
+  /// \param Disable If non-NULL, will be set to the option that disables this
+  /// diagnostic (if any).
+  ///
+  /// \returns A string that contains the command-line option used to enable this
+  /// warning, such as "-Wconversion" or "-pedantic".
+  CXString clang_getDiagnosticOption(
+    ffi.Pointer<ffi.Void> Diag,
+    ffi.Pointer<CXString> Disable,
+  ) {
+    return (_clang_getDiagnosticOption ??= _dylib.lookupFunction<
+        _c_clang_getDiagnosticOption,
+        _dart_clang_getDiagnosticOption>('clang_getDiagnosticOption'))(
+      Diag,
+      Disable,
+    );
+  }
+
+  _dart_clang_getDiagnosticOption? _clang_getDiagnosticOption;
+
   /// Retrieve the category number for this diagnostic.
   ///
   /// Diagnostics can be categorized into groups along with other, related
@@ -526,6 +1042,43 @@
 
   _dart_clang_getDiagnosticCategory? _clang_getDiagnosticCategory;
 
+  /// Retrieve the name of a particular diagnostic category.  This
+  /// is now deprecated.  Use clang_getDiagnosticCategoryText()
+  /// instead.
+  ///
+  /// \param Category A diagnostic category number, as returned by
+  /// \c clang_getDiagnosticCategory().
+  ///
+  /// \returns The name of the given diagnostic category.
+  CXString clang_getDiagnosticCategoryName(
+    int Category,
+  ) {
+    return (_clang_getDiagnosticCategoryName ??= _dylib.lookupFunction<
+            _c_clang_getDiagnosticCategoryName,
+            _dart_clang_getDiagnosticCategoryName>(
+        'clang_getDiagnosticCategoryName'))(
+      Category,
+    );
+  }
+
+  _dart_clang_getDiagnosticCategoryName? _clang_getDiagnosticCategoryName;
+
+  /// Retrieve the diagnostic category text for a given diagnostic.
+  ///
+  /// \returns The text of the given diagnostic category.
+  CXString clang_getDiagnosticCategoryText(
+    ffi.Pointer<ffi.Void> arg0,
+  ) {
+    return (_clang_getDiagnosticCategoryText ??= _dylib.lookupFunction<
+            _c_clang_getDiagnosticCategoryText,
+            _dart_clang_getDiagnosticCategoryText>(
+        'clang_getDiagnosticCategoryText'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_getDiagnosticCategoryText? _clang_getDiagnosticCategoryText;
+
   /// Determine the number of source ranges associated with the given
   /// diagnostic.
   int clang_getDiagnosticNumRanges(
@@ -540,6 +1093,31 @@
 
   _dart_clang_getDiagnosticNumRanges? _clang_getDiagnosticNumRanges;
 
+  /// Retrieve a source range associated with the diagnostic.
+  ///
+  /// A diagnostic's source ranges highlight important elements in the source
+  /// code. On the command line, Clang displays source ranges by
+  /// underlining them with '~' characters.
+  ///
+  /// \param Diagnostic the diagnostic whose range is being extracted.
+  ///
+  /// \param Range the zero-based index specifying which range to
+  ///
+  /// \returns the requested source range.
+  CXSourceRange clang_getDiagnosticRange(
+    ffi.Pointer<ffi.Void> Diagnostic,
+    int Range,
+  ) {
+    return (_clang_getDiagnosticRange ??= _dylib.lookupFunction<
+        _c_clang_getDiagnosticRange,
+        _dart_clang_getDiagnosticRange>('clang_getDiagnosticRange'))(
+      Diagnostic,
+      Range,
+    );
+  }
+
+  _dart_clang_getDiagnosticRange? _clang_getDiagnosticRange;
+
   /// Determine the number of fix-it hints associated with the
   /// given diagnostic.
   int clang_getDiagnosticNumFixIts(
@@ -554,6 +1132,59 @@
 
   _dart_clang_getDiagnosticNumFixIts? _clang_getDiagnosticNumFixIts;
 
+  /// Retrieve the replacement information for a given fix-it.
+  ///
+  /// Fix-its are described in terms of a source range whose contents
+  /// should be replaced by a string. This approach generalizes over
+  /// three kinds of operations: removal of source code (the range covers
+  /// the code to be removed and the replacement string is empty),
+  /// replacement of source code (the range covers the code to be
+  /// replaced and the replacement string provides the new code), and
+  /// insertion (both the start and end of the range point at the
+  /// insertion location, and the replacement string provides the text to
+  /// insert).
+  ///
+  /// \param Diagnostic The diagnostic whose fix-its are being queried.
+  ///
+  /// \param FixIt The zero-based index of the fix-it.
+  ///
+  /// \param ReplacementRange The source range whose contents will be
+  /// replaced with the returned replacement string. Note that source
+  /// ranges are half-open ranges [a, b), so the source code should be
+  /// replaced from a and up to (but not including) b.
+  ///
+  /// \returns A string containing text that should be replace the source
+  /// code indicated by the \c ReplacementRange.
+  CXString clang_getDiagnosticFixIt(
+    ffi.Pointer<ffi.Void> Diagnostic,
+    int FixIt,
+    ffi.Pointer<CXSourceRange> ReplacementRange,
+  ) {
+    return (_clang_getDiagnosticFixIt ??= _dylib.lookupFunction<
+        _c_clang_getDiagnosticFixIt,
+        _dart_clang_getDiagnosticFixIt>('clang_getDiagnosticFixIt'))(
+      Diagnostic,
+      FixIt,
+      ReplacementRange,
+    );
+  }
+
+  _dart_clang_getDiagnosticFixIt? _clang_getDiagnosticFixIt;
+
+  /// Get the original translation unit source file name.
+  CXString clang_getTranslationUnitSpelling(
+    ffi.Pointer<CXTranslationUnitImpl> CTUnit,
+  ) {
+    return (_clang_getTranslationUnitSpelling ??= _dylib.lookupFunction<
+            _c_clang_getTranslationUnitSpelling,
+            _dart_clang_getTranslationUnitSpelling>(
+        'clang_getTranslationUnitSpelling'))(
+      CTUnit,
+    );
+  }
+
+  _dart_clang_getTranslationUnitSpelling? _clang_getTranslationUnitSpelling;
+
   /// Return the CXTranslationUnit for a given source file and the provided
   /// command line arguments one would pass to the compiler.
   ///
@@ -978,6 +1609,33 @@
 
   _dart_clang_getTUResourceUsageName? _clang_getTUResourceUsageName;
 
+  /// Return the memory usage of a translation unit.  This object
+  /// should be released with clang_disposeCXTUResourceUsage().
+  CXTUResourceUsage clang_getCXTUResourceUsage(
+    ffi.Pointer<CXTranslationUnitImpl> TU,
+  ) {
+    return (_clang_getCXTUResourceUsage ??= _dylib.lookupFunction<
+        _c_clang_getCXTUResourceUsage,
+        _dart_clang_getCXTUResourceUsage>('clang_getCXTUResourceUsage'))(
+      TU,
+    );
+  }
+
+  _dart_clang_getCXTUResourceUsage? _clang_getCXTUResourceUsage;
+
+  void clang_disposeCXTUResourceUsage(
+    CXTUResourceUsage usage,
+  ) {
+    return (_clang_disposeCXTUResourceUsage ??= _dylib.lookupFunction<
+            _c_clang_disposeCXTUResourceUsage,
+            _dart_clang_disposeCXTUResourceUsage>(
+        'clang_disposeCXTUResourceUsage'))(
+      usage,
+    );
+  }
+
+  _dart_clang_disposeCXTUResourceUsage? _clang_disposeCXTUResourceUsage;
+
   /// Get target information for this translation unit.
   ///
   /// The CXTargetInfo object cannot outlive the CXTranslationUnit object.
@@ -1007,6 +1665,21 @@
 
   _dart_clang_TargetInfo_dispose? _clang_TargetInfo_dispose;
 
+  /// Get the normalized target triple as a string.
+  ///
+  /// Returns the empty string in case of any error.
+  CXString clang_TargetInfo_getTriple(
+    ffi.Pointer<CXTargetInfoImpl> Info,
+  ) {
+    return (_clang_TargetInfo_getTriple ??= _dylib.lookupFunction<
+        _c_clang_TargetInfo_getTriple,
+        _dart_clang_TargetInfo_getTriple>('clang_TargetInfo_getTriple'))(
+      Info,
+    );
+  }
+
+  _dart_clang_TargetInfo_getTriple? _clang_TargetInfo_getTriple;
+
   /// Get the pointer width of the target in bits.
   ///
   /// Returns -1 in case of error.
@@ -1023,6 +1696,86 @@
 
   _dart_clang_TargetInfo_getPointerWidth? _clang_TargetInfo_getPointerWidth;
 
+  /// Retrieve the NULL cursor, which represents no entity.
+  CXCursor clang_getNullCursor() {
+    return (_clang_getNullCursor ??= _dylib.lookupFunction<
+        _c_clang_getNullCursor,
+        _dart_clang_getNullCursor>('clang_getNullCursor'))();
+  }
+
+  _dart_clang_getNullCursor? _clang_getNullCursor;
+
+  /// Retrieve the cursor that represents the given translation unit.
+  ///
+  /// The translation unit cursor can be used to start traversing the
+  /// various declarations within the given translation unit.
+  CXCursor clang_getTranslationUnitCursor(
+    ffi.Pointer<CXTranslationUnitImpl> arg0,
+  ) {
+    return (_clang_getTranslationUnitCursor ??= _dylib.lookupFunction<
+            _c_clang_getTranslationUnitCursor,
+            _dart_clang_getTranslationUnitCursor>(
+        'clang_getTranslationUnitCursor'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_getTranslationUnitCursor? _clang_getTranslationUnitCursor;
+
+  /// Determine whether two cursors are equivalent.
+  int clang_equalCursors(
+    CXCursor arg0,
+    CXCursor arg1,
+  ) {
+    return (_clang_equalCursors ??=
+        _dylib.lookupFunction<_c_clang_equalCursors, _dart_clang_equalCursors>(
+            'clang_equalCursors'))(
+      arg0,
+      arg1,
+    );
+  }
+
+  _dart_clang_equalCursors? _clang_equalCursors;
+
+  /// Returns non-zero if \p cursor is null.
+  int clang_Cursor_isNull(
+    CXCursor cursor,
+  ) {
+    return (_clang_Cursor_isNull ??= _dylib.lookupFunction<
+        _c_clang_Cursor_isNull,
+        _dart_clang_Cursor_isNull>('clang_Cursor_isNull'))(
+      cursor,
+    );
+  }
+
+  _dart_clang_Cursor_isNull? _clang_Cursor_isNull;
+
+  /// Compute a hash value for the given cursor.
+  int clang_hashCursor(
+    CXCursor arg0,
+  ) {
+    return (_clang_hashCursor ??=
+        _dylib.lookupFunction<_c_clang_hashCursor, _dart_clang_hashCursor>(
+            'clang_hashCursor'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_hashCursor? _clang_hashCursor;
+
+  /// Retrieve the kind of the given cursor.
+  int clang_getCursorKind(
+    CXCursor arg0,
+  ) {
+    return (_clang_getCursorKind ??= _dylib.lookupFunction<
+        _c_clang_getCursorKind,
+        _dart_clang_getCursorKind>('clang_getCursorKind'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_getCursorKind? _clang_getCursorKind;
+
   /// Determine whether the given cursor kind represents a declaration.
   int clang_isDeclaration(
     int arg0,
@@ -1036,6 +1789,24 @@
 
   _dart_clang_isDeclaration? _clang_isDeclaration;
 
+  /// Determine whether the given declaration is invalid.
+  ///
+  /// A declaration is invalid if it could not be parsed successfully.
+  ///
+  /// \returns non-zero if the cursor represents a declaration and it is
+  /// invalid, otherwise NULL.
+  int clang_isInvalidDeclaration(
+    CXCursor arg0,
+  ) {
+    return (_clang_isInvalidDeclaration ??= _dylib.lookupFunction<
+        _c_clang_isInvalidDeclaration,
+        _dart_clang_isInvalidDeclaration>('clang_isInvalidDeclaration'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_isInvalidDeclaration? _clang_isInvalidDeclaration;
+
   /// Determine whether the given cursor kind represents a simple
   /// reference.
   ///
@@ -1093,6 +1864,19 @@
 
   _dart_clang_isAttribute? _clang_isAttribute;
 
+  /// Determine whether the given cursor has any attributes.
+  int clang_Cursor_hasAttrs(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_hasAttrs ??= _dylib.lookupFunction<
+        _c_clang_Cursor_hasAttrs,
+        _dart_clang_Cursor_hasAttrs>('clang_Cursor_hasAttrs'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_hasAttrs? _clang_Cursor_hasAttrs;
+
   /// Determine whether the given cursor kind represents an invalid
   /// cursor.
   int clang_isInvalid(
@@ -1149,6 +1933,118 @@
 
   _dart_clang_isUnexposed? _clang_isUnexposed;
 
+  /// Determine the linkage of the entity referred to by a given cursor.
+  int clang_getCursorLinkage(
+    CXCursor cursor,
+  ) {
+    return (_clang_getCursorLinkage ??= _dylib.lookupFunction<
+        _c_clang_getCursorLinkage,
+        _dart_clang_getCursorLinkage>('clang_getCursorLinkage'))(
+      cursor,
+    );
+  }
+
+  _dart_clang_getCursorLinkage? _clang_getCursorLinkage;
+
+  /// Describe the visibility of the entity referred to by a cursor.
+  ///
+  /// This returns the default visibility if not explicitly specified by
+  /// a visibility attribute. The default visibility may be changed by
+  /// commandline arguments.
+  ///
+  /// \param cursor The cursor to query.
+  ///
+  /// \returns The visibility of the cursor.
+  int clang_getCursorVisibility(
+    CXCursor cursor,
+  ) {
+    return (_clang_getCursorVisibility ??= _dylib.lookupFunction<
+        _c_clang_getCursorVisibility,
+        _dart_clang_getCursorVisibility>('clang_getCursorVisibility'))(
+      cursor,
+    );
+  }
+
+  _dart_clang_getCursorVisibility? _clang_getCursorVisibility;
+
+  /// Determine the availability of the entity that this cursor refers to,
+  /// taking the current target platform into account.
+  ///
+  /// \param cursor The cursor to query.
+  ///
+  /// \returns The availability of the cursor.
+  int clang_getCursorAvailability(
+    CXCursor cursor,
+  ) {
+    return (_clang_getCursorAvailability ??= _dylib.lookupFunction<
+        _c_clang_getCursorAvailability,
+        _dart_clang_getCursorAvailability>('clang_getCursorAvailability'))(
+      cursor,
+    );
+  }
+
+  _dart_clang_getCursorAvailability? _clang_getCursorAvailability;
+
+  /// Determine the availability of the entity that this cursor refers to
+  /// on any platforms for which availability information is known.
+  ///
+  /// \param cursor The cursor to query.
+  ///
+  /// \param always_deprecated If non-NULL, will be set to indicate whether the
+  /// entity is deprecated on all platforms.
+  ///
+  /// \param deprecated_message If non-NULL, will be set to the message text
+  /// provided along with the unconditional deprecation of this entity. The client
+  /// is responsible for deallocating this string.
+  ///
+  /// \param always_unavailable If non-NULL, will be set to indicate whether the
+  /// entity is unavailable on all platforms.
+  ///
+  /// \param unavailable_message If non-NULL, will be set to the message text
+  /// provided along with the unconditional unavailability of this entity. The
+  /// client is responsible for deallocating this string.
+  ///
+  /// \param availability If non-NULL, an array of CXPlatformAvailability instances
+  /// that will be populated with platform availability information, up to either
+  /// the number of platforms for which availability information is available (as
+  /// returned by this function) or \c availability_size, whichever is smaller.
+  ///
+  /// \param availability_size The number of elements available in the
+  /// \c availability array.
+  ///
+  /// \returns The number of platforms (N) for which availability information is
+  /// available (which is unrelated to \c availability_size).
+  ///
+  /// Note that the client is responsible for calling
+  /// \c clang_disposeCXPlatformAvailability to free each of the
+  /// platform-availability structures returned. There are
+  /// \c min(N, availability_size) such structures.
+  int clang_getCursorPlatformAvailability(
+    CXCursor cursor,
+    ffi.Pointer<ffi.Int32> always_deprecated,
+    ffi.Pointer<CXString> deprecated_message,
+    ffi.Pointer<ffi.Int32> always_unavailable,
+    ffi.Pointer<CXString> unavailable_message,
+    ffi.Pointer<CXPlatformAvailability> availability,
+    int availability_size,
+  ) {
+    return (_clang_getCursorPlatformAvailability ??= _dylib.lookupFunction<
+            _c_clang_getCursorPlatformAvailability,
+            _dart_clang_getCursorPlatformAvailability>(
+        'clang_getCursorPlatformAvailability'))(
+      cursor,
+      always_deprecated,
+      deprecated_message,
+      always_unavailable,
+      unavailable_message,
+      availability,
+      availability_size,
+    );
+  }
+
+  _dart_clang_getCursorPlatformAvailability?
+      _clang_getCursorPlatformAvailability;
+
   /// Free the memory associated with a \c CXPlatformAvailability structure.
   void clang_disposeCXPlatformAvailability(
     ffi.Pointer<CXPlatformAvailability> availability,
@@ -1164,6 +2060,47 @@
   _dart_clang_disposeCXPlatformAvailability?
       _clang_disposeCXPlatformAvailability;
 
+  /// Determine the "language" of the entity referred to by a given cursor.
+  int clang_getCursorLanguage(
+    CXCursor cursor,
+  ) {
+    return (_clang_getCursorLanguage ??= _dylib.lookupFunction<
+        _c_clang_getCursorLanguage,
+        _dart_clang_getCursorLanguage>('clang_getCursorLanguage'))(
+      cursor,
+    );
+  }
+
+  _dart_clang_getCursorLanguage? _clang_getCursorLanguage;
+
+  /// Determine the "thread-local storage (TLS) kind" of the declaration
+  /// referred to by a cursor.
+  int clang_getCursorTLSKind(
+    CXCursor cursor,
+  ) {
+    return (_clang_getCursorTLSKind ??= _dylib.lookupFunction<
+        _c_clang_getCursorTLSKind,
+        _dart_clang_getCursorTLSKind>('clang_getCursorTLSKind'))(
+      cursor,
+    );
+  }
+
+  _dart_clang_getCursorTLSKind? _clang_getCursorTLSKind;
+
+  /// Returns the translation unit that a cursor originated from.
+  ffi.Pointer<CXTranslationUnitImpl> clang_Cursor_getTranslationUnit(
+    CXCursor arg0,
+  ) {
+    return (_clang_Cursor_getTranslationUnit ??= _dylib.lookupFunction<
+            _c_clang_Cursor_getTranslationUnit,
+            _dart_clang_Cursor_getTranslationUnit>(
+        'clang_Cursor_getTranslationUnit'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_Cursor_getTranslationUnit? _clang_Cursor_getTranslationUnit;
+
   /// Creates an empty CXCursorSet.
   ffi.Pointer<CXCursorSetImpl> clang_createCXCursorSet() {
     return (_clang_createCXCursorSet ??= _dylib.lookupFunction<
@@ -1186,6 +2123,184 @@
 
   _dart_clang_disposeCXCursorSet? _clang_disposeCXCursorSet;
 
+  /// Queries a CXCursorSet to see if it contains a specific CXCursor.
+  ///
+  /// \returns non-zero if the set contains the specified cursor.
+  int clang_CXCursorSet_contains(
+    ffi.Pointer<CXCursorSetImpl> cset,
+    CXCursor cursor,
+  ) {
+    return (_clang_CXCursorSet_contains ??= _dylib.lookupFunction<
+        _c_clang_CXCursorSet_contains,
+        _dart_clang_CXCursorSet_contains>('clang_CXCursorSet_contains'))(
+      cset,
+      cursor,
+    );
+  }
+
+  _dart_clang_CXCursorSet_contains? _clang_CXCursorSet_contains;
+
+  /// Inserts a CXCursor into a CXCursorSet.
+  ///
+  /// \returns zero if the CXCursor was already in the set, and non-zero otherwise.
+  int clang_CXCursorSet_insert(
+    ffi.Pointer<CXCursorSetImpl> cset,
+    CXCursor cursor,
+  ) {
+    return (_clang_CXCursorSet_insert ??= _dylib.lookupFunction<
+        _c_clang_CXCursorSet_insert,
+        _dart_clang_CXCursorSet_insert>('clang_CXCursorSet_insert'))(
+      cset,
+      cursor,
+    );
+  }
+
+  _dart_clang_CXCursorSet_insert? _clang_CXCursorSet_insert;
+
+  /// Determine the semantic parent of the given cursor.
+  ///
+  /// The semantic parent of a cursor is the cursor that semantically contains
+  /// the given \p cursor. For many declarations, the lexical and semantic parents
+  /// are equivalent (the lexical parent is returned by
+  /// \c clang_getCursorLexicalParent()). They diverge when declarations or
+  /// definitions are provided out-of-line. For example:
+  ///
+  /// \code
+  /// class C {
+  /// void f();
+  /// };
+  ///
+  /// void C::f() { }
+  /// \endcode
+  ///
+  /// In the out-of-line definition of \c C::f, the semantic parent is
+  /// the class \c C, of which this function is a member. The lexical parent is
+  /// the place where the declaration actually occurs in the source code; in this
+  /// case, the definition occurs in the translation unit. In general, the
+  /// lexical parent for a given entity can change without affecting the semantics
+  /// of the program, and the lexical parent of different declarations of the
+  /// same entity may be different. Changing the semantic parent of a declaration,
+  /// on the other hand, can have a major impact on semantics, and redeclarations
+  /// of a particular entity should all have the same semantic context.
+  ///
+  /// In the example above, both declarations of \c C::f have \c C as their
+  /// semantic context, while the lexical context of the first \c C::f is \c C
+  /// and the lexical context of the second \c C::f is the translation unit.
+  ///
+  /// For global declarations, the semantic parent is the translation unit.
+  CXCursor clang_getCursorSemanticParent(
+    CXCursor cursor,
+  ) {
+    return (_clang_getCursorSemanticParent ??= _dylib.lookupFunction<
+        _c_clang_getCursorSemanticParent,
+        _dart_clang_getCursorSemanticParent>('clang_getCursorSemanticParent'))(
+      cursor,
+    );
+  }
+
+  _dart_clang_getCursorSemanticParent? _clang_getCursorSemanticParent;
+
+  /// Determine the lexical parent of the given cursor.
+  ///
+  /// The lexical parent of a cursor is the cursor in which the given \p cursor
+  /// was actually written. For many declarations, the lexical and semantic parents
+  /// are equivalent (the semantic parent is returned by
+  /// \c clang_getCursorSemanticParent()). They diverge when declarations or
+  /// definitions are provided out-of-line. For example:
+  ///
+  /// \code
+  /// class C {
+  /// void f();
+  /// };
+  ///
+  /// void C::f() { }
+  /// \endcode
+  ///
+  /// In the out-of-line definition of \c C::f, the semantic parent is
+  /// the class \c C, of which this function is a member. The lexical parent is
+  /// the place where the declaration actually occurs in the source code; in this
+  /// case, the definition occurs in the translation unit. In general, the
+  /// lexical parent for a given entity can change without affecting the semantics
+  /// of the program, and the lexical parent of different declarations of the
+  /// same entity may be different. Changing the semantic parent of a declaration,
+  /// on the other hand, can have a major impact on semantics, and redeclarations
+  /// of a particular entity should all have the same semantic context.
+  ///
+  /// In the example above, both declarations of \c C::f have \c C as their
+  /// semantic context, while the lexical context of the first \c C::f is \c C
+  /// and the lexical context of the second \c C::f is the translation unit.
+  ///
+  /// For declarations written in the global scope, the lexical parent is
+  /// the translation unit.
+  CXCursor clang_getCursorLexicalParent(
+    CXCursor cursor,
+  ) {
+    return (_clang_getCursorLexicalParent ??= _dylib.lookupFunction<
+        _c_clang_getCursorLexicalParent,
+        _dart_clang_getCursorLexicalParent>('clang_getCursorLexicalParent'))(
+      cursor,
+    );
+  }
+
+  _dart_clang_getCursorLexicalParent? _clang_getCursorLexicalParent;
+
+  /// Determine the set of methods that are overridden by the given
+  /// method.
+  ///
+  /// In both Objective-C and C++, a method (aka virtual member function,
+  /// in C++) can override a virtual method in a base class. For
+  /// Objective-C, a method is said to override any method in the class's
+  /// base class, its protocols, or its categories' protocols, that has the same
+  /// selector and is of the same kind (class or instance).
+  /// If no such method exists, the search continues to the class's superclass,
+  /// its protocols, and its categories, and so on. A method from an Objective-C
+  /// implementation is considered to override the same methods as its
+  /// corresponding method in the interface.
+  ///
+  /// For C++, a virtual member function overrides any virtual member
+  /// function with the same signature that occurs in its base
+  /// classes. With multiple inheritance, a virtual member function can
+  /// override several virtual member functions coming from different
+  /// base classes.
+  ///
+  /// In all cases, this function determines the immediate overridden
+  /// method, rather than all of the overridden methods. For example, if
+  /// a method is originally declared in a class A, then overridden in B
+  /// (which in inherits from A) and also in C (which inherited from B),
+  /// then the only overridden method returned from this function when
+  /// invoked on C's method will be B's method. The client may then
+  /// invoke this function again, given the previously-found overridden
+  /// methods, to map out the complete method-override set.
+  ///
+  /// \param cursor A cursor representing an Objective-C or C++
+  /// method. This routine will compute the set of methods that this
+  /// method overrides.
+  ///
+  /// \param overridden A pointer whose pointee will be replaced with a
+  /// pointer to an array of cursors, representing the set of overridden
+  /// methods. If there are no overridden methods, the pointee will be
+  /// set to NULL. The pointee must be freed via a call to
+  /// \c clang_disposeOverriddenCursors().
+  ///
+  /// \param num_overridden A pointer to the number of overridden
+  /// functions, will be set to the number of overridden functions in the
+  /// array pointed to by \p overridden.
+  void clang_getOverriddenCursors(
+    CXCursor cursor,
+    ffi.Pointer<ffi.Pointer<CXCursor>> overridden,
+    ffi.Pointer<ffi.Uint32> num_overridden,
+  ) {
+    return (_clang_getOverriddenCursors ??= _dylib.lookupFunction<
+        _c_clang_getOverriddenCursors,
+        _dart_clang_getOverriddenCursors>('clang_getOverriddenCursors'))(
+      cursor,
+      overridden,
+      num_overridden,
+    );
+  }
+
+  _dart_clang_getOverriddenCursors? _clang_getOverriddenCursors;
+
   /// Free the set of overridden cursors returned by \c
   /// clang_getOverriddenCursors().
   void clang_disposeOverriddenCursors(
@@ -1201,6 +2316,1468 @@
 
   _dart_clang_disposeOverriddenCursors? _clang_disposeOverriddenCursors;
 
+  /// Retrieve the file that is included by the given inclusion directive
+  /// cursor.
+  ffi.Pointer<ffi.Void> clang_getIncludedFile(
+    CXCursor cursor,
+  ) {
+    return (_clang_getIncludedFile ??= _dylib.lookupFunction<
+        _c_clang_getIncludedFile,
+        _dart_clang_getIncludedFile>('clang_getIncludedFile'))(
+      cursor,
+    );
+  }
+
+  _dart_clang_getIncludedFile? _clang_getIncludedFile;
+
+  /// Map a source location to the cursor that describes the entity at that
+  /// location in the source code.
+  ///
+  /// clang_getCursor() maps an arbitrary source location within a translation
+  /// unit down to the most specific cursor that describes the entity at that
+  /// location. For example, given an expression \c x + y, invoking
+  /// clang_getCursor() with a source location pointing to "x" will return the
+  /// cursor for "x"; similarly for "y". If the cursor points anywhere between
+  /// "x" or "y" (e.g., on the + or the whitespace around it), clang_getCursor()
+  /// will return a cursor referring to the "+" expression.
+  ///
+  /// \returns a cursor representing the entity at the given source location, or
+  /// a NULL cursor if no such entity can be found.
+  CXCursor clang_getCursor(
+    ffi.Pointer<CXTranslationUnitImpl> arg0,
+    CXSourceLocation arg1,
+  ) {
+    return (_clang_getCursor ??=
+        _dylib.lookupFunction<_c_clang_getCursor, _dart_clang_getCursor>(
+            'clang_getCursor'))(
+      arg0,
+      arg1,
+    );
+  }
+
+  _dart_clang_getCursor? _clang_getCursor;
+
+  /// Retrieve the physical location of the source constructor referenced
+  /// by the given cursor.
+  ///
+  /// The location of a declaration is typically the location of the name of that
+  /// declaration, where the name of that declaration would occur if it is
+  /// unnamed, or some keyword that introduces that particular declaration.
+  /// The location of a reference is where that reference occurs within the
+  /// source code.
+  CXSourceLocation clang_getCursorLocation(
+    CXCursor arg0,
+  ) {
+    return (_clang_getCursorLocation ??= _dylib.lookupFunction<
+        _c_clang_getCursorLocation,
+        _dart_clang_getCursorLocation>('clang_getCursorLocation'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_getCursorLocation? _clang_getCursorLocation;
+
+  /// Retrieve the physical extent of the source construct referenced by
+  /// the given cursor.
+  ///
+  /// The extent of a cursor starts with the file/line/column pointing at the
+  /// first character within the source construct that the cursor refers to and
+  /// ends with the last character within that source construct. For a
+  /// declaration, the extent covers the declaration itself. For a reference,
+  /// the extent covers the location of the reference (e.g., where the referenced
+  /// entity was actually used).
+  CXSourceRange clang_getCursorExtent(
+    CXCursor arg0,
+  ) {
+    return (_clang_getCursorExtent ??= _dylib.lookupFunction<
+        _c_clang_getCursorExtent,
+        _dart_clang_getCursorExtent>('clang_getCursorExtent'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_getCursorExtent? _clang_getCursorExtent;
+
+  /// Retrieve the type of a CXCursor (if any).
+  CXType clang_getCursorType(
+    CXCursor C,
+  ) {
+    return (_clang_getCursorType ??= _dylib.lookupFunction<
+        _c_clang_getCursorType,
+        _dart_clang_getCursorType>('clang_getCursorType'))(
+      C,
+    );
+  }
+
+  _dart_clang_getCursorType? _clang_getCursorType;
+
+  /// Pretty-print the underlying type using the rules of the
+  /// language of the translation unit from which it came.
+  ///
+  /// If the type is invalid, an empty string is returned.
+  CXString clang_getTypeSpelling(
+    CXType CT,
+  ) {
+    return (_clang_getTypeSpelling ??= _dylib.lookupFunction<
+        _c_clang_getTypeSpelling,
+        _dart_clang_getTypeSpelling>('clang_getTypeSpelling'))(
+      CT,
+    );
+  }
+
+  _dart_clang_getTypeSpelling? _clang_getTypeSpelling;
+
+  /// Retrieve the underlying type of a typedef declaration.
+  ///
+  /// If the cursor does not reference a typedef declaration, an invalid type is
+  /// returned.
+  CXType clang_getTypedefDeclUnderlyingType(
+    CXCursor C,
+  ) {
+    return (_clang_getTypedefDeclUnderlyingType ??= _dylib.lookupFunction<
+            _c_clang_getTypedefDeclUnderlyingType,
+            _dart_clang_getTypedefDeclUnderlyingType>(
+        'clang_getTypedefDeclUnderlyingType'))(
+      C,
+    );
+  }
+
+  _dart_clang_getTypedefDeclUnderlyingType? _clang_getTypedefDeclUnderlyingType;
+
+  /// Retrieve the integer type of an enum declaration.
+  ///
+  /// If the cursor does not reference an enum declaration, an invalid type is
+  /// returned.
+  CXType clang_getEnumDeclIntegerType(
+    CXCursor C,
+  ) {
+    return (_clang_getEnumDeclIntegerType ??= _dylib.lookupFunction<
+        _c_clang_getEnumDeclIntegerType,
+        _dart_clang_getEnumDeclIntegerType>('clang_getEnumDeclIntegerType'))(
+      C,
+    );
+  }
+
+  _dart_clang_getEnumDeclIntegerType? _clang_getEnumDeclIntegerType;
+
+  /// Retrieve the integer value of an enum constant declaration as a signed
+  /// long long.
+  ///
+  /// If the cursor does not reference an enum constant declaration, LLONG_MIN is returned.
+  /// Since this is also potentially a valid constant value, the kind of the cursor
+  /// must be verified before calling this function.
+  int clang_getEnumConstantDeclValue(
+    CXCursor C,
+  ) {
+    return (_clang_getEnumConstantDeclValue ??= _dylib.lookupFunction<
+            _c_clang_getEnumConstantDeclValue,
+            _dart_clang_getEnumConstantDeclValue>(
+        'clang_getEnumConstantDeclValue'))(
+      C,
+    );
+  }
+
+  _dart_clang_getEnumConstantDeclValue? _clang_getEnumConstantDeclValue;
+
+  /// Retrieve the integer value of an enum constant declaration as an unsigned
+  /// long long.
+  ///
+  /// If the cursor does not reference an enum constant declaration, ULLONG_MAX is returned.
+  /// Since this is also potentially a valid constant value, the kind of the cursor
+  /// must be verified before calling this function.
+  int clang_getEnumConstantDeclUnsignedValue(
+    CXCursor C,
+  ) {
+    return (_clang_getEnumConstantDeclUnsignedValue ??= _dylib.lookupFunction<
+            _c_clang_getEnumConstantDeclUnsignedValue,
+            _dart_clang_getEnumConstantDeclUnsignedValue>(
+        'clang_getEnumConstantDeclUnsignedValue'))(
+      C,
+    );
+  }
+
+  _dart_clang_getEnumConstantDeclUnsignedValue?
+      _clang_getEnumConstantDeclUnsignedValue;
+
+  /// Retrieve the bit width of a bit field declaration as an integer.
+  ///
+  /// If a cursor that is not a bit field declaration is passed in, -1 is returned.
+  int clang_getFieldDeclBitWidth(
+    CXCursor C,
+  ) {
+    return (_clang_getFieldDeclBitWidth ??= _dylib.lookupFunction<
+        _c_clang_getFieldDeclBitWidth,
+        _dart_clang_getFieldDeclBitWidth>('clang_getFieldDeclBitWidth'))(
+      C,
+    );
+  }
+
+  _dart_clang_getFieldDeclBitWidth? _clang_getFieldDeclBitWidth;
+
+  /// Retrieve the number of non-variadic arguments associated with a given
+  /// cursor.
+  ///
+  /// The number of arguments can be determined for calls as well as for
+  /// declarations of functions or methods. For other cursors -1 is returned.
+  int clang_Cursor_getNumArguments(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_getNumArguments ??= _dylib.lookupFunction<
+        _c_clang_Cursor_getNumArguments,
+        _dart_clang_Cursor_getNumArguments>('clang_Cursor_getNumArguments'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_getNumArguments? _clang_Cursor_getNumArguments;
+
+  /// Retrieve the argument cursor of a function or method.
+  ///
+  /// The argument cursor can be determined for calls as well as for declarations
+  /// of functions or methods. For other cursors and for invalid indices, an
+  /// invalid cursor is returned.
+  CXCursor clang_Cursor_getArgument(
+    CXCursor C,
+    int i,
+  ) {
+    return (_clang_Cursor_getArgument ??= _dylib.lookupFunction<
+        _c_clang_Cursor_getArgument,
+        _dart_clang_Cursor_getArgument>('clang_Cursor_getArgument'))(
+      C,
+      i,
+    );
+  }
+
+  _dart_clang_Cursor_getArgument? _clang_Cursor_getArgument;
+
+  /// Returns the number of template args of a function decl representing a
+  /// template specialization.
+  ///
+  /// If the argument cursor cannot be converted into a template function
+  /// declaration, -1 is returned.
+  ///
+  /// For example, for the following declaration and specialization:
+  /// template <typename T, int kInt, bool kBool>
+  /// void foo() { ... }
+  ///
+  /// template <>
+  /// void foo<float, -7, true>();
+  ///
+  /// The value 3 would be returned from this call.
+  int clang_Cursor_getNumTemplateArguments(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_getNumTemplateArguments ??= _dylib.lookupFunction<
+            _c_clang_Cursor_getNumTemplateArguments,
+            _dart_clang_Cursor_getNumTemplateArguments>(
+        'clang_Cursor_getNumTemplateArguments'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_getNumTemplateArguments?
+      _clang_Cursor_getNumTemplateArguments;
+
+  /// Retrieve the kind of the I'th template argument of the CXCursor C.
+  ///
+  /// If the argument CXCursor does not represent a FunctionDecl, an invalid
+  /// template argument kind is returned.
+  ///
+  /// For example, for the following declaration and specialization:
+  /// template <typename T, int kInt, bool kBool>
+  /// void foo() { ... }
+  ///
+  /// template <>
+  /// void foo<float, -7, true>();
+  ///
+  /// For I = 0, 1, and 2, Type, Integral, and Integral will be returned,
+  /// respectively.
+  int clang_Cursor_getTemplateArgumentKind(
+    CXCursor C,
+    int I,
+  ) {
+    return (_clang_Cursor_getTemplateArgumentKind ??= _dylib.lookupFunction<
+            _c_clang_Cursor_getTemplateArgumentKind,
+            _dart_clang_Cursor_getTemplateArgumentKind>(
+        'clang_Cursor_getTemplateArgumentKind'))(
+      C,
+      I,
+    );
+  }
+
+  _dart_clang_Cursor_getTemplateArgumentKind?
+      _clang_Cursor_getTemplateArgumentKind;
+
+  /// Retrieve a CXType representing the type of a TemplateArgument of a
+  /// function decl representing a template specialization.
+  ///
+  /// If the argument CXCursor does not represent a FunctionDecl whose I'th
+  /// template argument has a kind of CXTemplateArgKind_Integral, an invalid type
+  /// is returned.
+  ///
+  /// For example, for the following declaration and specialization:
+  /// template <typename T, int kInt, bool kBool>
+  /// void foo() { ... }
+  ///
+  /// template <>
+  /// void foo<float, -7, true>();
+  ///
+  /// If called with I = 0, "float", will be returned.
+  /// Invalid types will be returned for I == 1 or 2.
+  CXType clang_Cursor_getTemplateArgumentType(
+    CXCursor C,
+    int I,
+  ) {
+    return (_clang_Cursor_getTemplateArgumentType ??= _dylib.lookupFunction<
+            _c_clang_Cursor_getTemplateArgumentType,
+            _dart_clang_Cursor_getTemplateArgumentType>(
+        'clang_Cursor_getTemplateArgumentType'))(
+      C,
+      I,
+    );
+  }
+
+  _dart_clang_Cursor_getTemplateArgumentType?
+      _clang_Cursor_getTemplateArgumentType;
+
+  /// Retrieve the value of an Integral TemplateArgument (of a function
+  /// decl representing a template specialization) as a signed long long.
+  ///
+  /// It is undefined to call this function on a CXCursor that does not represent a
+  /// FunctionDecl or whose I'th template argument is not an integral value.
+  ///
+  /// For example, for the following declaration and specialization:
+  /// template <typename T, int kInt, bool kBool>
+  /// void foo() { ... }
+  ///
+  /// template <>
+  /// void foo<float, -7, true>();
+  ///
+  /// If called with I = 1 or 2, -7 or true will be returned, respectively.
+  /// For I == 0, this function's behavior is undefined.
+  int clang_Cursor_getTemplateArgumentValue(
+    CXCursor C,
+    int I,
+  ) {
+    return (_clang_Cursor_getTemplateArgumentValue ??= _dylib.lookupFunction<
+            _c_clang_Cursor_getTemplateArgumentValue,
+            _dart_clang_Cursor_getTemplateArgumentValue>(
+        'clang_Cursor_getTemplateArgumentValue'))(
+      C,
+      I,
+    );
+  }
+
+  _dart_clang_Cursor_getTemplateArgumentValue?
+      _clang_Cursor_getTemplateArgumentValue;
+
+  /// Retrieve the value of an Integral TemplateArgument (of a function
+  /// decl representing a template specialization) as an unsigned long long.
+  ///
+  /// It is undefined to call this function on a CXCursor that does not represent a
+  /// FunctionDecl or whose I'th template argument is not an integral value.
+  ///
+  /// For example, for the following declaration and specialization:
+  /// template <typename T, int kInt, bool kBool>
+  /// void foo() { ... }
+  ///
+  /// template <>
+  /// void foo<float, 2147483649, true>();
+  ///
+  /// If called with I = 1 or 2, 2147483649 or true will be returned, respectively.
+  /// For I == 0, this function's behavior is undefined.
+  int clang_Cursor_getTemplateArgumentUnsignedValue(
+    CXCursor C,
+    int I,
+  ) {
+    return (_clang_Cursor_getTemplateArgumentUnsignedValue ??=
+        _dylib.lookupFunction<_c_clang_Cursor_getTemplateArgumentUnsignedValue,
+                _dart_clang_Cursor_getTemplateArgumentUnsignedValue>(
+            'clang_Cursor_getTemplateArgumentUnsignedValue'))(
+      C,
+      I,
+    );
+  }
+
+  _dart_clang_Cursor_getTemplateArgumentUnsignedValue?
+      _clang_Cursor_getTemplateArgumentUnsignedValue;
+
+  /// Determine whether two CXTypes represent the same type.
+  ///
+  /// \returns non-zero if the CXTypes represent the same type and
+  /// zero otherwise.
+  int clang_equalTypes(
+    CXType A,
+    CXType B,
+  ) {
+    return (_clang_equalTypes ??=
+        _dylib.lookupFunction<_c_clang_equalTypes, _dart_clang_equalTypes>(
+            'clang_equalTypes'))(
+      A,
+      B,
+    );
+  }
+
+  _dart_clang_equalTypes? _clang_equalTypes;
+
+  /// Return the canonical type for a CXType.
+  ///
+  /// Clang's type system explicitly models typedefs and all the ways
+  /// a specific type can be represented.  The canonical type is the underlying
+  /// type with all the "sugar" removed.  For example, if 'T' is a typedef
+  /// for 'int', the canonical type for 'T' would be 'int'.
+  CXType clang_getCanonicalType(
+    CXType T,
+  ) {
+    return (_clang_getCanonicalType ??= _dylib.lookupFunction<
+        _c_clang_getCanonicalType,
+        _dart_clang_getCanonicalType>('clang_getCanonicalType'))(
+      T,
+    );
+  }
+
+  _dart_clang_getCanonicalType? _clang_getCanonicalType;
+
+  /// Determine whether a CXType has the "const" qualifier set,
+  /// without looking through typedefs that may have added "const" at a
+  /// different level.
+  int clang_isConstQualifiedType(
+    CXType T,
+  ) {
+    return (_clang_isConstQualifiedType ??= _dylib.lookupFunction<
+        _c_clang_isConstQualifiedType,
+        _dart_clang_isConstQualifiedType>('clang_isConstQualifiedType'))(
+      T,
+    );
+  }
+
+  _dart_clang_isConstQualifiedType? _clang_isConstQualifiedType;
+
+  /// Determine whether a  CXCursor that is a macro, is
+  /// function like.
+  int clang_Cursor_isMacroFunctionLike(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_isMacroFunctionLike ??= _dylib.lookupFunction<
+            _c_clang_Cursor_isMacroFunctionLike,
+            _dart_clang_Cursor_isMacroFunctionLike>(
+        'clang_Cursor_isMacroFunctionLike'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_isMacroFunctionLike? _clang_Cursor_isMacroFunctionLike;
+
+  /// Determine whether a  CXCursor that is a macro, is a
+  /// builtin one.
+  int clang_Cursor_isMacroBuiltin(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_isMacroBuiltin ??= _dylib.lookupFunction<
+        _c_clang_Cursor_isMacroBuiltin,
+        _dart_clang_Cursor_isMacroBuiltin>('clang_Cursor_isMacroBuiltin'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_isMacroBuiltin? _clang_Cursor_isMacroBuiltin;
+
+  /// Determine whether a  CXCursor that is a function declaration, is an
+  /// inline declaration.
+  int clang_Cursor_isFunctionInlined(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_isFunctionInlined ??= _dylib.lookupFunction<
+            _c_clang_Cursor_isFunctionInlined,
+            _dart_clang_Cursor_isFunctionInlined>(
+        'clang_Cursor_isFunctionInlined'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_isFunctionInlined? _clang_Cursor_isFunctionInlined;
+
+  /// Determine whether a CXType has the "volatile" qualifier set,
+  /// without looking through typedefs that may have added "volatile" at
+  /// a different level.
+  int clang_isVolatileQualifiedType(
+    CXType T,
+  ) {
+    return (_clang_isVolatileQualifiedType ??= _dylib.lookupFunction<
+        _c_clang_isVolatileQualifiedType,
+        _dart_clang_isVolatileQualifiedType>('clang_isVolatileQualifiedType'))(
+      T,
+    );
+  }
+
+  _dart_clang_isVolatileQualifiedType? _clang_isVolatileQualifiedType;
+
+  /// Determine whether a CXType has the "restrict" qualifier set,
+  /// without looking through typedefs that may have added "restrict" at a
+  /// different level.
+  int clang_isRestrictQualifiedType(
+    CXType T,
+  ) {
+    return (_clang_isRestrictQualifiedType ??= _dylib.lookupFunction<
+        _c_clang_isRestrictQualifiedType,
+        _dart_clang_isRestrictQualifiedType>('clang_isRestrictQualifiedType'))(
+      T,
+    );
+  }
+
+  _dart_clang_isRestrictQualifiedType? _clang_isRestrictQualifiedType;
+
+  /// Returns the address space of the given type.
+  int clang_getAddressSpace(
+    CXType T,
+  ) {
+    return (_clang_getAddressSpace ??= _dylib.lookupFunction<
+        _c_clang_getAddressSpace,
+        _dart_clang_getAddressSpace>('clang_getAddressSpace'))(
+      T,
+    );
+  }
+
+  _dart_clang_getAddressSpace? _clang_getAddressSpace;
+
+  /// Returns the typedef name of the given type.
+  CXString clang_getTypedefName(
+    CXType CT,
+  ) {
+    return (_clang_getTypedefName ??= _dylib.lookupFunction<
+        _c_clang_getTypedefName,
+        _dart_clang_getTypedefName>('clang_getTypedefName'))(
+      CT,
+    );
+  }
+
+  _dart_clang_getTypedefName? _clang_getTypedefName;
+
+  /// For pointer types, returns the type of the pointee.
+  CXType clang_getPointeeType(
+    CXType T,
+  ) {
+    return (_clang_getPointeeType ??= _dylib.lookupFunction<
+        _c_clang_getPointeeType,
+        _dart_clang_getPointeeType>('clang_getPointeeType'))(
+      T,
+    );
+  }
+
+  _dart_clang_getPointeeType? _clang_getPointeeType;
+
+  /// Return the cursor for the declaration of the given type.
+  CXCursor clang_getTypeDeclaration(
+    CXType T,
+  ) {
+    return (_clang_getTypeDeclaration ??= _dylib.lookupFunction<
+        _c_clang_getTypeDeclaration,
+        _dart_clang_getTypeDeclaration>('clang_getTypeDeclaration'))(
+      T,
+    );
+  }
+
+  _dart_clang_getTypeDeclaration? _clang_getTypeDeclaration;
+
+  /// Returns the Objective-C type encoding for the specified declaration.
+  CXString clang_getDeclObjCTypeEncoding(
+    CXCursor C,
+  ) {
+    return (_clang_getDeclObjCTypeEncoding ??= _dylib.lookupFunction<
+        _c_clang_getDeclObjCTypeEncoding,
+        _dart_clang_getDeclObjCTypeEncoding>('clang_getDeclObjCTypeEncoding'))(
+      C,
+    );
+  }
+
+  _dart_clang_getDeclObjCTypeEncoding? _clang_getDeclObjCTypeEncoding;
+
+  /// Returns the Objective-C type encoding for the specified CXType.
+  CXString clang_Type_getObjCEncoding(
+    CXType type,
+  ) {
+    return (_clang_Type_getObjCEncoding ??= _dylib.lookupFunction<
+        _c_clang_Type_getObjCEncoding,
+        _dart_clang_Type_getObjCEncoding>('clang_Type_getObjCEncoding'))(
+      type,
+    );
+  }
+
+  _dart_clang_Type_getObjCEncoding? _clang_Type_getObjCEncoding;
+
+  /// Retrieve the spelling of a given CXTypeKind.
+  CXString clang_getTypeKindSpelling(
+    int K,
+  ) {
+    return (_clang_getTypeKindSpelling ??= _dylib.lookupFunction<
+        _c_clang_getTypeKindSpelling,
+        _dart_clang_getTypeKindSpelling>('clang_getTypeKindSpelling'))(
+      K,
+    );
+  }
+
+  _dart_clang_getTypeKindSpelling? _clang_getTypeKindSpelling;
+
+  /// Retrieve the calling convention associated with a function type.
+  ///
+  /// If a non-function type is passed in, CXCallingConv_Invalid is returned.
+  int clang_getFunctionTypeCallingConv(
+    CXType T,
+  ) {
+    return (_clang_getFunctionTypeCallingConv ??= _dylib.lookupFunction<
+            _c_clang_getFunctionTypeCallingConv,
+            _dart_clang_getFunctionTypeCallingConv>(
+        'clang_getFunctionTypeCallingConv'))(
+      T,
+    );
+  }
+
+  _dart_clang_getFunctionTypeCallingConv? _clang_getFunctionTypeCallingConv;
+
+  /// Retrieve the return type associated with a function type.
+  ///
+  /// If a non-function type is passed in, an invalid type is returned.
+  CXType clang_getResultType(
+    CXType T,
+  ) {
+    return (_clang_getResultType ??= _dylib.lookupFunction<
+        _c_clang_getResultType,
+        _dart_clang_getResultType>('clang_getResultType'))(
+      T,
+    );
+  }
+
+  _dart_clang_getResultType? _clang_getResultType;
+
+  /// Retrieve the exception specification type associated with a function type.
+  /// This is a value of type CXCursor_ExceptionSpecificationKind.
+  ///
+  /// If a non-function type is passed in, an error code of -1 is returned.
+  int clang_getExceptionSpecificationType(
+    CXType T,
+  ) {
+    return (_clang_getExceptionSpecificationType ??= _dylib.lookupFunction<
+            _c_clang_getExceptionSpecificationType,
+            _dart_clang_getExceptionSpecificationType>(
+        'clang_getExceptionSpecificationType'))(
+      T,
+    );
+  }
+
+  _dart_clang_getExceptionSpecificationType?
+      _clang_getExceptionSpecificationType;
+
+  /// Retrieve the number of non-variadic parameters associated with a
+  /// function type.
+  ///
+  /// If a non-function type is passed in, -1 is returned.
+  int clang_getNumArgTypes(
+    CXType T,
+  ) {
+    return (_clang_getNumArgTypes ??= _dylib.lookupFunction<
+        _c_clang_getNumArgTypes,
+        _dart_clang_getNumArgTypes>('clang_getNumArgTypes'))(
+      T,
+    );
+  }
+
+  _dart_clang_getNumArgTypes? _clang_getNumArgTypes;
+
+  /// Retrieve the type of a parameter of a function type.
+  ///
+  /// If a non-function type is passed in or the function does not have enough
+  /// parameters, an invalid type is returned.
+  CXType clang_getArgType(
+    CXType T,
+    int i,
+  ) {
+    return (_clang_getArgType ??=
+        _dylib.lookupFunction<_c_clang_getArgType, _dart_clang_getArgType>(
+            'clang_getArgType'))(
+      T,
+      i,
+    );
+  }
+
+  _dart_clang_getArgType? _clang_getArgType;
+
+  /// Retrieves the base type of the ObjCObjectType.
+  ///
+  /// If the type is not an ObjC object, an invalid type is returned.
+  CXType clang_Type_getObjCObjectBaseType(
+    CXType T,
+  ) {
+    return (_clang_Type_getObjCObjectBaseType ??= _dylib.lookupFunction<
+            _c_clang_Type_getObjCObjectBaseType,
+            _dart_clang_Type_getObjCObjectBaseType>(
+        'clang_Type_getObjCObjectBaseType'))(
+      T,
+    );
+  }
+
+  _dart_clang_Type_getObjCObjectBaseType? _clang_Type_getObjCObjectBaseType;
+
+  /// Retrieve the number of protocol references associated with an ObjC object/id.
+  ///
+  /// If the type is not an ObjC object, 0 is returned.
+  int clang_Type_getNumObjCProtocolRefs(
+    CXType T,
+  ) {
+    return (_clang_Type_getNumObjCProtocolRefs ??= _dylib.lookupFunction<
+            _c_clang_Type_getNumObjCProtocolRefs,
+            _dart_clang_Type_getNumObjCProtocolRefs>(
+        'clang_Type_getNumObjCProtocolRefs'))(
+      T,
+    );
+  }
+
+  _dart_clang_Type_getNumObjCProtocolRefs? _clang_Type_getNumObjCProtocolRefs;
+
+  /// Retrieve the decl for a protocol reference for an ObjC object/id.
+  ///
+  /// If the type is not an ObjC object or there are not enough protocol
+  /// references, an invalid cursor is returned.
+  CXCursor clang_Type_getObjCProtocolDecl(
+    CXType T,
+    int i,
+  ) {
+    return (_clang_Type_getObjCProtocolDecl ??= _dylib.lookupFunction<
+            _c_clang_Type_getObjCProtocolDecl,
+            _dart_clang_Type_getObjCProtocolDecl>(
+        'clang_Type_getObjCProtocolDecl'))(
+      T,
+      i,
+    );
+  }
+
+  _dart_clang_Type_getObjCProtocolDecl? _clang_Type_getObjCProtocolDecl;
+
+  /// Retreive the number of type arguments associated with an ObjC object.
+  ///
+  /// If the type is not an ObjC object, 0 is returned.
+  int clang_Type_getNumObjCTypeArgs(
+    CXType T,
+  ) {
+    return (_clang_Type_getNumObjCTypeArgs ??= _dylib.lookupFunction<
+        _c_clang_Type_getNumObjCTypeArgs,
+        _dart_clang_Type_getNumObjCTypeArgs>('clang_Type_getNumObjCTypeArgs'))(
+      T,
+    );
+  }
+
+  _dart_clang_Type_getNumObjCTypeArgs? _clang_Type_getNumObjCTypeArgs;
+
+  /// Retrieve a type argument associated with an ObjC object.
+  ///
+  /// If the type is not an ObjC or the index is not valid,
+  /// an invalid type is returned.
+  CXType clang_Type_getObjCTypeArg(
+    CXType T,
+    int i,
+  ) {
+    return (_clang_Type_getObjCTypeArg ??= _dylib.lookupFunction<
+        _c_clang_Type_getObjCTypeArg,
+        _dart_clang_Type_getObjCTypeArg>('clang_Type_getObjCTypeArg'))(
+      T,
+      i,
+    );
+  }
+
+  _dart_clang_Type_getObjCTypeArg? _clang_Type_getObjCTypeArg;
+
+  /// Return 1 if the CXType is a variadic function type, and 0 otherwise.
+  int clang_isFunctionTypeVariadic(
+    CXType T,
+  ) {
+    return (_clang_isFunctionTypeVariadic ??= _dylib.lookupFunction<
+        _c_clang_isFunctionTypeVariadic,
+        _dart_clang_isFunctionTypeVariadic>('clang_isFunctionTypeVariadic'))(
+      T,
+    );
+  }
+
+  _dart_clang_isFunctionTypeVariadic? _clang_isFunctionTypeVariadic;
+
+  /// Retrieve the return type associated with a given cursor.
+  ///
+  /// This only returns a valid type if the cursor refers to a function or method.
+  CXType clang_getCursorResultType(
+    CXCursor C,
+  ) {
+    return (_clang_getCursorResultType ??= _dylib.lookupFunction<
+        _c_clang_getCursorResultType,
+        _dart_clang_getCursorResultType>('clang_getCursorResultType'))(
+      C,
+    );
+  }
+
+  _dart_clang_getCursorResultType? _clang_getCursorResultType;
+
+  /// Retrieve the exception specification type associated with a given cursor.
+  /// This is a value of type CXCursor_ExceptionSpecificationKind.
+  ///
+  /// This only returns a valid result if the cursor refers to a function or method.
+  int clang_getCursorExceptionSpecificationType(
+    CXCursor C,
+  ) {
+    return (_clang_getCursorExceptionSpecificationType ??=
+        _dylib.lookupFunction<_c_clang_getCursorExceptionSpecificationType,
+                _dart_clang_getCursorExceptionSpecificationType>(
+            'clang_getCursorExceptionSpecificationType'))(
+      C,
+    );
+  }
+
+  _dart_clang_getCursorExceptionSpecificationType?
+      _clang_getCursorExceptionSpecificationType;
+
+  /// Return 1 if the CXType is a POD (plain old data) type, and 0
+  /// otherwise.
+  int clang_isPODType(
+    CXType T,
+  ) {
+    return (_clang_isPODType ??=
+        _dylib.lookupFunction<_c_clang_isPODType, _dart_clang_isPODType>(
+            'clang_isPODType'))(
+      T,
+    );
+  }
+
+  _dart_clang_isPODType? _clang_isPODType;
+
+  /// Return the element type of an array, complex, or vector type.
+  ///
+  /// If a type is passed in that is not an array, complex, or vector type,
+  /// an invalid type is returned.
+  CXType clang_getElementType(
+    CXType T,
+  ) {
+    return (_clang_getElementType ??= _dylib.lookupFunction<
+        _c_clang_getElementType,
+        _dart_clang_getElementType>('clang_getElementType'))(
+      T,
+    );
+  }
+
+  _dart_clang_getElementType? _clang_getElementType;
+
+  /// Return the number of elements of an array or vector type.
+  ///
+  /// If a type is passed in that is not an array or vector type,
+  /// -1 is returned.
+  int clang_getNumElements(
+    CXType T,
+  ) {
+    return (_clang_getNumElements ??= _dylib.lookupFunction<
+        _c_clang_getNumElements,
+        _dart_clang_getNumElements>('clang_getNumElements'))(
+      T,
+    );
+  }
+
+  _dart_clang_getNumElements? _clang_getNumElements;
+
+  /// Return the element type of an array type.
+  ///
+  /// If a non-array type is passed in, an invalid type is returned.
+  CXType clang_getArrayElementType(
+    CXType T,
+  ) {
+    return (_clang_getArrayElementType ??= _dylib.lookupFunction<
+        _c_clang_getArrayElementType,
+        _dart_clang_getArrayElementType>('clang_getArrayElementType'))(
+      T,
+    );
+  }
+
+  _dart_clang_getArrayElementType? _clang_getArrayElementType;
+
+  /// Return the array size of a constant array.
+  ///
+  /// If a non-array type is passed in, -1 is returned.
+  int clang_getArraySize(
+    CXType T,
+  ) {
+    return (_clang_getArraySize ??=
+        _dylib.lookupFunction<_c_clang_getArraySize, _dart_clang_getArraySize>(
+            'clang_getArraySize'))(
+      T,
+    );
+  }
+
+  _dart_clang_getArraySize? _clang_getArraySize;
+
+  /// Retrieve the type named by the qualified-id.
+  ///
+  /// If a non-elaborated type is passed in, an invalid type is returned.
+  CXType clang_Type_getNamedType(
+    CXType T,
+  ) {
+    return (_clang_Type_getNamedType ??= _dylib.lookupFunction<
+        _c_clang_Type_getNamedType,
+        _dart_clang_Type_getNamedType>('clang_Type_getNamedType'))(
+      T,
+    );
+  }
+
+  _dart_clang_Type_getNamedType? _clang_Type_getNamedType;
+
+  /// Determine if a typedef is 'transparent' tag.
+  ///
+  /// A typedef is considered 'transparent' if it shares a name and spelling
+  /// location with its underlying tag type, as is the case with the NS_ENUM macro.
+  ///
+  /// \returns non-zero if transparent and zero otherwise.
+  int clang_Type_isTransparentTagTypedef(
+    CXType T,
+  ) {
+    return (_clang_Type_isTransparentTagTypedef ??= _dylib.lookupFunction<
+            _c_clang_Type_isTransparentTagTypedef,
+            _dart_clang_Type_isTransparentTagTypedef>(
+        'clang_Type_isTransparentTagTypedef'))(
+      T,
+    );
+  }
+
+  _dart_clang_Type_isTransparentTagTypedef? _clang_Type_isTransparentTagTypedef;
+
+  /// Retrieve the nullability kind of a pointer type.
+  int clang_Type_getNullability(
+    CXType T,
+  ) {
+    return (_clang_Type_getNullability ??= _dylib.lookupFunction<
+        _c_clang_Type_getNullability,
+        _dart_clang_Type_getNullability>('clang_Type_getNullability'))(
+      T,
+    );
+  }
+
+  _dart_clang_Type_getNullability? _clang_Type_getNullability;
+
+  /// Return the alignment of a type in bytes as per C++[expr.alignof]
+  /// standard.
+  ///
+  /// If the type declaration is invalid, CXTypeLayoutError_Invalid is returned.
+  /// If the type declaration is an incomplete type, CXTypeLayoutError_Incomplete
+  /// is returned.
+  /// If the type declaration is a dependent type, CXTypeLayoutError_Dependent is
+  /// returned.
+  /// If the type declaration is not a constant size type,
+  /// CXTypeLayoutError_NotConstantSize is returned.
+  int clang_Type_getAlignOf(
+    CXType T,
+  ) {
+    return (_clang_Type_getAlignOf ??= _dylib.lookupFunction<
+        _c_clang_Type_getAlignOf,
+        _dart_clang_Type_getAlignOf>('clang_Type_getAlignOf'))(
+      T,
+    );
+  }
+
+  _dart_clang_Type_getAlignOf? _clang_Type_getAlignOf;
+
+  /// Return the class type of an member pointer type.
+  ///
+  /// If a non-member-pointer type is passed in, an invalid type is returned.
+  CXType clang_Type_getClassType(
+    CXType T,
+  ) {
+    return (_clang_Type_getClassType ??= _dylib.lookupFunction<
+        _c_clang_Type_getClassType,
+        _dart_clang_Type_getClassType>('clang_Type_getClassType'))(
+      T,
+    );
+  }
+
+  _dart_clang_Type_getClassType? _clang_Type_getClassType;
+
+  /// Return the size of a type in bytes as per C++[expr.sizeof] standard.
+  ///
+  /// If the type declaration is invalid, CXTypeLayoutError_Invalid is returned.
+  /// If the type declaration is an incomplete type, CXTypeLayoutError_Incomplete
+  /// is returned.
+  /// If the type declaration is a dependent type, CXTypeLayoutError_Dependent is
+  /// returned.
+  int clang_Type_getSizeOf(
+    CXType T,
+  ) {
+    return (_clang_Type_getSizeOf ??= _dylib.lookupFunction<
+        _c_clang_Type_getSizeOf,
+        _dart_clang_Type_getSizeOf>('clang_Type_getSizeOf'))(
+      T,
+    );
+  }
+
+  _dart_clang_Type_getSizeOf? _clang_Type_getSizeOf;
+
+  /// Return the offset of a field named S in a record of type T in bits
+  /// as it would be returned by __offsetof__ as per C++11[18.2p4]
+  ///
+  /// If the cursor is not a record field declaration, CXTypeLayoutError_Invalid
+  /// is returned.
+  /// If the field's type declaration is an incomplete type,
+  /// CXTypeLayoutError_Incomplete is returned.
+  /// If the field's type declaration is a dependent type,
+  /// CXTypeLayoutError_Dependent is returned.
+  /// If the field's name S is not found,
+  /// CXTypeLayoutError_InvalidFieldName is returned.
+  int clang_Type_getOffsetOf(
+    CXType T,
+    ffi.Pointer<ffi.Int8> S,
+  ) {
+    return (_clang_Type_getOffsetOf ??= _dylib.lookupFunction<
+        _c_clang_Type_getOffsetOf,
+        _dart_clang_Type_getOffsetOf>('clang_Type_getOffsetOf'))(
+      T,
+      S,
+    );
+  }
+
+  _dart_clang_Type_getOffsetOf? _clang_Type_getOffsetOf;
+
+  /// Return the type that was modified by this attributed type.
+  ///
+  /// If the type is not an attributed type, an invalid type is returned.
+  CXType clang_Type_getModifiedType(
+    CXType T,
+  ) {
+    return (_clang_Type_getModifiedType ??= _dylib.lookupFunction<
+        _c_clang_Type_getModifiedType,
+        _dart_clang_Type_getModifiedType>('clang_Type_getModifiedType'))(
+      T,
+    );
+  }
+
+  _dart_clang_Type_getModifiedType? _clang_Type_getModifiedType;
+
+  /// Return the offset of the field represented by the Cursor.
+  ///
+  /// If the cursor is not a field declaration, -1 is returned.
+  /// If the cursor semantic parent is not a record field declaration,
+  /// CXTypeLayoutError_Invalid is returned.
+  /// If the field's type declaration is an incomplete type,
+  /// CXTypeLayoutError_Incomplete is returned.
+  /// If the field's type declaration is a dependent type,
+  /// CXTypeLayoutError_Dependent is returned.
+  /// If the field's name S is not found,
+  /// CXTypeLayoutError_InvalidFieldName is returned.
+  int clang_Cursor_getOffsetOfField(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_getOffsetOfField ??= _dylib.lookupFunction<
+        _c_clang_Cursor_getOffsetOfField,
+        _dart_clang_Cursor_getOffsetOfField>('clang_Cursor_getOffsetOfField'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_getOffsetOfField? _clang_Cursor_getOffsetOfField;
+
+  /// Determine whether the given cursor represents an anonymous
+  /// tag or namespace
+  int clang_Cursor_isAnonymous(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_isAnonymous ??= _dylib.lookupFunction<
+        _c_clang_Cursor_isAnonymous,
+        _dart_clang_Cursor_isAnonymous>('clang_Cursor_isAnonymous'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_isAnonymous? _clang_Cursor_isAnonymous;
+
+  /// Determine whether the given cursor represents an anonymous record
+  /// declaration.
+  int clang_Cursor_isAnonymousRecordDecl(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_isAnonymousRecordDecl ??= _dylib.lookupFunction<
+            _c_clang_Cursor_isAnonymousRecordDecl,
+            _dart_clang_Cursor_isAnonymousRecordDecl>(
+        'clang_Cursor_isAnonymousRecordDecl'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_isAnonymousRecordDecl? _clang_Cursor_isAnonymousRecordDecl;
+
+  /// Determine whether the given cursor represents an inline namespace
+  /// declaration.
+  int clang_Cursor_isInlineNamespace(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_isInlineNamespace ??= _dylib.lookupFunction<
+            _c_clang_Cursor_isInlineNamespace,
+            _dart_clang_Cursor_isInlineNamespace>(
+        'clang_Cursor_isInlineNamespace'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_isInlineNamespace? _clang_Cursor_isInlineNamespace;
+
+  /// Returns the number of template arguments for given template
+  /// specialization, or -1 if type \c T is not a template specialization.
+  int clang_Type_getNumTemplateArguments(
+    CXType T,
+  ) {
+    return (_clang_Type_getNumTemplateArguments ??= _dylib.lookupFunction<
+            _c_clang_Type_getNumTemplateArguments,
+            _dart_clang_Type_getNumTemplateArguments>(
+        'clang_Type_getNumTemplateArguments'))(
+      T,
+    );
+  }
+
+  _dart_clang_Type_getNumTemplateArguments? _clang_Type_getNumTemplateArguments;
+
+  /// Returns the type template argument of a template class specialization
+  /// at given index.
+  ///
+  /// This function only returns template type arguments and does not handle
+  /// template template arguments or variadic packs.
+  CXType clang_Type_getTemplateArgumentAsType(
+    CXType T,
+    int i,
+  ) {
+    return (_clang_Type_getTemplateArgumentAsType ??= _dylib.lookupFunction<
+            _c_clang_Type_getTemplateArgumentAsType,
+            _dart_clang_Type_getTemplateArgumentAsType>(
+        'clang_Type_getTemplateArgumentAsType'))(
+      T,
+      i,
+    );
+  }
+
+  _dart_clang_Type_getTemplateArgumentAsType?
+      _clang_Type_getTemplateArgumentAsType;
+
+  /// Retrieve the ref-qualifier kind of a function or method.
+  ///
+  /// The ref-qualifier is returned for C++ functions or methods. For other types
+  /// or non-C++ declarations, CXRefQualifier_None is returned.
+  int clang_Type_getCXXRefQualifier(
+    CXType T,
+  ) {
+    return (_clang_Type_getCXXRefQualifier ??= _dylib.lookupFunction<
+        _c_clang_Type_getCXXRefQualifier,
+        _dart_clang_Type_getCXXRefQualifier>('clang_Type_getCXXRefQualifier'))(
+      T,
+    );
+  }
+
+  _dart_clang_Type_getCXXRefQualifier? _clang_Type_getCXXRefQualifier;
+
+  /// Returns non-zero if the cursor specifies a Record member that is a
+  /// bitfield.
+  int clang_Cursor_isBitField(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_isBitField ??= _dylib.lookupFunction<
+        _c_clang_Cursor_isBitField,
+        _dart_clang_Cursor_isBitField>('clang_Cursor_isBitField'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_isBitField? _clang_Cursor_isBitField;
+
+  /// Returns 1 if the base class specified by the cursor with kind
+  /// CX_CXXBaseSpecifier is virtual.
+  int clang_isVirtualBase(
+    CXCursor arg0,
+  ) {
+    return (_clang_isVirtualBase ??= _dylib.lookupFunction<
+        _c_clang_isVirtualBase,
+        _dart_clang_isVirtualBase>('clang_isVirtualBase'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_isVirtualBase? _clang_isVirtualBase;
+
+  /// Returns the access control level for the referenced object.
+  ///
+  /// If the cursor refers to a C++ declaration, its access control level within its
+  /// parent scope is returned. Otherwise, if the cursor refers to a base specifier or
+  /// access specifier, the specifier itself is returned.
+  int clang_getCXXAccessSpecifier(
+    CXCursor arg0,
+  ) {
+    return (_clang_getCXXAccessSpecifier ??= _dylib.lookupFunction<
+        _c_clang_getCXXAccessSpecifier,
+        _dart_clang_getCXXAccessSpecifier>('clang_getCXXAccessSpecifier'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_getCXXAccessSpecifier? _clang_getCXXAccessSpecifier;
+
+  /// Returns the storage class for a function or variable declaration.
+  ///
+  /// If the passed in Cursor is not a function or variable declaration,
+  /// CX_SC_Invalid is returned else the storage class.
+  int clang_Cursor_getStorageClass(
+    CXCursor arg0,
+  ) {
+    return (_clang_Cursor_getStorageClass ??= _dylib.lookupFunction<
+        _c_clang_Cursor_getStorageClass,
+        _dart_clang_Cursor_getStorageClass>('clang_Cursor_getStorageClass'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_Cursor_getStorageClass? _clang_Cursor_getStorageClass;
+
+  /// Determine the number of overloaded declarations referenced by a
+  /// \c CXCursor_OverloadedDeclRef cursor.
+  ///
+  /// \param cursor The cursor whose overloaded declarations are being queried.
+  ///
+  /// \returns The number of overloaded declarations referenced by \c cursor. If it
+  /// is not a \c CXCursor_OverloadedDeclRef cursor, returns 0.
+  int clang_getNumOverloadedDecls(
+    CXCursor cursor,
+  ) {
+    return (_clang_getNumOverloadedDecls ??= _dylib.lookupFunction<
+        _c_clang_getNumOverloadedDecls,
+        _dart_clang_getNumOverloadedDecls>('clang_getNumOverloadedDecls'))(
+      cursor,
+    );
+  }
+
+  _dart_clang_getNumOverloadedDecls? _clang_getNumOverloadedDecls;
+
+  /// Retrieve a cursor for one of the overloaded declarations referenced
+  /// by a \c CXCursor_OverloadedDeclRef cursor.
+  ///
+  /// \param cursor The cursor whose overloaded declarations are being queried.
+  ///
+  /// \param index The zero-based index into the set of overloaded declarations in
+  /// the cursor.
+  ///
+  /// \returns A cursor representing the declaration referenced by the given
+  /// \c cursor at the specified \c index. If the cursor does not have an
+  /// associated set of overloaded declarations, or if the index is out of bounds,
+  /// returns \c clang_getNullCursor();
+  CXCursor clang_getOverloadedDecl(
+    CXCursor cursor,
+    int index,
+  ) {
+    return (_clang_getOverloadedDecl ??= _dylib.lookupFunction<
+        _c_clang_getOverloadedDecl,
+        _dart_clang_getOverloadedDecl>('clang_getOverloadedDecl'))(
+      cursor,
+      index,
+    );
+  }
+
+  _dart_clang_getOverloadedDecl? _clang_getOverloadedDecl;
+
+  /// For cursors representing an iboutletcollection attribute,
+  /// this function returns the collection element type.
+  CXType clang_getIBOutletCollectionType(
+    CXCursor arg0,
+  ) {
+    return (_clang_getIBOutletCollectionType ??= _dylib.lookupFunction<
+            _c_clang_getIBOutletCollectionType,
+            _dart_clang_getIBOutletCollectionType>(
+        'clang_getIBOutletCollectionType'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_getIBOutletCollectionType? _clang_getIBOutletCollectionType;
+
+  /// Visit the children of a particular cursor.
+  ///
+  /// This function visits all the direct children of the given cursor,
+  /// invoking the given \p visitor function with the cursors of each
+  /// visited child. The traversal may be recursive, if the visitor returns
+  /// \c CXChildVisit_Recurse. The traversal may also be ended prematurely, if
+  /// the visitor returns \c CXChildVisit_Break.
+  ///
+  /// \param parent the cursor whose child may be visited. All kinds of
+  /// cursors can be visited, including invalid cursors (which, by
+  /// definition, have no children).
+  ///
+  /// \param visitor the visitor function that will be invoked for each
+  /// child of \p parent.
+  ///
+  /// \param client_data pointer data supplied by the client, which will
+  /// be passed to the visitor each time it is invoked.
+  ///
+  /// \returns a non-zero value if the traversal was terminated
+  /// prematurely by the visitor returning \c CXChildVisit_Break.
+  int clang_visitChildren(
+    CXCursor parent,
+    ffi.Pointer<ffi.NativeFunction<CXCursorVisitor>> visitor,
+    ffi.Pointer<ffi.Void> client_data,
+  ) {
+    return (_clang_visitChildren ??= _dylib.lookupFunction<
+        _c_clang_visitChildren,
+        _dart_clang_visitChildren>('clang_visitChildren'))(
+      parent,
+      visitor,
+      client_data,
+    );
+  }
+
+  _dart_clang_visitChildren? _clang_visitChildren;
+
+  /// Retrieve a Unified Symbol Resolution (USR) for the entity referenced
+  /// by the given cursor.
+  ///
+  /// A Unified Symbol Resolution (USR) is a string that identifies a particular
+  /// entity (function, class, variable, etc.) within a program. USRs can be
+  /// compared across translation units to determine, e.g., when references in
+  /// one translation refer to an entity defined in another translation unit.
+  CXString clang_getCursorUSR(
+    CXCursor arg0,
+  ) {
+    return (_clang_getCursorUSR ??=
+        _dylib.lookupFunction<_c_clang_getCursorUSR, _dart_clang_getCursorUSR>(
+            'clang_getCursorUSR'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_getCursorUSR? _clang_getCursorUSR;
+
+  /// Construct a USR for a specified Objective-C class.
+  CXString clang_constructUSR_ObjCClass(
+    ffi.Pointer<ffi.Int8> class_name,
+  ) {
+    return (_clang_constructUSR_ObjCClass ??= _dylib.lookupFunction<
+        _c_clang_constructUSR_ObjCClass,
+        _dart_clang_constructUSR_ObjCClass>('clang_constructUSR_ObjCClass'))(
+      class_name,
+    );
+  }
+
+  _dart_clang_constructUSR_ObjCClass? _clang_constructUSR_ObjCClass;
+
+  /// Construct a USR for a specified Objective-C category.
+  CXString clang_constructUSR_ObjCCategory(
+    ffi.Pointer<ffi.Int8> class_name,
+    ffi.Pointer<ffi.Int8> category_name,
+  ) {
+    return (_clang_constructUSR_ObjCCategory ??= _dylib.lookupFunction<
+            _c_clang_constructUSR_ObjCCategory,
+            _dart_clang_constructUSR_ObjCCategory>(
+        'clang_constructUSR_ObjCCategory'))(
+      class_name,
+      category_name,
+    );
+  }
+
+  _dart_clang_constructUSR_ObjCCategory? _clang_constructUSR_ObjCCategory;
+
+  /// Construct a USR for a specified Objective-C protocol.
+  CXString clang_constructUSR_ObjCProtocol(
+    ffi.Pointer<ffi.Int8> protocol_name,
+  ) {
+    return (_clang_constructUSR_ObjCProtocol ??= _dylib.lookupFunction<
+            _c_clang_constructUSR_ObjCProtocol,
+            _dart_clang_constructUSR_ObjCProtocol>(
+        'clang_constructUSR_ObjCProtocol'))(
+      protocol_name,
+    );
+  }
+
+  _dart_clang_constructUSR_ObjCProtocol? _clang_constructUSR_ObjCProtocol;
+
+  /// Construct a USR for a specified Objective-C instance variable and
+  /// the USR for its containing class.
+  CXString clang_constructUSR_ObjCIvar(
+    ffi.Pointer<ffi.Int8> name,
+    CXString classUSR,
+  ) {
+    return (_clang_constructUSR_ObjCIvar ??= _dylib.lookupFunction<
+        _c_clang_constructUSR_ObjCIvar,
+        _dart_clang_constructUSR_ObjCIvar>('clang_constructUSR_ObjCIvar'))(
+      name,
+      classUSR,
+    );
+  }
+
+  _dart_clang_constructUSR_ObjCIvar? _clang_constructUSR_ObjCIvar;
+
+  /// Construct a USR for a specified Objective-C method and
+  /// the USR for its containing class.
+  CXString clang_constructUSR_ObjCMethod(
+    ffi.Pointer<ffi.Int8> name,
+    int isInstanceMethod,
+    CXString classUSR,
+  ) {
+    return (_clang_constructUSR_ObjCMethod ??= _dylib.lookupFunction<
+        _c_clang_constructUSR_ObjCMethod,
+        _dart_clang_constructUSR_ObjCMethod>('clang_constructUSR_ObjCMethod'))(
+      name,
+      isInstanceMethod,
+      classUSR,
+    );
+  }
+
+  _dart_clang_constructUSR_ObjCMethod? _clang_constructUSR_ObjCMethod;
+
+  /// Construct a USR for a specified Objective-C property and the USR
+  /// for its containing class.
+  CXString clang_constructUSR_ObjCProperty(
+    ffi.Pointer<ffi.Int8> property,
+    CXString classUSR,
+  ) {
+    return (_clang_constructUSR_ObjCProperty ??= _dylib.lookupFunction<
+            _c_clang_constructUSR_ObjCProperty,
+            _dart_clang_constructUSR_ObjCProperty>(
+        'clang_constructUSR_ObjCProperty'))(
+      property,
+      classUSR,
+    );
+  }
+
+  _dart_clang_constructUSR_ObjCProperty? _clang_constructUSR_ObjCProperty;
+
+  /// Retrieve a name for the entity referenced by this cursor.
+  CXString clang_getCursorSpelling(
+    CXCursor arg0,
+  ) {
+    return (_clang_getCursorSpelling ??= _dylib.lookupFunction<
+        _c_clang_getCursorSpelling,
+        _dart_clang_getCursorSpelling>('clang_getCursorSpelling'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_getCursorSpelling? _clang_getCursorSpelling;
+
+  /// Retrieve a range for a piece that forms the cursors spelling name.
+  /// Most of the times there is only one range for the complete spelling but for
+  /// Objective-C methods and Objective-C message expressions, there are multiple
+  /// pieces for each selector identifier.
+  ///
+  /// \param pieceIndex the index of the spelling name piece. If this is greater
+  /// than the actual number of pieces, it will return a NULL (invalid) range.
+  ///
+  /// \param options Reserved.
+  CXSourceRange clang_Cursor_getSpellingNameRange(
+    CXCursor arg0,
+    int pieceIndex,
+    int options,
+  ) {
+    return (_clang_Cursor_getSpellingNameRange ??= _dylib.lookupFunction<
+            _c_clang_Cursor_getSpellingNameRange,
+            _dart_clang_Cursor_getSpellingNameRange>(
+        'clang_Cursor_getSpellingNameRange'))(
+      arg0,
+      pieceIndex,
+      options,
+    );
+  }
+
+  _dart_clang_Cursor_getSpellingNameRange? _clang_Cursor_getSpellingNameRange;
+
   /// Get a property value for the given printing policy.
   int clang_PrintingPolicy_getProperty(
     ffi.Pointer<ffi.Void> Policy,
@@ -1235,6 +3812,22 @@
 
   _dart_clang_PrintingPolicy_setProperty? _clang_PrintingPolicy_setProperty;
 
+  /// Retrieve the default policy for the cursor.
+  ///
+  /// The policy should be released after use with \c
+  /// clang_PrintingPolicy_dispose.
+  ffi.Pointer<ffi.Void> clang_getCursorPrintingPolicy(
+    CXCursor arg0,
+  ) {
+    return (_clang_getCursorPrintingPolicy ??= _dylib.lookupFunction<
+        _c_clang_getCursorPrintingPolicy,
+        _dart_clang_getCursorPrintingPolicy>('clang_getCursorPrintingPolicy'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_getCursorPrintingPolicy? _clang_getCursorPrintingPolicy;
+
   /// Release a printing policy.
   void clang_PrintingPolicy_dispose(
     ffi.Pointer<ffi.Void> Policy,
@@ -1248,6 +3841,437 @@
 
   _dart_clang_PrintingPolicy_dispose? _clang_PrintingPolicy_dispose;
 
+  /// Pretty print declarations.
+  ///
+  /// \param Cursor The cursor representing a declaration.
+  ///
+  /// \param Policy The policy to control the entities being printed. If
+  /// NULL, a default policy is used.
+  ///
+  /// \returns The pretty printed declaration or the empty string for
+  /// other cursors.
+  CXString clang_getCursorPrettyPrinted(
+    CXCursor Cursor,
+    ffi.Pointer<ffi.Void> Policy,
+  ) {
+    return (_clang_getCursorPrettyPrinted ??= _dylib.lookupFunction<
+        _c_clang_getCursorPrettyPrinted,
+        _dart_clang_getCursorPrettyPrinted>('clang_getCursorPrettyPrinted'))(
+      Cursor,
+      Policy,
+    );
+  }
+
+  _dart_clang_getCursorPrettyPrinted? _clang_getCursorPrettyPrinted;
+
+  /// Retrieve the display name for the entity referenced by this cursor.
+  ///
+  /// The display name contains extra information that helps identify the cursor,
+  /// such as the parameters of a function or template or the arguments of a
+  /// class template specialization.
+  CXString clang_getCursorDisplayName(
+    CXCursor arg0,
+  ) {
+    return (_clang_getCursorDisplayName ??= _dylib.lookupFunction<
+        _c_clang_getCursorDisplayName,
+        _dart_clang_getCursorDisplayName>('clang_getCursorDisplayName'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_getCursorDisplayName? _clang_getCursorDisplayName;
+
+  /// For a cursor that is a reference, retrieve a cursor representing the
+  /// entity that it references.
+  ///
+  /// Reference cursors refer to other entities in the AST. For example, an
+  /// Objective-C superclass reference cursor refers to an Objective-C class.
+  /// This function produces the cursor for the Objective-C class from the
+  /// cursor for the superclass reference. If the input cursor is a declaration or
+  /// definition, it returns that declaration or definition unchanged.
+  /// Otherwise, returns the NULL cursor.
+  CXCursor clang_getCursorReferenced(
+    CXCursor arg0,
+  ) {
+    return (_clang_getCursorReferenced ??= _dylib.lookupFunction<
+        _c_clang_getCursorReferenced,
+        _dart_clang_getCursorReferenced>('clang_getCursorReferenced'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_getCursorReferenced? _clang_getCursorReferenced;
+
+  /// For a cursor that is either a reference to or a declaration
+  /// of some entity, retrieve a cursor that describes the definition of
+  /// that entity.
+  ///
+  /// Some entities can be declared multiple times within a translation
+  /// unit, but only one of those declarations can also be a
+  /// definition. For example, given:
+  ///
+  /// \code
+  /// int f(int, int);
+  /// int g(int x, int y) { return f(x, y); }
+  /// int f(int a, int b) { return a + b; }
+  /// int f(int, int);
+  /// \endcode
+  ///
+  /// there are three declarations of the function "f", but only the
+  /// second one is a definition. The clang_getCursorDefinition()
+  /// function will take any cursor pointing to a declaration of "f"
+  /// (the first or fourth lines of the example) or a cursor referenced
+  /// that uses "f" (the call to "f' inside "g") and will return a
+  /// declaration cursor pointing to the definition (the second "f"
+  /// declaration).
+  ///
+  /// If given a cursor for which there is no corresponding definition,
+  /// e.g., because there is no definition of that entity within this
+  /// translation unit, returns a NULL cursor.
+  CXCursor clang_getCursorDefinition(
+    CXCursor arg0,
+  ) {
+    return (_clang_getCursorDefinition ??= _dylib.lookupFunction<
+        _c_clang_getCursorDefinition,
+        _dart_clang_getCursorDefinition>('clang_getCursorDefinition'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_getCursorDefinition? _clang_getCursorDefinition;
+
+  /// Determine whether the declaration pointed to by this cursor
+  /// is also a definition of that entity.
+  int clang_isCursorDefinition(
+    CXCursor arg0,
+  ) {
+    return (_clang_isCursorDefinition ??= _dylib.lookupFunction<
+        _c_clang_isCursorDefinition,
+        _dart_clang_isCursorDefinition>('clang_isCursorDefinition'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_isCursorDefinition? _clang_isCursorDefinition;
+
+  /// Retrieve the canonical cursor corresponding to the given cursor.
+  ///
+  /// In the C family of languages, many kinds of entities can be declared several
+  /// times within a single translation unit. For example, a structure type can
+  /// be forward-declared (possibly multiple times) and later defined:
+  ///
+  /// \code
+  /// struct X;
+  /// struct X;
+  /// struct X {
+  /// int member;
+  /// };
+  /// \endcode
+  ///
+  /// The declarations and the definition of \c X are represented by three
+  /// different cursors, all of which are declarations of the same underlying
+  /// entity. One of these cursor is considered the "canonical" cursor, which
+  /// is effectively the representative for the underlying entity. One can
+  /// determine if two cursors are declarations of the same underlying entity by
+  /// comparing their canonical cursors.
+  ///
+  /// \returns The canonical cursor for the entity referred to by the given cursor.
+  CXCursor clang_getCanonicalCursor(
+    CXCursor arg0,
+  ) {
+    return (_clang_getCanonicalCursor ??= _dylib.lookupFunction<
+        _c_clang_getCanonicalCursor,
+        _dart_clang_getCanonicalCursor>('clang_getCanonicalCursor'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_getCanonicalCursor? _clang_getCanonicalCursor;
+
+  /// If the cursor points to a selector identifier in an Objective-C
+  /// method or message expression, this returns the selector index.
+  ///
+  /// After getting a cursor with #clang_getCursor, this can be called to
+  /// determine if the location points to a selector identifier.
+  ///
+  /// \returns The selector index if the cursor is an Objective-C method or message
+  /// expression and the cursor is pointing to a selector identifier, or -1
+  /// otherwise.
+  int clang_Cursor_getObjCSelectorIndex(
+    CXCursor arg0,
+  ) {
+    return (_clang_Cursor_getObjCSelectorIndex ??= _dylib.lookupFunction<
+            _c_clang_Cursor_getObjCSelectorIndex,
+            _dart_clang_Cursor_getObjCSelectorIndex>(
+        'clang_Cursor_getObjCSelectorIndex'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_Cursor_getObjCSelectorIndex? _clang_Cursor_getObjCSelectorIndex;
+
+  /// Given a cursor pointing to a C++ method call or an Objective-C
+  /// message, returns non-zero if the method/message is "dynamic", meaning:
+  ///
+  /// For a C++ method: the call is virtual.
+  /// For an Objective-C message: the receiver is an object instance, not 'super'
+  /// or a specific class.
+  ///
+  /// If the method/message is "static" or the cursor does not point to a
+  /// method/message, it will return zero.
+  int clang_Cursor_isDynamicCall(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_isDynamicCall ??= _dylib.lookupFunction<
+        _c_clang_Cursor_isDynamicCall,
+        _dart_clang_Cursor_isDynamicCall>('clang_Cursor_isDynamicCall'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_isDynamicCall? _clang_Cursor_isDynamicCall;
+
+  /// Given a cursor pointing to an Objective-C message or property
+  /// reference, or C++ method call, returns the CXType of the receiver.
+  CXType clang_Cursor_getReceiverType(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_getReceiverType ??= _dylib.lookupFunction<
+        _c_clang_Cursor_getReceiverType,
+        _dart_clang_Cursor_getReceiverType>('clang_Cursor_getReceiverType'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_getReceiverType? _clang_Cursor_getReceiverType;
+
+  /// Given a cursor that represents a property declaration, return the
+  /// associated property attributes. The bits are formed from
+  /// \c CXObjCPropertyAttrKind.
+  ///
+  /// \param reserved Reserved for future use, pass 0.
+  int clang_Cursor_getObjCPropertyAttributes(
+    CXCursor C,
+    int reserved,
+  ) {
+    return (_clang_Cursor_getObjCPropertyAttributes ??= _dylib.lookupFunction<
+            _c_clang_Cursor_getObjCPropertyAttributes,
+            _dart_clang_Cursor_getObjCPropertyAttributes>(
+        'clang_Cursor_getObjCPropertyAttributes'))(
+      C,
+      reserved,
+    );
+  }
+
+  _dart_clang_Cursor_getObjCPropertyAttributes?
+      _clang_Cursor_getObjCPropertyAttributes;
+
+  /// Given a cursor that represents a property declaration, return the
+  /// name of the method that implements the getter.
+  CXString clang_Cursor_getObjCPropertyGetterName(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_getObjCPropertyGetterName ??= _dylib.lookupFunction<
+            _c_clang_Cursor_getObjCPropertyGetterName,
+            _dart_clang_Cursor_getObjCPropertyGetterName>(
+        'clang_Cursor_getObjCPropertyGetterName'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_getObjCPropertyGetterName?
+      _clang_Cursor_getObjCPropertyGetterName;
+
+  /// Given a cursor that represents a property declaration, return the
+  /// name of the method that implements the setter, if any.
+  CXString clang_Cursor_getObjCPropertySetterName(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_getObjCPropertySetterName ??= _dylib.lookupFunction<
+            _c_clang_Cursor_getObjCPropertySetterName,
+            _dart_clang_Cursor_getObjCPropertySetterName>(
+        'clang_Cursor_getObjCPropertySetterName'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_getObjCPropertySetterName?
+      _clang_Cursor_getObjCPropertySetterName;
+
+  /// Given a cursor that represents an Objective-C method or parameter
+  /// declaration, return the associated Objective-C qualifiers for the return
+  /// type or the parameter respectively. The bits are formed from
+  /// CXObjCDeclQualifierKind.
+  int clang_Cursor_getObjCDeclQualifiers(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_getObjCDeclQualifiers ??= _dylib.lookupFunction<
+            _c_clang_Cursor_getObjCDeclQualifiers,
+            _dart_clang_Cursor_getObjCDeclQualifiers>(
+        'clang_Cursor_getObjCDeclQualifiers'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_getObjCDeclQualifiers? _clang_Cursor_getObjCDeclQualifiers;
+
+  /// Given a cursor that represents an Objective-C method or property
+  /// declaration, return non-zero if the declaration was affected by "\@optional".
+  /// Returns zero if the cursor is not such a declaration or it is "\@required".
+  int clang_Cursor_isObjCOptional(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_isObjCOptional ??= _dylib.lookupFunction<
+        _c_clang_Cursor_isObjCOptional,
+        _dart_clang_Cursor_isObjCOptional>('clang_Cursor_isObjCOptional'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_isObjCOptional? _clang_Cursor_isObjCOptional;
+
+  /// Returns non-zero if the given cursor is a variadic function or method.
+  int clang_Cursor_isVariadic(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_isVariadic ??= _dylib.lookupFunction<
+        _c_clang_Cursor_isVariadic,
+        _dart_clang_Cursor_isVariadic>('clang_Cursor_isVariadic'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_isVariadic? _clang_Cursor_isVariadic;
+
+  /// Returns non-zero if the given cursor points to a symbol marked with
+  /// external_source_symbol attribute.
+  ///
+  /// \param language If non-NULL, and the attribute is present, will be set to
+  /// the 'language' string from the attribute.
+  ///
+  /// \param definedIn If non-NULL, and the attribute is present, will be set to
+  /// the 'definedIn' string from the attribute.
+  ///
+  /// \param isGenerated If non-NULL, and the attribute is present, will be set to
+  /// non-zero if the 'generated_declaration' is set in the attribute.
+  int clang_Cursor_isExternalSymbol(
+    CXCursor C,
+    ffi.Pointer<CXString> language,
+    ffi.Pointer<CXString> definedIn,
+    ffi.Pointer<ffi.Uint32> isGenerated,
+  ) {
+    return (_clang_Cursor_isExternalSymbol ??= _dylib.lookupFunction<
+        _c_clang_Cursor_isExternalSymbol,
+        _dart_clang_Cursor_isExternalSymbol>('clang_Cursor_isExternalSymbol'))(
+      C,
+      language,
+      definedIn,
+      isGenerated,
+    );
+  }
+
+  _dart_clang_Cursor_isExternalSymbol? _clang_Cursor_isExternalSymbol;
+
+  /// Given a cursor that represents a declaration, return the associated
+  /// comment's source range.  The range may include multiple consecutive comments
+  /// with whitespace in between.
+  CXSourceRange clang_Cursor_getCommentRange(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_getCommentRange ??= _dylib.lookupFunction<
+        _c_clang_Cursor_getCommentRange,
+        _dart_clang_Cursor_getCommentRange>('clang_Cursor_getCommentRange'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_getCommentRange? _clang_Cursor_getCommentRange;
+
+  /// Given a cursor that represents a declaration, return the associated
+  /// comment text, including comment markers.
+  CXString clang_Cursor_getRawCommentText(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_getRawCommentText ??= _dylib.lookupFunction<
+            _c_clang_Cursor_getRawCommentText,
+            _dart_clang_Cursor_getRawCommentText>(
+        'clang_Cursor_getRawCommentText'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_getRawCommentText? _clang_Cursor_getRawCommentText;
+
+  /// Given a cursor that represents a documentable entity (e.g.,
+  /// declaration), return the associated \paragraph; otherwise return the
+  /// first paragraph.
+  CXString clang_Cursor_getBriefCommentText(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_getBriefCommentText ??= _dylib.lookupFunction<
+            _c_clang_Cursor_getBriefCommentText,
+            _dart_clang_Cursor_getBriefCommentText>(
+        'clang_Cursor_getBriefCommentText'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_getBriefCommentText? _clang_Cursor_getBriefCommentText;
+
+  /// Retrieve the CXString representing the mangled name of the cursor.
+  CXString clang_Cursor_getMangling(
+    CXCursor arg0,
+  ) {
+    return (_clang_Cursor_getMangling ??= _dylib.lookupFunction<
+        _c_clang_Cursor_getMangling,
+        _dart_clang_Cursor_getMangling>('clang_Cursor_getMangling'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_Cursor_getMangling? _clang_Cursor_getMangling;
+
+  /// Retrieve the CXStrings representing the mangled symbols of the C++
+  /// constructor or destructor at the cursor.
+  ffi.Pointer<CXStringSet> clang_Cursor_getCXXManglings(
+    CXCursor arg0,
+  ) {
+    return (_clang_Cursor_getCXXManglings ??= _dylib.lookupFunction<
+        _c_clang_Cursor_getCXXManglings,
+        _dart_clang_Cursor_getCXXManglings>('clang_Cursor_getCXXManglings'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_Cursor_getCXXManglings? _clang_Cursor_getCXXManglings;
+
+  /// Retrieve the CXStrings representing the mangled symbols of the ObjC
+  /// class interface or implementation at the cursor.
+  ffi.Pointer<CXStringSet> clang_Cursor_getObjCManglings(
+    CXCursor arg0,
+  ) {
+    return (_clang_Cursor_getObjCManglings ??= _dylib.lookupFunction<
+        _c_clang_Cursor_getObjCManglings,
+        _dart_clang_Cursor_getObjCManglings>('clang_Cursor_getObjCManglings'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_Cursor_getObjCManglings? _clang_Cursor_getObjCManglings;
+
+  /// Given a CXCursor_ModuleImportDecl cursor, return the associated module.
+  ffi.Pointer<ffi.Void> clang_Cursor_getModule(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_getModule ??= _dylib.lookupFunction<
+        _c_clang_Cursor_getModule,
+        _dart_clang_Cursor_getModule>('clang_Cursor_getModule'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_getModule? _clang_Cursor_getModule;
+
   /// Given a CXFile header file, return the module that contains it, if one
   /// exists.
   ffi.Pointer<ffi.Void> clang_getModuleForFile(
@@ -1297,6 +4321,37 @@
 
   /// \param Module a module object.
   ///
+  /// \returns the name of the module, e.g. for the 'std.vector' sub-module it
+  /// will return "vector".
+  CXString clang_Module_getName(
+    ffi.Pointer<ffi.Void> Module,
+  ) {
+    return (_clang_Module_getName ??= _dylib.lookupFunction<
+        _c_clang_Module_getName,
+        _dart_clang_Module_getName>('clang_Module_getName'))(
+      Module,
+    );
+  }
+
+  _dart_clang_Module_getName? _clang_Module_getName;
+
+  /// \param Module a module object.
+  ///
+  /// \returns the full name of the module, e.g. "std.vector".
+  CXString clang_Module_getFullName(
+    ffi.Pointer<ffi.Void> Module,
+  ) {
+    return (_clang_Module_getFullName ??= _dylib.lookupFunction<
+        _c_clang_Module_getFullName,
+        _dart_clang_Module_getFullName>('clang_Module_getFullName'))(
+      Module,
+    );
+  }
+
+  _dart_clang_Module_getFullName? _clang_Module_getFullName;
+
+  /// \param Module a module object.
+  ///
   /// \returns non-zero if the module is a system one.
   int clang_Module_isSystem(
     ffi.Pointer<ffi.Void> Module,
@@ -1350,6 +4405,391 @@
 
   _dart_clang_Module_getTopLevelHeader? _clang_Module_getTopLevelHeader;
 
+  /// Determine if a C++ constructor is a converting constructor.
+  int clang_CXXConstructor_isConvertingConstructor(
+    CXCursor C,
+  ) {
+    return (_clang_CXXConstructor_isConvertingConstructor ??=
+        _dylib.lookupFunction<_c_clang_CXXConstructor_isConvertingConstructor,
+                _dart_clang_CXXConstructor_isConvertingConstructor>(
+            'clang_CXXConstructor_isConvertingConstructor'))(
+      C,
+    );
+  }
+
+  _dart_clang_CXXConstructor_isConvertingConstructor?
+      _clang_CXXConstructor_isConvertingConstructor;
+
+  /// Determine if a C++ constructor is a copy constructor.
+  int clang_CXXConstructor_isCopyConstructor(
+    CXCursor C,
+  ) {
+    return (_clang_CXXConstructor_isCopyConstructor ??= _dylib.lookupFunction<
+            _c_clang_CXXConstructor_isCopyConstructor,
+            _dart_clang_CXXConstructor_isCopyConstructor>(
+        'clang_CXXConstructor_isCopyConstructor'))(
+      C,
+    );
+  }
+
+  _dart_clang_CXXConstructor_isCopyConstructor?
+      _clang_CXXConstructor_isCopyConstructor;
+
+  /// Determine if a C++ constructor is the default constructor.
+  int clang_CXXConstructor_isDefaultConstructor(
+    CXCursor C,
+  ) {
+    return (_clang_CXXConstructor_isDefaultConstructor ??=
+        _dylib.lookupFunction<_c_clang_CXXConstructor_isDefaultConstructor,
+                _dart_clang_CXXConstructor_isDefaultConstructor>(
+            'clang_CXXConstructor_isDefaultConstructor'))(
+      C,
+    );
+  }
+
+  _dart_clang_CXXConstructor_isDefaultConstructor?
+      _clang_CXXConstructor_isDefaultConstructor;
+
+  /// Determine if a C++ constructor is a move constructor.
+  int clang_CXXConstructor_isMoveConstructor(
+    CXCursor C,
+  ) {
+    return (_clang_CXXConstructor_isMoveConstructor ??= _dylib.lookupFunction<
+            _c_clang_CXXConstructor_isMoveConstructor,
+            _dart_clang_CXXConstructor_isMoveConstructor>(
+        'clang_CXXConstructor_isMoveConstructor'))(
+      C,
+    );
+  }
+
+  _dart_clang_CXXConstructor_isMoveConstructor?
+      _clang_CXXConstructor_isMoveConstructor;
+
+  /// Determine if a C++ field is declared 'mutable'.
+  int clang_CXXField_isMutable(
+    CXCursor C,
+  ) {
+    return (_clang_CXXField_isMutable ??= _dylib.lookupFunction<
+        _c_clang_CXXField_isMutable,
+        _dart_clang_CXXField_isMutable>('clang_CXXField_isMutable'))(
+      C,
+    );
+  }
+
+  _dart_clang_CXXField_isMutable? _clang_CXXField_isMutable;
+
+  /// Determine if a C++ method is declared '= default'.
+  int clang_CXXMethod_isDefaulted(
+    CXCursor C,
+  ) {
+    return (_clang_CXXMethod_isDefaulted ??= _dylib.lookupFunction<
+        _c_clang_CXXMethod_isDefaulted,
+        _dart_clang_CXXMethod_isDefaulted>('clang_CXXMethod_isDefaulted'))(
+      C,
+    );
+  }
+
+  _dart_clang_CXXMethod_isDefaulted? _clang_CXXMethod_isDefaulted;
+
+  /// Determine if a C++ member function or member function template is
+  /// pure virtual.
+  int clang_CXXMethod_isPureVirtual(
+    CXCursor C,
+  ) {
+    return (_clang_CXXMethod_isPureVirtual ??= _dylib.lookupFunction<
+        _c_clang_CXXMethod_isPureVirtual,
+        _dart_clang_CXXMethod_isPureVirtual>('clang_CXXMethod_isPureVirtual'))(
+      C,
+    );
+  }
+
+  _dart_clang_CXXMethod_isPureVirtual? _clang_CXXMethod_isPureVirtual;
+
+  /// Determine if a C++ member function or member function template is
+  /// declared 'static'.
+  int clang_CXXMethod_isStatic(
+    CXCursor C,
+  ) {
+    return (_clang_CXXMethod_isStatic ??= _dylib.lookupFunction<
+        _c_clang_CXXMethod_isStatic,
+        _dart_clang_CXXMethod_isStatic>('clang_CXXMethod_isStatic'))(
+      C,
+    );
+  }
+
+  _dart_clang_CXXMethod_isStatic? _clang_CXXMethod_isStatic;
+
+  /// Determine if a C++ member function or member function template is
+  /// explicitly declared 'virtual' or if it overrides a virtual method from
+  /// one of the base classes.
+  int clang_CXXMethod_isVirtual(
+    CXCursor C,
+  ) {
+    return (_clang_CXXMethod_isVirtual ??= _dylib.lookupFunction<
+        _c_clang_CXXMethod_isVirtual,
+        _dart_clang_CXXMethod_isVirtual>('clang_CXXMethod_isVirtual'))(
+      C,
+    );
+  }
+
+  _dart_clang_CXXMethod_isVirtual? _clang_CXXMethod_isVirtual;
+
+  /// Determine if a C++ record is abstract, i.e. whether a class or struct
+  /// has a pure virtual member function.
+  int clang_CXXRecord_isAbstract(
+    CXCursor C,
+  ) {
+    return (_clang_CXXRecord_isAbstract ??= _dylib.lookupFunction<
+        _c_clang_CXXRecord_isAbstract,
+        _dart_clang_CXXRecord_isAbstract>('clang_CXXRecord_isAbstract'))(
+      C,
+    );
+  }
+
+  _dart_clang_CXXRecord_isAbstract? _clang_CXXRecord_isAbstract;
+
+  /// Determine if an enum declaration refers to a scoped enum.
+  int clang_EnumDecl_isScoped(
+    CXCursor C,
+  ) {
+    return (_clang_EnumDecl_isScoped ??= _dylib.lookupFunction<
+        _c_clang_EnumDecl_isScoped,
+        _dart_clang_EnumDecl_isScoped>('clang_EnumDecl_isScoped'))(
+      C,
+    );
+  }
+
+  _dart_clang_EnumDecl_isScoped? _clang_EnumDecl_isScoped;
+
+  /// Determine if a C++ member function or member function template is
+  /// declared 'const'.
+  int clang_CXXMethod_isConst(
+    CXCursor C,
+  ) {
+    return (_clang_CXXMethod_isConst ??= _dylib.lookupFunction<
+        _c_clang_CXXMethod_isConst,
+        _dart_clang_CXXMethod_isConst>('clang_CXXMethod_isConst'))(
+      C,
+    );
+  }
+
+  _dart_clang_CXXMethod_isConst? _clang_CXXMethod_isConst;
+
+  /// Given a cursor that represents a template, determine
+  /// the cursor kind of the specializations would be generated by instantiating
+  /// the template.
+  ///
+  /// This routine can be used to determine what flavor of function template,
+  /// class template, or class template partial specialization is stored in the
+  /// cursor. For example, it can describe whether a class template cursor is
+  /// declared with "struct", "class" or "union".
+  ///
+  /// \param C The cursor to query. This cursor should represent a template
+  /// declaration.
+  ///
+  /// \returns The cursor kind of the specializations that would be generated
+  /// by instantiating the template \p C. If \p C is not a template, returns
+  /// \c CXCursor_NoDeclFound.
+  int clang_getTemplateCursorKind(
+    CXCursor C,
+  ) {
+    return (_clang_getTemplateCursorKind ??= _dylib.lookupFunction<
+        _c_clang_getTemplateCursorKind,
+        _dart_clang_getTemplateCursorKind>('clang_getTemplateCursorKind'))(
+      C,
+    );
+  }
+
+  _dart_clang_getTemplateCursorKind? _clang_getTemplateCursorKind;
+
+  /// Given a cursor that may represent a specialization or instantiation
+  /// of a template, retrieve the cursor that represents the template that it
+  /// specializes or from which it was instantiated.
+  ///
+  /// This routine determines the template involved both for explicit
+  /// specializations of templates and for implicit instantiations of the template,
+  /// both of which are referred to as "specializations". For a class template
+  /// specialization (e.g., \c std::vector<bool>), this routine will return
+  /// either the primary template (\c std::vector) or, if the specialization was
+  /// instantiated from a class template partial specialization, the class template
+  /// partial specialization. For a class template partial specialization and a
+  /// function template specialization (including instantiations), this
+  /// this routine will return the specialized template.
+  ///
+  /// For members of a class template (e.g., member functions, member classes, or
+  /// static data members), returns the specialized or instantiated member.
+  /// Although not strictly "templates" in the C++ language, members of class
+  /// templates have the same notions of specializations and instantiations that
+  /// templates do, so this routine treats them similarly.
+  ///
+  /// \param C A cursor that may be a specialization of a template or a member
+  /// of a template.
+  ///
+  /// \returns If the given cursor is a specialization or instantiation of a
+  /// template or a member thereof, the template or member that it specializes or
+  /// from which it was instantiated. Otherwise, returns a NULL cursor.
+  CXCursor clang_getSpecializedCursorTemplate(
+    CXCursor C,
+  ) {
+    return (_clang_getSpecializedCursorTemplate ??= _dylib.lookupFunction<
+            _c_clang_getSpecializedCursorTemplate,
+            _dart_clang_getSpecializedCursorTemplate>(
+        'clang_getSpecializedCursorTemplate'))(
+      C,
+    );
+  }
+
+  _dart_clang_getSpecializedCursorTemplate? _clang_getSpecializedCursorTemplate;
+
+  /// Given a cursor that references something else, return the source range
+  /// covering that reference.
+  ///
+  /// \param C A cursor pointing to a member reference, a declaration reference, or
+  /// an operator call.
+  /// \param NameFlags A bitset with three independent flags:
+  /// CXNameRange_WantQualifier, CXNameRange_WantTemplateArgs, and
+  /// CXNameRange_WantSinglePiece.
+  /// \param PieceIndex For contiguous names or when passing the flag
+  /// CXNameRange_WantSinglePiece, only one piece with index 0 is
+  /// available. When the CXNameRange_WantSinglePiece flag is not passed for a
+  /// non-contiguous names, this index can be used to retrieve the individual
+  /// pieces of the name. See also CXNameRange_WantSinglePiece.
+  ///
+  /// \returns The piece of the name pointed to by the given cursor. If there is no
+  /// name, or if the PieceIndex is out-of-range, a null-cursor will be returned.
+  CXSourceRange clang_getCursorReferenceNameRange(
+    CXCursor C,
+    int NameFlags,
+    int PieceIndex,
+  ) {
+    return (_clang_getCursorReferenceNameRange ??= _dylib.lookupFunction<
+            _c_clang_getCursorReferenceNameRange,
+            _dart_clang_getCursorReferenceNameRange>(
+        'clang_getCursorReferenceNameRange'))(
+      C,
+      NameFlags,
+      PieceIndex,
+    );
+  }
+
+  _dart_clang_getCursorReferenceNameRange? _clang_getCursorReferenceNameRange;
+
+  /// Get the raw lexical token starting with the given location.
+  ///
+  /// \param TU the translation unit whose text is being tokenized.
+  ///
+  /// \param Location the source location with which the token starts.
+  ///
+  /// \returns The token starting with the given location or NULL if no such token
+  /// exist. The returned pointer must be freed with clang_disposeTokens before the
+  /// translation unit is destroyed.
+  ffi.Pointer<CXToken> clang_getToken(
+    ffi.Pointer<CXTranslationUnitImpl> TU,
+    CXSourceLocation Location,
+  ) {
+    return (_clang_getToken ??=
+        _dylib.lookupFunction<_c_clang_getToken, _dart_clang_getToken>(
+            'clang_getToken'))(
+      TU,
+      Location,
+    );
+  }
+
+  _dart_clang_getToken? _clang_getToken;
+
+  /// Determine the kind of the given token.
+  int clang_getTokenKind(
+    CXToken arg0,
+  ) {
+    return (_clang_getTokenKind ??=
+        _dylib.lookupFunction<_c_clang_getTokenKind, _dart_clang_getTokenKind>(
+            'clang_getTokenKind'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_getTokenKind? _clang_getTokenKind;
+
+  /// Determine the spelling of the given token.
+  ///
+  /// The spelling of a token is the textual representation of that token, e.g.,
+  /// the text of an identifier or keyword.
+  CXString clang_getTokenSpelling(
+    ffi.Pointer<CXTranslationUnitImpl> arg0,
+    CXToken arg1,
+  ) {
+    return (_clang_getTokenSpelling ??= _dylib.lookupFunction<
+        _c_clang_getTokenSpelling,
+        _dart_clang_getTokenSpelling>('clang_getTokenSpelling'))(
+      arg0,
+      arg1,
+    );
+  }
+
+  _dart_clang_getTokenSpelling? _clang_getTokenSpelling;
+
+  /// Retrieve the source location of the given token.
+  CXSourceLocation clang_getTokenLocation(
+    ffi.Pointer<CXTranslationUnitImpl> arg0,
+    CXToken arg1,
+  ) {
+    return (_clang_getTokenLocation ??= _dylib.lookupFunction<
+        _c_clang_getTokenLocation,
+        _dart_clang_getTokenLocation>('clang_getTokenLocation'))(
+      arg0,
+      arg1,
+    );
+  }
+
+  _dart_clang_getTokenLocation? _clang_getTokenLocation;
+
+  /// Retrieve a source range that covers the given token.
+  CXSourceRange clang_getTokenExtent(
+    ffi.Pointer<CXTranslationUnitImpl> arg0,
+    CXToken arg1,
+  ) {
+    return (_clang_getTokenExtent ??= _dylib.lookupFunction<
+        _c_clang_getTokenExtent,
+        _dart_clang_getTokenExtent>('clang_getTokenExtent'))(
+      arg0,
+      arg1,
+    );
+  }
+
+  _dart_clang_getTokenExtent? _clang_getTokenExtent;
+
+  /// Tokenize the source code described by the given range into raw
+  /// lexical tokens.
+  ///
+  /// \param TU the translation unit whose text is being tokenized.
+  ///
+  /// \param Range the source range in which text should be tokenized. All of the
+  /// tokens produced by tokenization will fall within this source range,
+  ///
+  /// \param Tokens this pointer will be set to point to the array of tokens
+  /// that occur within the given source range. The returned pointer must be
+  /// freed with clang_disposeTokens() before the translation unit is destroyed.
+  ///
+  /// \param NumTokens will be set to the number of tokens in the \c *Tokens
+  /// array.
+  void clang_tokenize(
+    ffi.Pointer<CXTranslationUnitImpl> TU,
+    CXSourceRange Range,
+    ffi.Pointer<ffi.Pointer<CXToken>> Tokens,
+    ffi.Pointer<ffi.Uint32> NumTokens,
+  ) {
+    return (_clang_tokenize ??=
+        _dylib.lookupFunction<_c_clang_tokenize, _dart_clang_tokenize>(
+            'clang_tokenize'))(
+      TU,
+      Range,
+      Tokens,
+      NumTokens,
+    );
+  }
+
+  _dart_clang_tokenize? _clang_tokenize;
+
   /// Annotate the given set of tokens by providing cursors for each token
   /// that can be mapped to a specific entity within the abstract syntax tree.
   ///
@@ -1413,6 +4853,50 @@
 
   _dart_clang_disposeTokens? _clang_disposeTokens;
 
+  /// \defgroup CINDEX_DEBUG Debugging facilities
+  ///
+  /// These routines are used for testing and debugging, only, and should not
+  /// be relied upon.
+  ///
+  /// @{
+  CXString clang_getCursorKindSpelling(
+    int Kind,
+  ) {
+    return (_clang_getCursorKindSpelling ??= _dylib.lookupFunction<
+        _c_clang_getCursorKindSpelling,
+        _dart_clang_getCursorKindSpelling>('clang_getCursorKindSpelling'))(
+      Kind,
+    );
+  }
+
+  _dart_clang_getCursorKindSpelling? _clang_getCursorKindSpelling;
+
+  void clang_getDefinitionSpellingAndExtent(
+    CXCursor arg0,
+    ffi.Pointer<ffi.Pointer<ffi.Int8>> startBuf,
+    ffi.Pointer<ffi.Pointer<ffi.Int8>> endBuf,
+    ffi.Pointer<ffi.Uint32> startLine,
+    ffi.Pointer<ffi.Uint32> startColumn,
+    ffi.Pointer<ffi.Uint32> endLine,
+    ffi.Pointer<ffi.Uint32> endColumn,
+  ) {
+    return (_clang_getDefinitionSpellingAndExtent ??= _dylib.lookupFunction<
+            _c_clang_getDefinitionSpellingAndExtent,
+            _dart_clang_getDefinitionSpellingAndExtent>(
+        'clang_getDefinitionSpellingAndExtent'))(
+      arg0,
+      startBuf,
+      endBuf,
+      startLine,
+      startColumn,
+      endLine,
+      endColumn,
+    );
+  }
+
+  _dart_clang_getDefinitionSpellingAndExtent?
+      _clang_getDefinitionSpellingAndExtent;
+
   void clang_enableStackTraces() {
     return (_clang_enableStackTraces ??= _dylib.lookupFunction<
         _c_clang_enableStackTraces,
@@ -1458,6 +4942,28 @@
 
   _dart_clang_getCompletionChunkKind? _clang_getCompletionChunkKind;
 
+  /// Retrieve the text associated with a particular chunk within a
+  /// completion string.
+  ///
+  /// \param completion_string the completion string to query.
+  ///
+  /// \param chunk_number the 0-based index of the chunk in the completion string.
+  ///
+  /// \returns the text associated with the chunk at index \c chunk_number.
+  CXString clang_getCompletionChunkText(
+    ffi.Pointer<ffi.Void> completion_string,
+    int chunk_number,
+  ) {
+    return (_clang_getCompletionChunkText ??= _dylib.lookupFunction<
+        _c_clang_getCompletionChunkText,
+        _dart_clang_getCompletionChunkText>('clang_getCompletionChunkText'))(
+      completion_string,
+      chunk_number,
+    );
+  }
+
+  _dart_clang_getCompletionChunkText? _clang_getCompletionChunkText;
+
   /// Retrieve the completion string associated with a particular chunk
   /// within a completion string.
   ///
@@ -1557,6 +5063,92 @@
 
   _dart_clang_getCompletionNumAnnotations? _clang_getCompletionNumAnnotations;
 
+  /// Retrieve the annotation associated with the given completion string.
+  ///
+  /// \param completion_string the completion string to query.
+  ///
+  /// \param annotation_number the 0-based index of the annotation of the
+  /// completion string.
+  ///
+  /// \returns annotation string associated with the completion at index
+  /// \c annotation_number, or a NULL string if that annotation is not available.
+  CXString clang_getCompletionAnnotation(
+    ffi.Pointer<ffi.Void> completion_string,
+    int annotation_number,
+  ) {
+    return (_clang_getCompletionAnnotation ??= _dylib.lookupFunction<
+        _c_clang_getCompletionAnnotation,
+        _dart_clang_getCompletionAnnotation>('clang_getCompletionAnnotation'))(
+      completion_string,
+      annotation_number,
+    );
+  }
+
+  _dart_clang_getCompletionAnnotation? _clang_getCompletionAnnotation;
+
+  /// Retrieve the parent context of the given completion string.
+  ///
+  /// The parent context of a completion string is the semantic parent of
+  /// the declaration (if any) that the code completion represents. For example,
+  /// a code completion for an Objective-C method would have the method's class
+  /// or protocol as its context.
+  ///
+  /// \param completion_string The code completion string whose parent is
+  /// being queried.
+  ///
+  /// \param kind DEPRECATED: always set to CXCursor_NotImplemented if non-NULL.
+  ///
+  /// \returns The name of the completion parent, e.g., "NSObject" if
+  /// the completion string represents a method in the NSObject class.
+  CXString clang_getCompletionParent(
+    ffi.Pointer<ffi.Void> completion_string,
+    ffi.Pointer<ffi.Int32> kind,
+  ) {
+    return (_clang_getCompletionParent ??= _dylib.lookupFunction<
+        _c_clang_getCompletionParent,
+        _dart_clang_getCompletionParent>('clang_getCompletionParent'))(
+      completion_string,
+      kind,
+    );
+  }
+
+  _dart_clang_getCompletionParent? _clang_getCompletionParent;
+
+  /// Retrieve the brief documentation comment attached to the declaration
+  /// that corresponds to the given completion string.
+  CXString clang_getCompletionBriefComment(
+    ffi.Pointer<ffi.Void> completion_string,
+  ) {
+    return (_clang_getCompletionBriefComment ??= _dylib.lookupFunction<
+            _c_clang_getCompletionBriefComment,
+            _dart_clang_getCompletionBriefComment>(
+        'clang_getCompletionBriefComment'))(
+      completion_string,
+    );
+  }
+
+  _dart_clang_getCompletionBriefComment? _clang_getCompletionBriefComment;
+
+  /// Retrieve a completion string for an arbitrary declaration or macro
+  /// definition cursor.
+  ///
+  /// \param cursor The cursor to query.
+  ///
+  /// \returns A non-context-sensitive completion string for declaration and macro
+  /// definition cursors, or NULL for other kinds of cursors.
+  ffi.Pointer<ffi.Void> clang_getCursorCompletionString(
+    CXCursor cursor,
+  ) {
+    return (_clang_getCursorCompletionString ??= _dylib.lookupFunction<
+            _c_clang_getCursorCompletionString,
+            _dart_clang_getCursorCompletionString>(
+        'clang_getCursorCompletionString'))(
+      cursor,
+    );
+  }
+
+  _dart_clang_getCursorCompletionString? _clang_getCursorCompletionString;
+
   /// Retrieve the number of fix-its for the given completion index.
   ///
   /// Calling this makes sense only if CXCodeComplete_IncludeCompletionsWithFixIts
@@ -1582,6 +5174,65 @@
 
   _dart_clang_getCompletionNumFixIts? _clang_getCompletionNumFixIts;
 
+  /// Fix-its that *must* be applied before inserting the text for the
+  /// corresponding completion.
+  ///
+  /// By default, clang_codeCompleteAt() only returns completions with empty
+  /// fix-its. Extra completions with non-empty fix-its should be explicitly
+  /// requested by setting CXCodeComplete_IncludeCompletionsWithFixIts.
+  ///
+  /// For the clients to be able to compute position of the cursor after applying
+  /// fix-its, the following conditions are guaranteed to hold for
+  /// replacement_range of the stored fix-its:
+  /// - Ranges in the fix-its are guaranteed to never contain the completion
+  /// point (or identifier under completion point, if any) inside them, except
+  /// at the start or at the end of the range.
+  /// - If a fix-it range starts or ends with completion point (or starts or
+  /// ends after the identifier under completion point), it will contain at
+  /// least one character. It allows to unambiguously recompute completion
+  /// point after applying the fix-it.
+  ///
+  /// The intuition is that provided fix-its change code around the identifier we
+  /// complete, but are not allowed to touch the identifier itself or the
+  /// completion point. One example of completions with corrections are the ones
+  /// replacing '.' with '->' and vice versa:
+  ///
+  /// std::unique_ptr<std::vector<int>> vec_ptr;
+  /// In 'vec_ptr.^', one of the completions is 'push_back', it requires
+  /// replacing '.' with '->'.
+  /// In 'vec_ptr->^', one of the completions is 'release', it requires
+  /// replacing '->' with '.'.
+  ///
+  /// \param results The structure keeping all completion results
+  ///
+  /// \param completion_index The index of the completion
+  ///
+  /// \param fixit_index The index of the fix-it for the completion at
+  /// completion_index
+  ///
+  /// \param replacement_range The fix-it range that must be replaced before the
+  /// completion at completion_index can be applied
+  ///
+  /// \returns The fix-it string that must replace the code at replacement_range
+  /// before the completion at completion_index can be applied
+  CXString clang_getCompletionFixIt(
+    ffi.Pointer<CXCodeCompleteResults> results,
+    int completion_index,
+    int fixit_index,
+    ffi.Pointer<CXSourceRange> replacement_range,
+  ) {
+    return (_clang_getCompletionFixIt ??= _dylib.lookupFunction<
+        _c_clang_getCompletionFixIt,
+        _dart_clang_getCompletionFixIt>('clang_getCompletionFixIt'))(
+      results,
+      completion_index,
+      fixit_index,
+      replacement_range,
+    );
+  }
+
+  _dart_clang_getCompletionFixIt? _clang_getCompletionFixIt;
+
   /// Returns a default set of code-completion options that can be
   /// passed to\c clang_codeCompleteAt().
   int clang_defaultCodeCompleteOptions() {
@@ -1803,6 +5454,58 @@
 
   _dart_clang_codeCompleteGetContainerKind? _clang_codeCompleteGetContainerKind;
 
+  /// Returns the USR for the container for the current code completion
+  /// context. If there is not a container for the current context, this
+  /// function will return the empty string.
+  ///
+  /// \param Results the code completion results to query
+  ///
+  /// \returns the USR for the container
+  CXString clang_codeCompleteGetContainerUSR(
+    ffi.Pointer<CXCodeCompleteResults> Results,
+  ) {
+    return (_clang_codeCompleteGetContainerUSR ??= _dylib.lookupFunction<
+            _c_clang_codeCompleteGetContainerUSR,
+            _dart_clang_codeCompleteGetContainerUSR>(
+        'clang_codeCompleteGetContainerUSR'))(
+      Results,
+    );
+  }
+
+  _dart_clang_codeCompleteGetContainerUSR? _clang_codeCompleteGetContainerUSR;
+
+  /// Returns the currently-entered selector for an Objective-C message
+  /// send, formatted like "initWithFoo:bar:". Only guaranteed to return a
+  /// non-empty string for CXCompletionContext_ObjCInstanceMessage and
+  /// CXCompletionContext_ObjCClassMessage.
+  ///
+  /// \param Results the code completion results to query
+  ///
+  /// \returns the selector (or partial selector) that has been entered thus far
+  /// for an Objective-C message send.
+  CXString clang_codeCompleteGetObjCSelector(
+    ffi.Pointer<CXCodeCompleteResults> Results,
+  ) {
+    return (_clang_codeCompleteGetObjCSelector ??= _dylib.lookupFunction<
+            _c_clang_codeCompleteGetObjCSelector,
+            _dart_clang_codeCompleteGetObjCSelector>(
+        'clang_codeCompleteGetObjCSelector'))(
+      Results,
+    );
+  }
+
+  _dart_clang_codeCompleteGetObjCSelector? _clang_codeCompleteGetObjCSelector;
+
+  /// Return a version string, suitable for showing to a user, but not
+  /// intended to be parsed (the format is not guaranteed to be stable).
+  CXString clang_getClangVersion() {
+    return (_clang_getClangVersion ??= _dylib.lookupFunction<
+        _c_clang_getClangVersion,
+        _dart_clang_getClangVersion>('clang_getClangVersion'))();
+  }
+
+  _dart_clang_getClangVersion? _clang_getClangVersion;
+
   /// Enable/disable crash recovery.
   ///
   /// \param isEnabled Flag to indicate if crash recovery is enabled.  A non-zero
@@ -1839,6 +5542,21 @@
 
   _dart_clang_getInclusions? _clang_getInclusions;
 
+  /// If cursor is a statement declaration tries to evaluate the
+  /// statement and if its variable, tries to evaluate its initializer,
+  /// into its corresponding type.
+  ffi.Pointer<ffi.Void> clang_Cursor_Evaluate(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_Evaluate ??= _dylib.lookupFunction<
+        _c_clang_Cursor_Evaluate,
+        _dart_clang_Cursor_Evaluate>('clang_Cursor_Evaluate'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_Evaluate? _clang_Cursor_Evaluate;
+
   /// Returns the kind of the evaluated result.
   int clang_EvalResult_getKind(
     ffi.Pointer<ffi.Void> E,
@@ -2046,6 +5764,60 @@
 
   _dart_clang_remap_dispose? _clang_remap_dispose;
 
+  /// Find references of a declaration in a specific file.
+  ///
+  /// \param cursor pointing to a declaration or a reference of one.
+  ///
+  /// \param file to search for references.
+  ///
+  /// \param visitor callback that will receive pairs of CXCursor/CXSourceRange for
+  /// each reference found.
+  /// The CXSourceRange will point inside the file; if the reference is inside
+  /// a macro (and not a macro argument) the CXSourceRange will be invalid.
+  ///
+  /// \returns one of the CXResult enumerators.
+  int clang_findReferencesInFile(
+    CXCursor cursor,
+    ffi.Pointer<ffi.Void> file,
+    CXCursorAndRangeVisitor visitor,
+  ) {
+    return (_clang_findReferencesInFile ??= _dylib.lookupFunction<
+        _c_clang_findReferencesInFile,
+        _dart_clang_findReferencesInFile>('clang_findReferencesInFile'))(
+      cursor,
+      file,
+      visitor,
+    );
+  }
+
+  _dart_clang_findReferencesInFile? _clang_findReferencesInFile;
+
+  /// Find #import/#include directives in a specific file.
+  ///
+  /// \param TU translation unit containing the file to query.
+  ///
+  /// \param file to search for #import/#include directives.
+  ///
+  /// \param visitor callback that will receive pairs of CXCursor/CXSourceRange for
+  /// each directive found.
+  ///
+  /// \returns one of the CXResult enumerators.
+  int clang_findIncludesInFile(
+    ffi.Pointer<CXTranslationUnitImpl> TU,
+    ffi.Pointer<ffi.Void> file,
+    CXCursorAndRangeVisitor visitor,
+  ) {
+    return (_clang_findIncludesInFile ??= _dylib.lookupFunction<
+        _c_clang_findIncludesInFile,
+        _dart_clang_findIncludesInFile>('clang_findIncludesInFile'))(
+      TU,
+      file,
+      visitor,
+    );
+  }
+
+  _dart_clang_findIncludesInFile? _clang_findIncludesInFile;
+
   int clang_index_isEntityObjCContainerKind(
     int arg0,
   ) {
@@ -2380,6 +6152,82 @@
   }
 
   _dart_clang_indexTranslationUnit? _clang_indexTranslationUnit;
+
+  /// Retrieve the CXIdxFile, file, line, column, and offset represented by
+  /// the given CXIdxLoc.
+  ///
+  /// If the location refers into a macro expansion, retrieves the
+  /// location of the macro expansion and if it refers into a macro argument
+  /// retrieves the location of the argument.
+  void clang_indexLoc_getFileLocation(
+    CXIdxLoc loc,
+    ffi.Pointer<ffi.Pointer<ffi.Void>> indexFile,
+    ffi.Pointer<ffi.Pointer<ffi.Void>> file,
+    ffi.Pointer<ffi.Uint32> line,
+    ffi.Pointer<ffi.Uint32> column,
+    ffi.Pointer<ffi.Uint32> offset,
+  ) {
+    return (_clang_indexLoc_getFileLocation ??= _dylib.lookupFunction<
+            _c_clang_indexLoc_getFileLocation,
+            _dart_clang_indexLoc_getFileLocation>(
+        'clang_indexLoc_getFileLocation'))(
+      loc,
+      indexFile,
+      file,
+      line,
+      column,
+      offset,
+    );
+  }
+
+  _dart_clang_indexLoc_getFileLocation? _clang_indexLoc_getFileLocation;
+
+  /// Retrieve the CXSourceLocation represented by the given CXIdxLoc.
+  CXSourceLocation clang_indexLoc_getCXSourceLocation(
+    CXIdxLoc loc,
+  ) {
+    return (_clang_indexLoc_getCXSourceLocation ??= _dylib.lookupFunction<
+            _c_clang_indexLoc_getCXSourceLocation,
+            _dart_clang_indexLoc_getCXSourceLocation>(
+        'clang_indexLoc_getCXSourceLocation'))(
+      loc,
+    );
+  }
+
+  _dart_clang_indexLoc_getCXSourceLocation? _clang_indexLoc_getCXSourceLocation;
+
+  /// Visit the fields of a particular type.
+  ///
+  /// This function visits all the direct fields of the given cursor,
+  /// invoking the given \p visitor function with the cursors of each
+  /// visited field. The traversal may be ended prematurely, if
+  /// the visitor returns \c CXFieldVisit_Break.
+  ///
+  /// \param T the record type whose field may be visited.
+  ///
+  /// \param visitor the visitor function that will be invoked for each
+  /// field of \p T.
+  ///
+  /// \param client_data pointer data supplied by the client, which will
+  /// be passed to the visitor each time it is invoked.
+  ///
+  /// \returns a non-zero value if the traversal was terminated
+  /// prematurely by the visitor returning \c CXFieldVisit_Break.
+  int clang_Type_visitFields(
+    CXType T,
+    ffi.Pointer<ffi.NativeFunction<CXFieldVisitor>> visitor,
+    ffi.Pointer<ffi.Void> client_data,
+  ) {
+    return (_clang_Type_visitFields ??= _dylib.lookupFunction<
+        _c_clang_Type_visitFields,
+        _dart_clang_Type_visitFields>('clang_Type_visitFields'))(
+      T,
+      visitor,
+      client_data,
+    );
+  }
+
+  _dart_clang_Type_visitFields? _clang_Type_visitFields;
 }
 
 /// A character string.
@@ -3079,7 +6927,11 @@
   external int NumResults;
 }
 
-class CXCursorAndRangeVisitor extends ffi.Struct {}
+class CXCursorAndRangeVisitor extends ffi.Struct {
+  external ffi.Pointer<ffi.Void> context;
+
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_2>> visit;
+}
 
 /// Source location passed to index callbacks.
 class CXIdxLoc extends ffi.Struct {
@@ -3363,15 +7215,15 @@
 class IndexerCallbacks extends ffi.Struct {
   /// Called periodically to check whether indexing should be aborted.
   /// Should return 0 to continue, and non-zero to abort.
-  external ffi.Pointer<ffi.NativeFunction<_typedefC_2>> abortQuery;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_3>> abortQuery;
 
   /// Called at the end of indexing; passes the complete diagnostic set.
-  external ffi.Pointer<ffi.NativeFunction<_typedefC_3>> diagnostic;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_4>> diagnostic;
 
-  external ffi.Pointer<ffi.NativeFunction<_typedefC_4>> enteredMainFile;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_5>> enteredMainFile;
 
   /// Called when a file gets \#included/\#imported.
-  external ffi.Pointer<ffi.NativeFunction<_typedefC_5>> ppIncludedFile;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_6>> ppIncludedFile;
 
   /// Called when a AST file (PCH or module) gets imported.
   ///
@@ -3379,15 +7231,15 @@
   /// the entities in an AST file). The recommended action is that, if the AST
   /// file is not already indexed, to initiate a new indexing job specific to
   /// the AST file.
-  external ffi.Pointer<ffi.NativeFunction<_typedefC_6>> importedASTFile;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_7>> importedASTFile;
 
   /// Called at the beginning of indexing a translation unit.
-  external ffi.Pointer<ffi.NativeFunction<_typedefC_7>> startedTranslationUnit;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_8>> startedTranslationUnit;
 
-  external ffi.Pointer<ffi.NativeFunction<_typedefC_8>> indexDeclaration;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_9>> indexDeclaration;
 
   /// Called to index a reference of an entity.
-  external ffi.Pointer<ffi.NativeFunction<_typedefC_9>> indexEntityReference;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_10>> indexEntityReference;
 }
 
 const int CINDEX_VERSION_MAJOR = 0;
@@ -3398,6 +7250,22 @@
 
 const String CINDEX_VERSION_STRING = '0.59';
 
+typedef _c_clang_getCString = ffi.Pointer<ffi.Int8> Function(
+  CXString string,
+);
+
+typedef _dart_clang_getCString = ffi.Pointer<ffi.Int8> Function(
+  CXString string,
+);
+
+typedef _c_clang_disposeString = ffi.Void Function(
+  CXString string,
+);
+
+typedef _dart_clang_disposeString = void Function(
+  CXString string,
+);
+
 typedef _c_clang_disposeStringSet = ffi.Void Function(
   ffi.Pointer<CXStringSet> set_1,
 );
@@ -3452,6 +7320,14 @@
   ffi.Pointer<ffi.Int8> Path,
 );
 
+typedef _c_clang_getFileName = CXString Function(
+  ffi.Pointer<ffi.Void> SFile,
+);
+
+typedef _dart_clang_getFileName = CXString Function(
+  ffi.Pointer<ffi.Void> SFile,
+);
+
 typedef _c_clang_getFileTime = ffi.Int64 Function(
   ffi.Pointer<ffi.Void> SFile,
 );
@@ -3512,6 +7388,196 @@
   ffi.Pointer<ffi.Void> file2,
 );
 
+typedef _c_clang_File_tryGetRealPathName = CXString Function(
+  ffi.Pointer<ffi.Void> file,
+);
+
+typedef _dart_clang_File_tryGetRealPathName = CXString Function(
+  ffi.Pointer<ffi.Void> file,
+);
+
+typedef _c_clang_getNullLocation = CXSourceLocation Function();
+
+typedef _dart_clang_getNullLocation = CXSourceLocation Function();
+
+typedef _c_clang_equalLocations = ffi.Uint32 Function(
+  CXSourceLocation loc1,
+  CXSourceLocation loc2,
+);
+
+typedef _dart_clang_equalLocations = int Function(
+  CXSourceLocation loc1,
+  CXSourceLocation loc2,
+);
+
+typedef _c_clang_getLocation = CXSourceLocation Function(
+  ffi.Pointer<CXTranslationUnitImpl> tu,
+  ffi.Pointer<ffi.Void> file,
+  ffi.Uint32 line,
+  ffi.Uint32 column,
+);
+
+typedef _dart_clang_getLocation = CXSourceLocation Function(
+  ffi.Pointer<CXTranslationUnitImpl> tu,
+  ffi.Pointer<ffi.Void> file,
+  int line,
+  int column,
+);
+
+typedef _c_clang_getLocationForOffset = CXSourceLocation Function(
+  ffi.Pointer<CXTranslationUnitImpl> tu,
+  ffi.Pointer<ffi.Void> file,
+  ffi.Uint32 offset,
+);
+
+typedef _dart_clang_getLocationForOffset = CXSourceLocation Function(
+  ffi.Pointer<CXTranslationUnitImpl> tu,
+  ffi.Pointer<ffi.Void> file,
+  int offset,
+);
+
+typedef _c_clang_Location_isInSystemHeader = ffi.Int32 Function(
+  CXSourceLocation location,
+);
+
+typedef _dart_clang_Location_isInSystemHeader = int Function(
+  CXSourceLocation location,
+);
+
+typedef _c_clang_Location_isFromMainFile = ffi.Int32 Function(
+  CXSourceLocation location,
+);
+
+typedef _dart_clang_Location_isFromMainFile = int Function(
+  CXSourceLocation location,
+);
+
+typedef _c_clang_getNullRange = CXSourceRange Function();
+
+typedef _dart_clang_getNullRange = CXSourceRange Function();
+
+typedef _c_clang_getRange = CXSourceRange Function(
+  CXSourceLocation begin,
+  CXSourceLocation end,
+);
+
+typedef _dart_clang_getRange = CXSourceRange Function(
+  CXSourceLocation begin,
+  CXSourceLocation end,
+);
+
+typedef _c_clang_equalRanges = ffi.Uint32 Function(
+  CXSourceRange range1,
+  CXSourceRange range2,
+);
+
+typedef _dart_clang_equalRanges = int Function(
+  CXSourceRange range1,
+  CXSourceRange range2,
+);
+
+typedef _c_clang_Range_isNull = ffi.Int32 Function(
+  CXSourceRange range,
+);
+
+typedef _dart_clang_Range_isNull = int Function(
+  CXSourceRange range,
+);
+
+typedef _c_clang_getExpansionLocation = ffi.Void Function(
+  CXSourceLocation location,
+  ffi.Pointer<ffi.Pointer<ffi.Void>> file,
+  ffi.Pointer<ffi.Uint32> line,
+  ffi.Pointer<ffi.Uint32> column,
+  ffi.Pointer<ffi.Uint32> offset,
+);
+
+typedef _dart_clang_getExpansionLocation = void Function(
+  CXSourceLocation location,
+  ffi.Pointer<ffi.Pointer<ffi.Void>> file,
+  ffi.Pointer<ffi.Uint32> line,
+  ffi.Pointer<ffi.Uint32> column,
+  ffi.Pointer<ffi.Uint32> offset,
+);
+
+typedef _c_clang_getPresumedLocation = ffi.Void Function(
+  CXSourceLocation location,
+  ffi.Pointer<CXString> filename,
+  ffi.Pointer<ffi.Uint32> line,
+  ffi.Pointer<ffi.Uint32> column,
+);
+
+typedef _dart_clang_getPresumedLocation = void Function(
+  CXSourceLocation location,
+  ffi.Pointer<CXString> filename,
+  ffi.Pointer<ffi.Uint32> line,
+  ffi.Pointer<ffi.Uint32> column,
+);
+
+typedef _c_clang_getInstantiationLocation = ffi.Void Function(
+  CXSourceLocation location,
+  ffi.Pointer<ffi.Pointer<ffi.Void>> file,
+  ffi.Pointer<ffi.Uint32> line,
+  ffi.Pointer<ffi.Uint32> column,
+  ffi.Pointer<ffi.Uint32> offset,
+);
+
+typedef _dart_clang_getInstantiationLocation = void Function(
+  CXSourceLocation location,
+  ffi.Pointer<ffi.Pointer<ffi.Void>> file,
+  ffi.Pointer<ffi.Uint32> line,
+  ffi.Pointer<ffi.Uint32> column,
+  ffi.Pointer<ffi.Uint32> offset,
+);
+
+typedef _c_clang_getSpellingLocation = ffi.Void Function(
+  CXSourceLocation location,
+  ffi.Pointer<ffi.Pointer<ffi.Void>> file,
+  ffi.Pointer<ffi.Uint32> line,
+  ffi.Pointer<ffi.Uint32> column,
+  ffi.Pointer<ffi.Uint32> offset,
+);
+
+typedef _dart_clang_getSpellingLocation = void Function(
+  CXSourceLocation location,
+  ffi.Pointer<ffi.Pointer<ffi.Void>> file,
+  ffi.Pointer<ffi.Uint32> line,
+  ffi.Pointer<ffi.Uint32> column,
+  ffi.Pointer<ffi.Uint32> offset,
+);
+
+typedef _c_clang_getFileLocation = ffi.Void Function(
+  CXSourceLocation location,
+  ffi.Pointer<ffi.Pointer<ffi.Void>> file,
+  ffi.Pointer<ffi.Uint32> line,
+  ffi.Pointer<ffi.Uint32> column,
+  ffi.Pointer<ffi.Uint32> offset,
+);
+
+typedef _dart_clang_getFileLocation = void Function(
+  CXSourceLocation location,
+  ffi.Pointer<ffi.Pointer<ffi.Void>> file,
+  ffi.Pointer<ffi.Uint32> line,
+  ffi.Pointer<ffi.Uint32> column,
+  ffi.Pointer<ffi.Uint32> offset,
+);
+
+typedef _c_clang_getRangeStart = CXSourceLocation Function(
+  CXSourceRange range,
+);
+
+typedef _dart_clang_getRangeStart = CXSourceLocation Function(
+  CXSourceRange range,
+);
+
+typedef _c_clang_getRangeEnd = CXSourceLocation Function(
+  CXSourceRange range,
+);
+
+typedef _dart_clang_getRangeEnd = CXSourceLocation Function(
+  CXSourceRange range,
+);
+
 typedef _c_clang_getSkippedRanges = ffi.Pointer<CXSourceRangeList> Function(
   ffi.Pointer<CXTranslationUnitImpl> tu,
   ffi.Pointer<ffi.Void> file,
@@ -3619,6 +7685,16 @@
   ffi.Pointer<ffi.Void> Diagnostic,
 );
 
+typedef _c_clang_formatDiagnostic = CXString Function(
+  ffi.Pointer<ffi.Void> Diagnostic,
+  ffi.Uint32 Options,
+);
+
+typedef _dart_clang_formatDiagnostic = CXString Function(
+  ffi.Pointer<ffi.Void> Diagnostic,
+  int Options,
+);
+
 typedef _c_clang_defaultDiagnosticDisplayOptions = ffi.Uint32 Function();
 
 typedef _dart_clang_defaultDiagnosticDisplayOptions = int Function();
@@ -3631,6 +7707,32 @@
   ffi.Pointer<ffi.Void> arg0,
 );
 
+typedef _c_clang_getDiagnosticLocation = CXSourceLocation Function(
+  ffi.Pointer<ffi.Void> arg0,
+);
+
+typedef _dart_clang_getDiagnosticLocation = CXSourceLocation Function(
+  ffi.Pointer<ffi.Void> arg0,
+);
+
+typedef _c_clang_getDiagnosticSpelling = CXString Function(
+  ffi.Pointer<ffi.Void> arg0,
+);
+
+typedef _dart_clang_getDiagnosticSpelling = CXString Function(
+  ffi.Pointer<ffi.Void> arg0,
+);
+
+typedef _c_clang_getDiagnosticOption = CXString Function(
+  ffi.Pointer<ffi.Void> Diag,
+  ffi.Pointer<CXString> Disable,
+);
+
+typedef _dart_clang_getDiagnosticOption = CXString Function(
+  ffi.Pointer<ffi.Void> Diag,
+  ffi.Pointer<CXString> Disable,
+);
+
 typedef _c_clang_getDiagnosticCategory = ffi.Uint32 Function(
   ffi.Pointer<ffi.Void> arg0,
 );
@@ -3639,6 +7741,22 @@
   ffi.Pointer<ffi.Void> arg0,
 );
 
+typedef _c_clang_getDiagnosticCategoryName = CXString Function(
+  ffi.Uint32 Category,
+);
+
+typedef _dart_clang_getDiagnosticCategoryName = CXString Function(
+  int Category,
+);
+
+typedef _c_clang_getDiagnosticCategoryText = CXString Function(
+  ffi.Pointer<ffi.Void> arg0,
+);
+
+typedef _dart_clang_getDiagnosticCategoryText = CXString Function(
+  ffi.Pointer<ffi.Void> arg0,
+);
+
 typedef _c_clang_getDiagnosticNumRanges = ffi.Uint32 Function(
   ffi.Pointer<ffi.Void> arg0,
 );
@@ -3647,6 +7765,16 @@
   ffi.Pointer<ffi.Void> arg0,
 );
 
+typedef _c_clang_getDiagnosticRange = CXSourceRange Function(
+  ffi.Pointer<ffi.Void> Diagnostic,
+  ffi.Uint32 Range,
+);
+
+typedef _dart_clang_getDiagnosticRange = CXSourceRange Function(
+  ffi.Pointer<ffi.Void> Diagnostic,
+  int Range,
+);
+
 typedef _c_clang_getDiagnosticNumFixIts = ffi.Uint32 Function(
   ffi.Pointer<ffi.Void> Diagnostic,
 );
@@ -3655,6 +7783,26 @@
   ffi.Pointer<ffi.Void> Diagnostic,
 );
 
+typedef _c_clang_getDiagnosticFixIt = CXString Function(
+  ffi.Pointer<ffi.Void> Diagnostic,
+  ffi.Uint32 FixIt,
+  ffi.Pointer<CXSourceRange> ReplacementRange,
+);
+
+typedef _dart_clang_getDiagnosticFixIt = CXString Function(
+  ffi.Pointer<ffi.Void> Diagnostic,
+  int FixIt,
+  ffi.Pointer<CXSourceRange> ReplacementRange,
+);
+
+typedef _c_clang_getTranslationUnitSpelling = CXString Function(
+  ffi.Pointer<CXTranslationUnitImpl> CTUnit,
+);
+
+typedef _dart_clang_getTranslationUnitSpelling = CXString Function(
+  ffi.Pointer<CXTranslationUnitImpl> CTUnit,
+);
+
 typedef _c_clang_createTranslationUnitFromSourceFile
     = ffi.Pointer<CXTranslationUnitImpl> Function(
   ffi.Pointer<ffi.Void> CIdx,
@@ -3835,6 +7983,22 @@
   int kind,
 );
 
+typedef _c_clang_getCXTUResourceUsage = CXTUResourceUsage Function(
+  ffi.Pointer<CXTranslationUnitImpl> TU,
+);
+
+typedef _dart_clang_getCXTUResourceUsage = CXTUResourceUsage Function(
+  ffi.Pointer<CXTranslationUnitImpl> TU,
+);
+
+typedef _c_clang_disposeCXTUResourceUsage = ffi.Void Function(
+  CXTUResourceUsage usage,
+);
+
+typedef _dart_clang_disposeCXTUResourceUsage = void Function(
+  CXTUResourceUsage usage,
+);
+
 typedef _c_clang_getTranslationUnitTargetInfo = ffi.Pointer<CXTargetInfoImpl>
     Function(
   ffi.Pointer<CXTranslationUnitImpl> CTUnit,
@@ -3853,6 +8017,14 @@
   ffi.Pointer<CXTargetInfoImpl> Info,
 );
 
+typedef _c_clang_TargetInfo_getTriple = CXString Function(
+  ffi.Pointer<CXTargetInfoImpl> Info,
+);
+
+typedef _dart_clang_TargetInfo_getTriple = CXString Function(
+  ffi.Pointer<CXTargetInfoImpl> Info,
+);
+
 typedef _c_clang_TargetInfo_getPointerWidth = ffi.Int32 Function(
   ffi.Pointer<CXTargetInfoImpl> Info,
 );
@@ -3861,6 +8033,52 @@
   ffi.Pointer<CXTargetInfoImpl> Info,
 );
 
+typedef _c_clang_getNullCursor = CXCursor Function();
+
+typedef _dart_clang_getNullCursor = CXCursor Function();
+
+typedef _c_clang_getTranslationUnitCursor = CXCursor Function(
+  ffi.Pointer<CXTranslationUnitImpl> arg0,
+);
+
+typedef _dart_clang_getTranslationUnitCursor = CXCursor Function(
+  ffi.Pointer<CXTranslationUnitImpl> arg0,
+);
+
+typedef _c_clang_equalCursors = ffi.Uint32 Function(
+  CXCursor arg0,
+  CXCursor arg1,
+);
+
+typedef _dart_clang_equalCursors = int Function(
+  CXCursor arg0,
+  CXCursor arg1,
+);
+
+typedef _c_clang_Cursor_isNull = ffi.Int32 Function(
+  CXCursor cursor,
+);
+
+typedef _dart_clang_Cursor_isNull = int Function(
+  CXCursor cursor,
+);
+
+typedef _c_clang_hashCursor = ffi.Uint32 Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_hashCursor = int Function(
+  CXCursor arg0,
+);
+
+typedef _c_clang_getCursorKind = ffi.Int32 Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_getCursorKind = int Function(
+  CXCursor arg0,
+);
+
 typedef _c_clang_isDeclaration = ffi.Uint32 Function(
   ffi.Int32 arg0,
 );
@@ -3869,6 +8087,14 @@
   int arg0,
 );
 
+typedef _c_clang_isInvalidDeclaration = ffi.Uint32 Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_isInvalidDeclaration = int Function(
+  CXCursor arg0,
+);
+
 typedef _c_clang_isReference = ffi.Uint32 Function(
   ffi.Int32 arg0,
 );
@@ -3901,6 +8127,14 @@
   int arg0,
 );
 
+typedef _c_clang_Cursor_hasAttrs = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_hasAttrs = int Function(
+  CXCursor C,
+);
+
 typedef _c_clang_isInvalid = ffi.Uint32 Function(
   ffi.Int32 arg0,
 );
@@ -3933,6 +8167,50 @@
   int arg0,
 );
 
+typedef _c_clang_getCursorLinkage = ffi.Int32 Function(
+  CXCursor cursor,
+);
+
+typedef _dart_clang_getCursorLinkage = int Function(
+  CXCursor cursor,
+);
+
+typedef _c_clang_getCursorVisibility = ffi.Int32 Function(
+  CXCursor cursor,
+);
+
+typedef _dart_clang_getCursorVisibility = int Function(
+  CXCursor cursor,
+);
+
+typedef _c_clang_getCursorAvailability = ffi.Int32 Function(
+  CXCursor cursor,
+);
+
+typedef _dart_clang_getCursorAvailability = int Function(
+  CXCursor cursor,
+);
+
+typedef _c_clang_getCursorPlatformAvailability = ffi.Int32 Function(
+  CXCursor cursor,
+  ffi.Pointer<ffi.Int32> always_deprecated,
+  ffi.Pointer<CXString> deprecated_message,
+  ffi.Pointer<ffi.Int32> always_unavailable,
+  ffi.Pointer<CXString> unavailable_message,
+  ffi.Pointer<CXPlatformAvailability> availability,
+  ffi.Int32 availability_size,
+);
+
+typedef _dart_clang_getCursorPlatformAvailability = int Function(
+  CXCursor cursor,
+  ffi.Pointer<ffi.Int32> always_deprecated,
+  ffi.Pointer<CXString> deprecated_message,
+  ffi.Pointer<ffi.Int32> always_unavailable,
+  ffi.Pointer<CXString> unavailable_message,
+  ffi.Pointer<CXPlatformAvailability> availability,
+  int availability_size,
+);
+
 typedef _c_clang_disposeCXPlatformAvailability = ffi.Void Function(
   ffi.Pointer<CXPlatformAvailability> availability,
 );
@@ -3941,6 +8219,32 @@
   ffi.Pointer<CXPlatformAvailability> availability,
 );
 
+typedef _c_clang_getCursorLanguage = ffi.Int32 Function(
+  CXCursor cursor,
+);
+
+typedef _dart_clang_getCursorLanguage = int Function(
+  CXCursor cursor,
+);
+
+typedef _c_clang_getCursorTLSKind = ffi.Int32 Function(
+  CXCursor cursor,
+);
+
+typedef _dart_clang_getCursorTLSKind = int Function(
+  CXCursor cursor,
+);
+
+typedef _c_clang_Cursor_getTranslationUnit = ffi.Pointer<CXTranslationUnitImpl>
+    Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_Cursor_getTranslationUnit
+    = ffi.Pointer<CXTranslationUnitImpl> Function(
+  CXCursor arg0,
+);
+
 typedef _c_clang_createCXCursorSet = ffi.Pointer<CXCursorSetImpl> Function();
 
 typedef _dart_clang_createCXCursorSet = ffi.Pointer<CXCursorSetImpl> Function();
@@ -3953,6 +8257,54 @@
   ffi.Pointer<CXCursorSetImpl> cset,
 );
 
+typedef _c_clang_CXCursorSet_contains = ffi.Uint32 Function(
+  ffi.Pointer<CXCursorSetImpl> cset,
+  CXCursor cursor,
+);
+
+typedef _dart_clang_CXCursorSet_contains = int Function(
+  ffi.Pointer<CXCursorSetImpl> cset,
+  CXCursor cursor,
+);
+
+typedef _c_clang_CXCursorSet_insert = ffi.Uint32 Function(
+  ffi.Pointer<CXCursorSetImpl> cset,
+  CXCursor cursor,
+);
+
+typedef _dart_clang_CXCursorSet_insert = int Function(
+  ffi.Pointer<CXCursorSetImpl> cset,
+  CXCursor cursor,
+);
+
+typedef _c_clang_getCursorSemanticParent = CXCursor Function(
+  CXCursor cursor,
+);
+
+typedef _dart_clang_getCursorSemanticParent = CXCursor Function(
+  CXCursor cursor,
+);
+
+typedef _c_clang_getCursorLexicalParent = CXCursor Function(
+  CXCursor cursor,
+);
+
+typedef _dart_clang_getCursorLexicalParent = CXCursor Function(
+  CXCursor cursor,
+);
+
+typedef _c_clang_getOverriddenCursors = ffi.Void Function(
+  CXCursor cursor,
+  ffi.Pointer<ffi.Pointer<CXCursor>> overridden,
+  ffi.Pointer<ffi.Uint32> num_overridden,
+);
+
+typedef _dart_clang_getOverriddenCursors = void Function(
+  CXCursor cursor,
+  ffi.Pointer<ffi.Pointer<CXCursor>> overridden,
+  ffi.Pointer<ffi.Uint32> num_overridden,
+);
+
 typedef _c_clang_disposeOverriddenCursors = ffi.Void Function(
   ffi.Pointer<CXCursor> overridden,
 );
@@ -3961,6 +8313,720 @@
   ffi.Pointer<CXCursor> overridden,
 );
 
+typedef _c_clang_getIncludedFile = ffi.Pointer<ffi.Void> Function(
+  CXCursor cursor,
+);
+
+typedef _dart_clang_getIncludedFile = ffi.Pointer<ffi.Void> Function(
+  CXCursor cursor,
+);
+
+typedef _c_clang_getCursor = CXCursor Function(
+  ffi.Pointer<CXTranslationUnitImpl> arg0,
+  CXSourceLocation arg1,
+);
+
+typedef _dart_clang_getCursor = CXCursor Function(
+  ffi.Pointer<CXTranslationUnitImpl> arg0,
+  CXSourceLocation arg1,
+);
+
+typedef _c_clang_getCursorLocation = CXSourceLocation Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_getCursorLocation = CXSourceLocation Function(
+  CXCursor arg0,
+);
+
+typedef _c_clang_getCursorExtent = CXSourceRange Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_getCursorExtent = CXSourceRange Function(
+  CXCursor arg0,
+);
+
+typedef _c_clang_getCursorType = CXType Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_getCursorType = CXType Function(
+  CXCursor C,
+);
+
+typedef _c_clang_getTypeSpelling = CXString Function(
+  CXType CT,
+);
+
+typedef _dart_clang_getTypeSpelling = CXString Function(
+  CXType CT,
+);
+
+typedef _c_clang_getTypedefDeclUnderlyingType = CXType Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_getTypedefDeclUnderlyingType = CXType Function(
+  CXCursor C,
+);
+
+typedef _c_clang_getEnumDeclIntegerType = CXType Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_getEnumDeclIntegerType = CXType Function(
+  CXCursor C,
+);
+
+typedef _c_clang_getEnumConstantDeclValue = ffi.Int64 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_getEnumConstantDeclValue = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_getEnumConstantDeclUnsignedValue = ffi.Uint64 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_getEnumConstantDeclUnsignedValue = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_getFieldDeclBitWidth = ffi.Int32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_getFieldDeclBitWidth = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_Cursor_getNumArguments = ffi.Int32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_getNumArguments = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_Cursor_getArgument = CXCursor Function(
+  CXCursor C,
+  ffi.Uint32 i,
+);
+
+typedef _dart_clang_Cursor_getArgument = CXCursor Function(
+  CXCursor C,
+  int i,
+);
+
+typedef _c_clang_Cursor_getNumTemplateArguments = ffi.Int32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_getNumTemplateArguments = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_Cursor_getTemplateArgumentKind = ffi.Int32 Function(
+  CXCursor C,
+  ffi.Uint32 I,
+);
+
+typedef _dart_clang_Cursor_getTemplateArgumentKind = int Function(
+  CXCursor C,
+  int I,
+);
+
+typedef _c_clang_Cursor_getTemplateArgumentType = CXType Function(
+  CXCursor C,
+  ffi.Uint32 I,
+);
+
+typedef _dart_clang_Cursor_getTemplateArgumentType = CXType Function(
+  CXCursor C,
+  int I,
+);
+
+typedef _c_clang_Cursor_getTemplateArgumentValue = ffi.Int64 Function(
+  CXCursor C,
+  ffi.Uint32 I,
+);
+
+typedef _dart_clang_Cursor_getTemplateArgumentValue = int Function(
+  CXCursor C,
+  int I,
+);
+
+typedef _c_clang_Cursor_getTemplateArgumentUnsignedValue = ffi.Uint64 Function(
+  CXCursor C,
+  ffi.Uint32 I,
+);
+
+typedef _dart_clang_Cursor_getTemplateArgumentUnsignedValue = int Function(
+  CXCursor C,
+  int I,
+);
+
+typedef _c_clang_equalTypes = ffi.Uint32 Function(
+  CXType A,
+  CXType B,
+);
+
+typedef _dart_clang_equalTypes = int Function(
+  CXType A,
+  CXType B,
+);
+
+typedef _c_clang_getCanonicalType = CXType Function(
+  CXType T,
+);
+
+typedef _dart_clang_getCanonicalType = CXType Function(
+  CXType T,
+);
+
+typedef _c_clang_isConstQualifiedType = ffi.Uint32 Function(
+  CXType T,
+);
+
+typedef _dart_clang_isConstQualifiedType = int Function(
+  CXType T,
+);
+
+typedef _c_clang_Cursor_isMacroFunctionLike = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_isMacroFunctionLike = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_Cursor_isMacroBuiltin = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_isMacroBuiltin = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_Cursor_isFunctionInlined = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_isFunctionInlined = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_isVolatileQualifiedType = ffi.Uint32 Function(
+  CXType T,
+);
+
+typedef _dart_clang_isVolatileQualifiedType = int Function(
+  CXType T,
+);
+
+typedef _c_clang_isRestrictQualifiedType = ffi.Uint32 Function(
+  CXType T,
+);
+
+typedef _dart_clang_isRestrictQualifiedType = int Function(
+  CXType T,
+);
+
+typedef _c_clang_getAddressSpace = ffi.Uint32 Function(
+  CXType T,
+);
+
+typedef _dart_clang_getAddressSpace = int Function(
+  CXType T,
+);
+
+typedef _c_clang_getTypedefName = CXString Function(
+  CXType CT,
+);
+
+typedef _dart_clang_getTypedefName = CXString Function(
+  CXType CT,
+);
+
+typedef _c_clang_getPointeeType = CXType Function(
+  CXType T,
+);
+
+typedef _dart_clang_getPointeeType = CXType Function(
+  CXType T,
+);
+
+typedef _c_clang_getTypeDeclaration = CXCursor Function(
+  CXType T,
+);
+
+typedef _dart_clang_getTypeDeclaration = CXCursor Function(
+  CXType T,
+);
+
+typedef _c_clang_getDeclObjCTypeEncoding = CXString Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_getDeclObjCTypeEncoding = CXString Function(
+  CXCursor C,
+);
+
+typedef _c_clang_Type_getObjCEncoding = CXString Function(
+  CXType type,
+);
+
+typedef _dart_clang_Type_getObjCEncoding = CXString Function(
+  CXType type,
+);
+
+typedef _c_clang_getTypeKindSpelling = CXString Function(
+  ffi.Int32 K,
+);
+
+typedef _dart_clang_getTypeKindSpelling = CXString Function(
+  int K,
+);
+
+typedef _c_clang_getFunctionTypeCallingConv = ffi.Int32 Function(
+  CXType T,
+);
+
+typedef _dart_clang_getFunctionTypeCallingConv = int Function(
+  CXType T,
+);
+
+typedef _c_clang_getResultType = CXType Function(
+  CXType T,
+);
+
+typedef _dart_clang_getResultType = CXType Function(
+  CXType T,
+);
+
+typedef _c_clang_getExceptionSpecificationType = ffi.Int32 Function(
+  CXType T,
+);
+
+typedef _dart_clang_getExceptionSpecificationType = int Function(
+  CXType T,
+);
+
+typedef _c_clang_getNumArgTypes = ffi.Int32 Function(
+  CXType T,
+);
+
+typedef _dart_clang_getNumArgTypes = int Function(
+  CXType T,
+);
+
+typedef _c_clang_getArgType = CXType Function(
+  CXType T,
+  ffi.Uint32 i,
+);
+
+typedef _dart_clang_getArgType = CXType Function(
+  CXType T,
+  int i,
+);
+
+typedef _c_clang_Type_getObjCObjectBaseType = CXType Function(
+  CXType T,
+);
+
+typedef _dart_clang_Type_getObjCObjectBaseType = CXType Function(
+  CXType T,
+);
+
+typedef _c_clang_Type_getNumObjCProtocolRefs = ffi.Uint32 Function(
+  CXType T,
+);
+
+typedef _dart_clang_Type_getNumObjCProtocolRefs = int Function(
+  CXType T,
+);
+
+typedef _c_clang_Type_getObjCProtocolDecl = CXCursor Function(
+  CXType T,
+  ffi.Uint32 i,
+);
+
+typedef _dart_clang_Type_getObjCProtocolDecl = CXCursor Function(
+  CXType T,
+  int i,
+);
+
+typedef _c_clang_Type_getNumObjCTypeArgs = ffi.Uint32 Function(
+  CXType T,
+);
+
+typedef _dart_clang_Type_getNumObjCTypeArgs = int Function(
+  CXType T,
+);
+
+typedef _c_clang_Type_getObjCTypeArg = CXType Function(
+  CXType T,
+  ffi.Uint32 i,
+);
+
+typedef _dart_clang_Type_getObjCTypeArg = CXType Function(
+  CXType T,
+  int i,
+);
+
+typedef _c_clang_isFunctionTypeVariadic = ffi.Uint32 Function(
+  CXType T,
+);
+
+typedef _dart_clang_isFunctionTypeVariadic = int Function(
+  CXType T,
+);
+
+typedef _c_clang_getCursorResultType = CXType Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_getCursorResultType = CXType Function(
+  CXCursor C,
+);
+
+typedef _c_clang_getCursorExceptionSpecificationType = ffi.Int32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_getCursorExceptionSpecificationType = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_isPODType = ffi.Uint32 Function(
+  CXType T,
+);
+
+typedef _dart_clang_isPODType = int Function(
+  CXType T,
+);
+
+typedef _c_clang_getElementType = CXType Function(
+  CXType T,
+);
+
+typedef _dart_clang_getElementType = CXType Function(
+  CXType T,
+);
+
+typedef _c_clang_getNumElements = ffi.Int64 Function(
+  CXType T,
+);
+
+typedef _dart_clang_getNumElements = int Function(
+  CXType T,
+);
+
+typedef _c_clang_getArrayElementType = CXType Function(
+  CXType T,
+);
+
+typedef _dart_clang_getArrayElementType = CXType Function(
+  CXType T,
+);
+
+typedef _c_clang_getArraySize = ffi.Int64 Function(
+  CXType T,
+);
+
+typedef _dart_clang_getArraySize = int Function(
+  CXType T,
+);
+
+typedef _c_clang_Type_getNamedType = CXType Function(
+  CXType T,
+);
+
+typedef _dart_clang_Type_getNamedType = CXType Function(
+  CXType T,
+);
+
+typedef _c_clang_Type_isTransparentTagTypedef = ffi.Uint32 Function(
+  CXType T,
+);
+
+typedef _dart_clang_Type_isTransparentTagTypedef = int Function(
+  CXType T,
+);
+
+typedef _c_clang_Type_getNullability = ffi.Int32 Function(
+  CXType T,
+);
+
+typedef _dart_clang_Type_getNullability = int Function(
+  CXType T,
+);
+
+typedef _c_clang_Type_getAlignOf = ffi.Int64 Function(
+  CXType T,
+);
+
+typedef _dart_clang_Type_getAlignOf = int Function(
+  CXType T,
+);
+
+typedef _c_clang_Type_getClassType = CXType Function(
+  CXType T,
+);
+
+typedef _dart_clang_Type_getClassType = CXType Function(
+  CXType T,
+);
+
+typedef _c_clang_Type_getSizeOf = ffi.Int64 Function(
+  CXType T,
+);
+
+typedef _dart_clang_Type_getSizeOf = int Function(
+  CXType T,
+);
+
+typedef _c_clang_Type_getOffsetOf = ffi.Int64 Function(
+  CXType T,
+  ffi.Pointer<ffi.Int8> S,
+);
+
+typedef _dart_clang_Type_getOffsetOf = int Function(
+  CXType T,
+  ffi.Pointer<ffi.Int8> S,
+);
+
+typedef _c_clang_Type_getModifiedType = CXType Function(
+  CXType T,
+);
+
+typedef _dart_clang_Type_getModifiedType = CXType Function(
+  CXType T,
+);
+
+typedef _c_clang_Cursor_getOffsetOfField = ffi.Int64 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_getOffsetOfField = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_Cursor_isAnonymous = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_isAnonymous = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_Cursor_isAnonymousRecordDecl = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_isAnonymousRecordDecl = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_Cursor_isInlineNamespace = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_isInlineNamespace = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_Type_getNumTemplateArguments = ffi.Int32 Function(
+  CXType T,
+);
+
+typedef _dart_clang_Type_getNumTemplateArguments = int Function(
+  CXType T,
+);
+
+typedef _c_clang_Type_getTemplateArgumentAsType = CXType Function(
+  CXType T,
+  ffi.Uint32 i,
+);
+
+typedef _dart_clang_Type_getTemplateArgumentAsType = CXType Function(
+  CXType T,
+  int i,
+);
+
+typedef _c_clang_Type_getCXXRefQualifier = ffi.Int32 Function(
+  CXType T,
+);
+
+typedef _dart_clang_Type_getCXXRefQualifier = int Function(
+  CXType T,
+);
+
+typedef _c_clang_Cursor_isBitField = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_isBitField = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_isVirtualBase = ffi.Uint32 Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_isVirtualBase = int Function(
+  CXCursor arg0,
+);
+
+typedef _c_clang_getCXXAccessSpecifier = ffi.Int32 Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_getCXXAccessSpecifier = int Function(
+  CXCursor arg0,
+);
+
+typedef _c_clang_Cursor_getStorageClass = ffi.Int32 Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_Cursor_getStorageClass = int Function(
+  CXCursor arg0,
+);
+
+typedef _c_clang_getNumOverloadedDecls = ffi.Uint32 Function(
+  CXCursor cursor,
+);
+
+typedef _dart_clang_getNumOverloadedDecls = int Function(
+  CXCursor cursor,
+);
+
+typedef _c_clang_getOverloadedDecl = CXCursor Function(
+  CXCursor cursor,
+  ffi.Uint32 index,
+);
+
+typedef _dart_clang_getOverloadedDecl = CXCursor Function(
+  CXCursor cursor,
+  int index,
+);
+
+typedef _c_clang_getIBOutletCollectionType = CXType Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_getIBOutletCollectionType = CXType Function(
+  CXCursor arg0,
+);
+
+typedef CXCursorVisitor = ffi.Int32 Function(
+  CXCursor,
+  CXCursor,
+  ffi.Pointer<ffi.Void>,
+);
+
+typedef _c_clang_visitChildren = ffi.Uint32 Function(
+  CXCursor parent,
+  ffi.Pointer<ffi.NativeFunction<CXCursorVisitor>> visitor,
+  ffi.Pointer<ffi.Void> client_data,
+);
+
+typedef _dart_clang_visitChildren = int Function(
+  CXCursor parent,
+  ffi.Pointer<ffi.NativeFunction<CXCursorVisitor>> visitor,
+  ffi.Pointer<ffi.Void> client_data,
+);
+
+typedef _c_clang_getCursorUSR = CXString Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_getCursorUSR = CXString Function(
+  CXCursor arg0,
+);
+
+typedef _c_clang_constructUSR_ObjCClass = CXString Function(
+  ffi.Pointer<ffi.Int8> class_name,
+);
+
+typedef _dart_clang_constructUSR_ObjCClass = CXString Function(
+  ffi.Pointer<ffi.Int8> class_name,
+);
+
+typedef _c_clang_constructUSR_ObjCCategory = CXString Function(
+  ffi.Pointer<ffi.Int8> class_name,
+  ffi.Pointer<ffi.Int8> category_name,
+);
+
+typedef _dart_clang_constructUSR_ObjCCategory = CXString Function(
+  ffi.Pointer<ffi.Int8> class_name,
+  ffi.Pointer<ffi.Int8> category_name,
+);
+
+typedef _c_clang_constructUSR_ObjCProtocol = CXString Function(
+  ffi.Pointer<ffi.Int8> protocol_name,
+);
+
+typedef _dart_clang_constructUSR_ObjCProtocol = CXString Function(
+  ffi.Pointer<ffi.Int8> protocol_name,
+);
+
+typedef _c_clang_constructUSR_ObjCIvar = CXString Function(
+  ffi.Pointer<ffi.Int8> name,
+  CXString classUSR,
+);
+
+typedef _dart_clang_constructUSR_ObjCIvar = CXString Function(
+  ffi.Pointer<ffi.Int8> name,
+  CXString classUSR,
+);
+
+typedef _c_clang_constructUSR_ObjCMethod = CXString Function(
+  ffi.Pointer<ffi.Int8> name,
+  ffi.Uint32 isInstanceMethod,
+  CXString classUSR,
+);
+
+typedef _dart_clang_constructUSR_ObjCMethod = CXString Function(
+  ffi.Pointer<ffi.Int8> name,
+  int isInstanceMethod,
+  CXString classUSR,
+);
+
+typedef _c_clang_constructUSR_ObjCProperty = CXString Function(
+  ffi.Pointer<ffi.Int8> property,
+  CXString classUSR,
+);
+
+typedef _dart_clang_constructUSR_ObjCProperty = CXString Function(
+  ffi.Pointer<ffi.Int8> property,
+  CXString classUSR,
+);
+
+typedef _c_clang_getCursorSpelling = CXString Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_getCursorSpelling = CXString Function(
+  CXCursor arg0,
+);
+
+typedef _c_clang_Cursor_getSpellingNameRange = CXSourceRange Function(
+  CXCursor arg0,
+  ffi.Uint32 pieceIndex,
+  ffi.Uint32 options,
+);
+
+typedef _dart_clang_Cursor_getSpellingNameRange = CXSourceRange Function(
+  CXCursor arg0,
+  int pieceIndex,
+  int options,
+);
+
 typedef _c_clang_PrintingPolicy_getProperty = ffi.Uint32 Function(
   ffi.Pointer<ffi.Void> Policy,
   ffi.Int32 Property,
@@ -3983,6 +9049,14 @@
   int Value,
 );
 
+typedef _c_clang_getCursorPrintingPolicy = ffi.Pointer<ffi.Void> Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_getCursorPrintingPolicy = ffi.Pointer<ffi.Void> Function(
+  CXCursor arg0,
+);
+
 typedef _c_clang_PrintingPolicy_dispose = ffi.Void Function(
   ffi.Pointer<ffi.Void> Policy,
 );
@@ -3991,6 +9065,200 @@
   ffi.Pointer<ffi.Void> Policy,
 );
 
+typedef _c_clang_getCursorPrettyPrinted = CXString Function(
+  CXCursor Cursor,
+  ffi.Pointer<ffi.Void> Policy,
+);
+
+typedef _dart_clang_getCursorPrettyPrinted = CXString Function(
+  CXCursor Cursor,
+  ffi.Pointer<ffi.Void> Policy,
+);
+
+typedef _c_clang_getCursorDisplayName = CXString Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_getCursorDisplayName = CXString Function(
+  CXCursor arg0,
+);
+
+typedef _c_clang_getCursorReferenced = CXCursor Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_getCursorReferenced = CXCursor Function(
+  CXCursor arg0,
+);
+
+typedef _c_clang_getCursorDefinition = CXCursor Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_getCursorDefinition = CXCursor Function(
+  CXCursor arg0,
+);
+
+typedef _c_clang_isCursorDefinition = ffi.Uint32 Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_isCursorDefinition = int Function(
+  CXCursor arg0,
+);
+
+typedef _c_clang_getCanonicalCursor = CXCursor Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_getCanonicalCursor = CXCursor Function(
+  CXCursor arg0,
+);
+
+typedef _c_clang_Cursor_getObjCSelectorIndex = ffi.Int32 Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_Cursor_getObjCSelectorIndex = int Function(
+  CXCursor arg0,
+);
+
+typedef _c_clang_Cursor_isDynamicCall = ffi.Int32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_isDynamicCall = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_Cursor_getReceiverType = CXType Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_getReceiverType = CXType Function(
+  CXCursor C,
+);
+
+typedef _c_clang_Cursor_getObjCPropertyAttributes = ffi.Uint32 Function(
+  CXCursor C,
+  ffi.Uint32 reserved,
+);
+
+typedef _dart_clang_Cursor_getObjCPropertyAttributes = int Function(
+  CXCursor C,
+  int reserved,
+);
+
+typedef _c_clang_Cursor_getObjCPropertyGetterName = CXString Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_getObjCPropertyGetterName = CXString Function(
+  CXCursor C,
+);
+
+typedef _c_clang_Cursor_getObjCPropertySetterName = CXString Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_getObjCPropertySetterName = CXString Function(
+  CXCursor C,
+);
+
+typedef _c_clang_Cursor_getObjCDeclQualifiers = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_getObjCDeclQualifiers = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_Cursor_isObjCOptional = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_isObjCOptional = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_Cursor_isVariadic = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_isVariadic = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_Cursor_isExternalSymbol = ffi.Uint32 Function(
+  CXCursor C,
+  ffi.Pointer<CXString> language,
+  ffi.Pointer<CXString> definedIn,
+  ffi.Pointer<ffi.Uint32> isGenerated,
+);
+
+typedef _dart_clang_Cursor_isExternalSymbol = int Function(
+  CXCursor C,
+  ffi.Pointer<CXString> language,
+  ffi.Pointer<CXString> definedIn,
+  ffi.Pointer<ffi.Uint32> isGenerated,
+);
+
+typedef _c_clang_Cursor_getCommentRange = CXSourceRange Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_getCommentRange = CXSourceRange Function(
+  CXCursor C,
+);
+
+typedef _c_clang_Cursor_getRawCommentText = CXString Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_getRawCommentText = CXString Function(
+  CXCursor C,
+);
+
+typedef _c_clang_Cursor_getBriefCommentText = CXString Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_getBriefCommentText = CXString Function(
+  CXCursor C,
+);
+
+typedef _c_clang_Cursor_getMangling = CXString Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_Cursor_getMangling = CXString Function(
+  CXCursor arg0,
+);
+
+typedef _c_clang_Cursor_getCXXManglings = ffi.Pointer<CXStringSet> Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_Cursor_getCXXManglings = ffi.Pointer<CXStringSet> Function(
+  CXCursor arg0,
+);
+
+typedef _c_clang_Cursor_getObjCManglings = ffi.Pointer<CXStringSet> Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_Cursor_getObjCManglings = ffi.Pointer<CXStringSet> Function(
+  CXCursor arg0,
+);
+
+typedef _c_clang_Cursor_getModule = ffi.Pointer<ffi.Void> Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_getModule = ffi.Pointer<ffi.Void> Function(
+  CXCursor C,
+);
+
 typedef _c_clang_getModuleForFile = ffi.Pointer<ffi.Void> Function(
   ffi.Pointer<CXTranslationUnitImpl> arg0,
   ffi.Pointer<ffi.Void> arg1,
@@ -4017,6 +9285,22 @@
   ffi.Pointer<ffi.Void> Module,
 );
 
+typedef _c_clang_Module_getName = CXString Function(
+  ffi.Pointer<ffi.Void> Module,
+);
+
+typedef _dart_clang_Module_getName = CXString Function(
+  ffi.Pointer<ffi.Void> Module,
+);
+
+typedef _c_clang_Module_getFullName = CXString Function(
+  ffi.Pointer<ffi.Void> Module,
+);
+
+typedef _dart_clang_Module_getFullName = CXString Function(
+  ffi.Pointer<ffi.Void> Module,
+);
+
 typedef _c_clang_Module_isSystem = ffi.Int32 Function(
   ffi.Pointer<ffi.Void> Module,
 );
@@ -4047,6 +9331,192 @@
   int Index,
 );
 
+typedef _c_clang_CXXConstructor_isConvertingConstructor = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_CXXConstructor_isConvertingConstructor = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_CXXConstructor_isCopyConstructor = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_CXXConstructor_isCopyConstructor = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_CXXConstructor_isDefaultConstructor = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_CXXConstructor_isDefaultConstructor = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_CXXConstructor_isMoveConstructor = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_CXXConstructor_isMoveConstructor = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_CXXField_isMutable = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_CXXField_isMutable = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_CXXMethod_isDefaulted = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_CXXMethod_isDefaulted = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_CXXMethod_isPureVirtual = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_CXXMethod_isPureVirtual = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_CXXMethod_isStatic = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_CXXMethod_isStatic = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_CXXMethod_isVirtual = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_CXXMethod_isVirtual = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_CXXRecord_isAbstract = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_CXXRecord_isAbstract = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_EnumDecl_isScoped = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_EnumDecl_isScoped = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_CXXMethod_isConst = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_CXXMethod_isConst = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_getTemplateCursorKind = ffi.Int32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_getTemplateCursorKind = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_getSpecializedCursorTemplate = CXCursor Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_getSpecializedCursorTemplate = CXCursor Function(
+  CXCursor C,
+);
+
+typedef _c_clang_getCursorReferenceNameRange = CXSourceRange Function(
+  CXCursor C,
+  ffi.Uint32 NameFlags,
+  ffi.Uint32 PieceIndex,
+);
+
+typedef _dart_clang_getCursorReferenceNameRange = CXSourceRange Function(
+  CXCursor C,
+  int NameFlags,
+  int PieceIndex,
+);
+
+typedef _c_clang_getToken = ffi.Pointer<CXToken> Function(
+  ffi.Pointer<CXTranslationUnitImpl> TU,
+  CXSourceLocation Location,
+);
+
+typedef _dart_clang_getToken = ffi.Pointer<CXToken> Function(
+  ffi.Pointer<CXTranslationUnitImpl> TU,
+  CXSourceLocation Location,
+);
+
+typedef _c_clang_getTokenKind = ffi.Int32 Function(
+  CXToken arg0,
+);
+
+typedef _dart_clang_getTokenKind = int Function(
+  CXToken arg0,
+);
+
+typedef _c_clang_getTokenSpelling = CXString Function(
+  ffi.Pointer<CXTranslationUnitImpl> arg0,
+  CXToken arg1,
+);
+
+typedef _dart_clang_getTokenSpelling = CXString Function(
+  ffi.Pointer<CXTranslationUnitImpl> arg0,
+  CXToken arg1,
+);
+
+typedef _c_clang_getTokenLocation = CXSourceLocation Function(
+  ffi.Pointer<CXTranslationUnitImpl> arg0,
+  CXToken arg1,
+);
+
+typedef _dart_clang_getTokenLocation = CXSourceLocation Function(
+  ffi.Pointer<CXTranslationUnitImpl> arg0,
+  CXToken arg1,
+);
+
+typedef _c_clang_getTokenExtent = CXSourceRange Function(
+  ffi.Pointer<CXTranslationUnitImpl> arg0,
+  CXToken arg1,
+);
+
+typedef _dart_clang_getTokenExtent = CXSourceRange Function(
+  ffi.Pointer<CXTranslationUnitImpl> arg0,
+  CXToken arg1,
+);
+
+typedef _c_clang_tokenize = ffi.Void Function(
+  ffi.Pointer<CXTranslationUnitImpl> TU,
+  CXSourceRange Range,
+  ffi.Pointer<ffi.Pointer<CXToken>> Tokens,
+  ffi.Pointer<ffi.Uint32> NumTokens,
+);
+
+typedef _dart_clang_tokenize = void Function(
+  ffi.Pointer<CXTranslationUnitImpl> TU,
+  CXSourceRange Range,
+  ffi.Pointer<ffi.Pointer<CXToken>> Tokens,
+  ffi.Pointer<ffi.Uint32> NumTokens,
+);
+
 typedef _c_clang_annotateTokens = ffi.Void Function(
   ffi.Pointer<CXTranslationUnitImpl> TU,
   ffi.Pointer<CXToken> Tokens,
@@ -4073,6 +9543,34 @@
   int NumTokens,
 );
 
+typedef _c_clang_getCursorKindSpelling = CXString Function(
+  ffi.Int32 Kind,
+);
+
+typedef _dart_clang_getCursorKindSpelling = CXString Function(
+  int Kind,
+);
+
+typedef _c_clang_getDefinitionSpellingAndExtent = ffi.Void Function(
+  CXCursor arg0,
+  ffi.Pointer<ffi.Pointer<ffi.Int8>> startBuf,
+  ffi.Pointer<ffi.Pointer<ffi.Int8>> endBuf,
+  ffi.Pointer<ffi.Uint32> startLine,
+  ffi.Pointer<ffi.Uint32> startColumn,
+  ffi.Pointer<ffi.Uint32> endLine,
+  ffi.Pointer<ffi.Uint32> endColumn,
+);
+
+typedef _dart_clang_getDefinitionSpellingAndExtent = void Function(
+  CXCursor arg0,
+  ffi.Pointer<ffi.Pointer<ffi.Int8>> startBuf,
+  ffi.Pointer<ffi.Pointer<ffi.Int8>> endBuf,
+  ffi.Pointer<ffi.Uint32> startLine,
+  ffi.Pointer<ffi.Uint32> startColumn,
+  ffi.Pointer<ffi.Uint32> endLine,
+  ffi.Pointer<ffi.Uint32> endColumn,
+);
+
 typedef _c_clang_enableStackTraces = ffi.Void Function();
 
 typedef _dart_clang_enableStackTraces = void Function();
@@ -4103,6 +9601,16 @@
   int chunk_number,
 );
 
+typedef _c_clang_getCompletionChunkText = CXString Function(
+  ffi.Pointer<ffi.Void> completion_string,
+  ffi.Uint32 chunk_number,
+);
+
+typedef _dart_clang_getCompletionChunkText = CXString Function(
+  ffi.Pointer<ffi.Void> completion_string,
+  int chunk_number,
+);
+
 typedef _c_clang_getCompletionChunkCompletionString = ffi.Pointer<ffi.Void>
     Function(
   ffi.Pointer<ffi.Void> completion_string,
@@ -4147,6 +9655,42 @@
   ffi.Pointer<ffi.Void> completion_string,
 );
 
+typedef _c_clang_getCompletionAnnotation = CXString Function(
+  ffi.Pointer<ffi.Void> completion_string,
+  ffi.Uint32 annotation_number,
+);
+
+typedef _dart_clang_getCompletionAnnotation = CXString Function(
+  ffi.Pointer<ffi.Void> completion_string,
+  int annotation_number,
+);
+
+typedef _c_clang_getCompletionParent = CXString Function(
+  ffi.Pointer<ffi.Void> completion_string,
+  ffi.Pointer<ffi.Int32> kind,
+);
+
+typedef _dart_clang_getCompletionParent = CXString Function(
+  ffi.Pointer<ffi.Void> completion_string,
+  ffi.Pointer<ffi.Int32> kind,
+);
+
+typedef _c_clang_getCompletionBriefComment = CXString Function(
+  ffi.Pointer<ffi.Void> completion_string,
+);
+
+typedef _dart_clang_getCompletionBriefComment = CXString Function(
+  ffi.Pointer<ffi.Void> completion_string,
+);
+
+typedef _c_clang_getCursorCompletionString = ffi.Pointer<ffi.Void> Function(
+  CXCursor cursor,
+);
+
+typedef _dart_clang_getCursorCompletionString = ffi.Pointer<ffi.Void> Function(
+  CXCursor cursor,
+);
+
 typedef _c_clang_getCompletionNumFixIts = ffi.Uint32 Function(
   ffi.Pointer<CXCodeCompleteResults> results,
   ffi.Uint32 completion_index,
@@ -4157,6 +9701,20 @@
   int completion_index,
 );
 
+typedef _c_clang_getCompletionFixIt = CXString Function(
+  ffi.Pointer<CXCodeCompleteResults> results,
+  ffi.Uint32 completion_index,
+  ffi.Uint32 fixit_index,
+  ffi.Pointer<CXSourceRange> replacement_range,
+);
+
+typedef _dart_clang_getCompletionFixIt = CXString Function(
+  ffi.Pointer<CXCodeCompleteResults> results,
+  int completion_index,
+  int fixit_index,
+  ffi.Pointer<CXSourceRange> replacement_range,
+);
+
 typedef _c_clang_defaultCodeCompleteOptions = ffi.Uint32 Function();
 
 typedef _dart_clang_defaultCodeCompleteOptions = int Function();
@@ -4236,6 +9794,26 @@
   ffi.Pointer<ffi.Uint32> IsIncomplete,
 );
 
+typedef _c_clang_codeCompleteGetContainerUSR = CXString Function(
+  ffi.Pointer<CXCodeCompleteResults> Results,
+);
+
+typedef _dart_clang_codeCompleteGetContainerUSR = CXString Function(
+  ffi.Pointer<CXCodeCompleteResults> Results,
+);
+
+typedef _c_clang_codeCompleteGetObjCSelector = CXString Function(
+  ffi.Pointer<CXCodeCompleteResults> Results,
+);
+
+typedef _dart_clang_codeCompleteGetObjCSelector = CXString Function(
+  ffi.Pointer<CXCodeCompleteResults> Results,
+);
+
+typedef _c_clang_getClangVersion = CXString Function();
+
+typedef _dart_clang_getClangVersion = CXString Function();
+
 typedef _c_clang_toggleCrashRecovery = ffi.Void Function(
   ffi.Uint32 isEnabled,
 );
@@ -4263,6 +9841,14 @@
   ffi.Pointer<ffi.Void> client_data,
 );
 
+typedef _c_clang_Cursor_Evaluate = ffi.Pointer<ffi.Void> Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_Evaluate = ffi.Pointer<ffi.Void> Function(
+  CXCursor C,
+);
+
 typedef _c_clang_EvalResult_getKind = ffi.Int32 Function(
   ffi.Pointer<ffi.Void> E,
 );
@@ -4375,6 +9961,30 @@
   ffi.Pointer<ffi.Void> arg0,
 );
 
+typedef _c_clang_findReferencesInFile = ffi.Int32 Function(
+  CXCursor cursor,
+  ffi.Pointer<ffi.Void> file,
+  CXCursorAndRangeVisitor visitor,
+);
+
+typedef _dart_clang_findReferencesInFile = int Function(
+  CXCursor cursor,
+  ffi.Pointer<ffi.Void> file,
+  CXCursorAndRangeVisitor visitor,
+);
+
+typedef _c_clang_findIncludesInFile = ffi.Int32 Function(
+  ffi.Pointer<CXTranslationUnitImpl> TU,
+  ffi.Pointer<ffi.Void> file,
+  CXCursorAndRangeVisitor visitor,
+);
+
+typedef _dart_clang_findIncludesInFile = int Function(
+  ffi.Pointer<CXTranslationUnitImpl> TU,
+  ffi.Pointer<ffi.Void> file,
+  CXCursorAndRangeVisitor visitor,
+);
+
 typedef _c_clang_index_isEntityObjCContainerKind = ffi.Int32 Function(
   ffi.Int32 arg0,
 );
@@ -4583,18 +10193,61 @@
   ffi.Pointer<CXTranslationUnitImpl> arg5,
 );
 
+typedef _c_clang_indexLoc_getFileLocation = ffi.Void Function(
+  CXIdxLoc loc,
+  ffi.Pointer<ffi.Pointer<ffi.Void>> indexFile,
+  ffi.Pointer<ffi.Pointer<ffi.Void>> file,
+  ffi.Pointer<ffi.Uint32> line,
+  ffi.Pointer<ffi.Uint32> column,
+  ffi.Pointer<ffi.Uint32> offset,
+);
+
+typedef _dart_clang_indexLoc_getFileLocation = void Function(
+  CXIdxLoc loc,
+  ffi.Pointer<ffi.Pointer<ffi.Void>> indexFile,
+  ffi.Pointer<ffi.Pointer<ffi.Void>> file,
+  ffi.Pointer<ffi.Uint32> line,
+  ffi.Pointer<ffi.Uint32> column,
+  ffi.Pointer<ffi.Uint32> offset,
+);
+
+typedef _c_clang_indexLoc_getCXSourceLocation = CXSourceLocation Function(
+  CXIdxLoc loc,
+);
+
+typedef _dart_clang_indexLoc_getCXSourceLocation = CXSourceLocation Function(
+  CXIdxLoc loc,
+);
+
+typedef CXFieldVisitor = ffi.Int32 Function(
+  CXCursor,
+  ffi.Pointer<ffi.Void>,
+);
+
+typedef _c_clang_Type_visitFields = ffi.Uint32 Function(
+  CXType T,
+  ffi.Pointer<ffi.NativeFunction<CXFieldVisitor>> visitor,
+  ffi.Pointer<ffi.Void> client_data,
+);
+
+typedef _dart_clang_Type_visitFields = int Function(
+  CXType T,
+  ffi.Pointer<ffi.NativeFunction<CXFieldVisitor>> visitor,
+  ffi.Pointer<ffi.Void> client_data,
+);
+
 typedef _typedefC_2 = ffi.Int32 Function(
   ffi.Pointer<ffi.Void>,
-  ffi.Pointer<ffi.Void>,
+  CXCursor,
+  CXSourceRange,
 );
 
-typedef _typedefC_3 = ffi.Void Function(
-  ffi.Pointer<ffi.Void>,
+typedef _typedefC_3 = ffi.Int32 Function(
   ffi.Pointer<ffi.Void>,
   ffi.Pointer<ffi.Void>,
 );
 
-typedef _typedefC_4 = ffi.Pointer<ffi.Void> Function(
+typedef _typedefC_4 = ffi.Void Function(
   ffi.Pointer<ffi.Void>,
   ffi.Pointer<ffi.Void>,
   ffi.Pointer<ffi.Void>,
@@ -4602,25 +10255,31 @@
 
 typedef _typedefC_5 = ffi.Pointer<ffi.Void> Function(
   ffi.Pointer<ffi.Void>,
-  ffi.Pointer<CXIdxIncludedFileInfo>,
+  ffi.Pointer<ffi.Void>,
+  ffi.Pointer<ffi.Void>,
 );
 
 typedef _typedefC_6 = ffi.Pointer<ffi.Void> Function(
   ffi.Pointer<ffi.Void>,
-  ffi.Pointer<CXIdxImportedASTFileInfo>,
+  ffi.Pointer<CXIdxIncludedFileInfo>,
 );
 
 typedef _typedefC_7 = ffi.Pointer<ffi.Void> Function(
   ffi.Pointer<ffi.Void>,
+  ffi.Pointer<CXIdxImportedASTFileInfo>,
+);
+
+typedef _typedefC_8 = ffi.Pointer<ffi.Void> Function(
+  ffi.Pointer<ffi.Void>,
   ffi.Pointer<ffi.Void>,
 );
 
-typedef _typedefC_8 = ffi.Void Function(
+typedef _typedefC_9 = ffi.Void Function(
   ffi.Pointer<ffi.Void>,
   ffi.Pointer<CXIdxDeclInfo>,
 );
 
-typedef _typedefC_9 = ffi.Void Function(
+typedef _typedefC_10 = ffi.Void Function(
   ffi.Pointer<ffi.Void>,
   ffi.Pointer<CXIdxEntityRefInfo>,
 );
diff --git a/lib/src/code_generator/struc.dart b/lib/src/code_generator/struc.dart
index ee8a523..8958139 100644
--- a/lib/src/code_generator/struc.dart
+++ b/lib/src/code_generator/struc.dart
@@ -35,12 +35,18 @@
 /// }
 /// ```
 class Struc extends NoLookUpBinding {
+  /// Marker for if a struct definition is complete.
+  ///
+  /// A function can be safely pass this struct by value if it's complete.
+  bool isInComplete;
+
   List<Member> members;
 
   Struc({
     String? usr,
     String? originalName,
     required String name,
+    this.isInComplete = false,
     String? dartDoc,
     List<Member>? members,
   })  : members = members ?? [],
diff --git a/lib/src/code_generator/type.dart b/lib/src/code_generator/type.dart
index 014413a..f6e5001 100644
--- a/lib/src/code_generator/type.dart
+++ b/lib/src/code_generator/type.dart
@@ -162,6 +162,10 @@
   bool get isPrimitive =>
       (broadType == BroadType.NativeType || broadType == BroadType.Boolean);
 
+  /// Returns true if the type is a [Struc] and is incomplete.
+  bool get isIncompleteStruct =>
+      broadType == BroadType.Struct && struc!.isInComplete;
+
   String getCType(Writer w) {
     switch (broadType) {
       case BroadType.NativeType:
diff --git a/lib/src/header_parser/sub_parsers/functiondecl_parser.dart b/lib/src/header_parser/sub_parsers/functiondecl_parser.dart
index 2b005d8..acb223a 100644
--- a/lib/src/header_parser/sub_parsers/functiondecl_parser.dart
+++ b/lib/src/header_parser/sub_parsers/functiondecl_parser.dart
@@ -18,7 +18,7 @@
 /// Holds temporary information regarding [Func] while parsing.
 class _ParserFunc {
   Func? func;
-  bool structByValueParameter = false;
+  bool incompleteStructParameter = false;
   bool unimplementedParameterType = false;
   _ParserFunc();
 }
@@ -28,8 +28,6 @@
 /// Parses a function declaration.
 Func? parseFunctionDeclaration(Pointer<clang_types.CXCursor> cursor) {
   _stack.push(_ParserFunc());
-  _stack.top.structByValueParameter = false;
-  _stack.top.unimplementedParameterType = false;
 
   final funcUsr = cursor.usr();
   final funcName = cursor.spelling();
@@ -39,12 +37,11 @@
     final rt = _getFunctionReturnType(cursor);
     final parameters = _getParameters(cursor, funcName);
 
-    //TODO(3): Remove this when support for Structs by value arrives.
-    if (rt.broadType == BroadType.Struct || _stack.top.structByValueParameter) {
+    if (rt.isIncompleteStruct || _stack.top.incompleteStructParameter) {
       _logger.fine(
-          '---- Removed Function, reason: struct pass/return by value: ${cursor.completeStringRepr()}');
+          '---- Removed Function, reason: Incomplete struct pass/return by value: ${cursor.completeStringRepr()}');
       _logger.warning(
-          "Skipped Function '$funcName', struct pass/return by value not supported.");
+          "Skipped Function '$funcName', Incomplete struct pass/return by value not supported.");
       return _stack
           .pop()
           .func; // Returning null so that [addToBindings] function excludes this.
@@ -95,10 +92,11 @@
     _logger.finer('===== parameter: ${paramCursor.completeStringRepr()}');
 
     final pt = _getParameterType(paramCursor);
-    //TODO(3): Remove this when support for Structs by value arrives.
-    if (pt.broadType == BroadType.Struct) {
-      _stack.top.structByValueParameter = true;
+    if (pt.isIncompleteStruct) {
+      _stack.top.incompleteStructParameter = true;
     } else if (pt.getBaseType().broadType == BroadType.Unimplemented) {
+      _logger
+          .finer('Unimplemented type: ${pt.getBaseType().unimplementedReason}');
       _stack.top.unimplementedParameterType = true;
     }
 
diff --git a/lib/src/header_parser/sub_parsers/structdecl_parser.dart b/lib/src/header_parser/sub_parsers/structdecl_parser.dart
index 0c014d7..ffa4109 100644
--- a/lib/src/header_parser/sub_parsers/structdecl_parser.dart
+++ b/lib/src/header_parser/sub_parsers/structdecl_parser.dart
@@ -5,6 +5,7 @@
 import 'dart:ffi';
 
 import 'package:ffigen/src/code_generator.dart';
+import 'package:ffigen/src/strings.dart';
 import 'package:logging/logging.dart';
 
 import '../clang_bindings/clang_bindings.dart' as clang_types;
@@ -22,6 +23,16 @@
   bool arrayMember = false;
   bool bitFieldMember = false;
   bool dartHandleMember = false;
+  bool incompleteStructMember = false;
+
+  bool get isInComplete =>
+      unimplementedMemberType ||
+      flexibleArrayMember ||
+      (arrayMember && !config.arrayWorkaround) ||
+      bitFieldMember ||
+      (dartHandleMember && config.useDartHandle) ||
+      incompleteStructMember;
+
   _ParsedStruc();
 }
 
@@ -83,38 +94,44 @@
 
   visitChildrenResultChecker(resultCode);
 
-  // Returning null to exclude the struct members as it has a struct by value field.
   if (_stack.top.arrayMember && !config.arrayWorkaround) {
     _logger.fine(
         '---- Removed Struct members, reason: struct has array members ${cursor.completeStringRepr()}');
     _logger.warning(
         'Removed All Struct Members from: ${_stack.top.struc!.name}(${_stack.top.struc!.originalName}), Array members not supported');
-    return _stack.top.struc!.members.clear();
   } else if (_stack.top.unimplementedMemberType) {
     _logger.fine(
         '---- Removed Struct members, reason: member with unimplementedtype ${cursor.completeStringRepr()}');
     _logger.warning(
         'Removed All Struct Members from ${_stack.top.struc!.name}(${_stack.top.struc!.originalName}), struct member has an unsupported type.');
-    return _stack.top.struc!.members.clear();
   } else if (_stack.top.flexibleArrayMember) {
     _logger.fine(
         '---- Removed Struct members, reason: incomplete array member ${cursor.completeStringRepr()}');
     _logger.warning(
         'Removed All Struct Members from ${_stack.top.struc!.name}(${_stack.top.struc!.originalName}), Flexible array members not supported.');
-    return _stack.top.struc!.members.clear();
   } else if (_stack.top.bitFieldMember) {
     _logger.fine(
         '---- Removed Struct members, reason: bitfield members ${cursor.completeStringRepr()}');
     _logger.warning(
         'Removed All Struct Members from ${_stack.top.struc!.name}(${_stack.top.struc!.originalName}), Bit Field members not supported.');
-    return _stack.top.struc!.members.clear();
-  } else if (_stack.top.dartHandleMember) {
+  } else if (_stack.top.dartHandleMember && config.useDartHandle) {
     _logger.fine(
         '---- Removed Struct members, reason: Dart_Handle member. ${cursor.completeStringRepr()}');
     _logger.warning(
         'Removed All Struct Members from ${_stack.top.struc!.name}(${_stack.top.struc!.originalName}), Dart_Handle member not supported.');
-    return _stack.top.struc!.members.clear();
+  } else if (_stack.top.incompleteStructMember) {
+    _logger.fine(
+        '---- Removed Struct members, reason: Incomplete Nested Struct member. ${cursor.completeStringRepr()}');
+    _logger.warning(
+        'Removed All Struct Members from ${_stack.top.struc!.name}(${_stack.top.struc!.originalName}), Incomplete Nested Struct member not supported.');
   }
+
+  // Clear all struct members if struct is incomplete.
+  if (_stack.top.isInComplete) {
+    _stack.top.struc!.members.clear();
+  }
+
+  _stack.top.struc!.isInComplete = _stack.top.isInComplete;
 }
 
 /// Visitor for the struct cursor [CXCursorKind.CXCursor_StructDecl].
@@ -137,6 +154,8 @@
         _stack.top.bitFieldMember = true;
       } else if (mt.broadType == BroadType.Handle) {
         _stack.top.dartHandleMember = true;
+      } else if (mt.isIncompleteStruct) {
+        _stack.top.incompleteStructMember = true;
       }
 
       if (mt.getBaseType().broadType == BroadType.Unimplemented) {
diff --git a/lib/src/header_parser/type_extractor/extractor.dart b/lib/src/header_parser/type_extractor/extractor.dart
index defa1d3..d1a7883 100644
--- a/lib/src/header_parser/type_extractor/extractor.dart
+++ b/lib/src/header_parser/type_extractor/extractor.dart
@@ -158,8 +158,9 @@
     final t = clang.clang_getArgType_wrap(cxtype, i);
     final pt = t.toCodeGenTypeAndDispose();
 
-    if (pt.broadType == BroadType.Struct) {
-      return Type.unimplemented('Struct by value in function parameter.');
+    if (pt.isIncompleteStruct) {
+      return Type.unimplemented(
+          'Incomplete Struct by value in function parameter.');
     } else if (pt.getBaseType().broadType == BroadType.Unimplemented) {
       return Type.unimplemented('Function parameter has an unsupported type.');
     }
diff --git a/pubspec.yaml b/pubspec.yaml
index 44f1f1c..d3c8da0 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -3,7 +3,7 @@
 # BSD-style license that can be found in the LICENSE file.
 
 name: ffigen
-version: 2.0.0-dev.0
+version: 2.0.0-dev.1
 homepage: https://github.com/dart-lang/ffigen
 description: Experimental generator for FFI bindings, using LibClang to parse C header files.
 
diff --git a/test/header_parser_tests/function_n_struct.h b/test/header_parser_tests/function_n_struct.h
index 629c0ba..bae5f40 100644
--- a/test/header_parser_tests/function_n_struct.h
+++ b/test/header_parser_tests/function_n_struct.h
@@ -12,6 +12,7 @@
     struct Struct1 a;
 };
 
+// All members should be removed, Flexible array members are not supported.
 struct Struct3
 {
     int a;
@@ -21,8 +22,15 @@
 // All members should be removed, Bit fields are not supported.
 struct Struct4
 {
-    int a:3;
-    int :2; // Unnamed bit field.
+    int a : 3;
+    int : 2; // Unnamed bit field.
+};
+
+// All members should be removed, Incomplete struct members are not supported.
+struct Struct5
+{
+    int a;
+    struct Struct3 s; // Incomplete nested struct.
 };
 
 void func1(struct Struct2 *s);
diff --git a/test/header_parser_tests/function_n_struct_test.dart b/test/header_parser_tests/function_n_struct_test.dart
index f8852d5..aec4502 100644
--- a/test/header_parser_tests/function_n_struct_test.dart
+++ b/test/header_parser_tests/function_n_struct_test.dart
@@ -32,6 +32,9 @@
       );
     });
 
+    test('Total bindings count', () {
+      expect(actual.bindings.length, expected.bindings.length);
+    });
     test('func1 struct pointer parameter', () {
       expect(actual.getBindingAsString('func1'),
           expected.getBindingAsString('func1'));
@@ -50,6 +53,9 @@
     test('Struct4 bit field member', () {
       expect((actual.getBinding('Struct4') as Struc).members.isEmpty, true);
     });
+    test('Struct5 incompleted struct member', () {
+      expect((actual.getBinding('Struct5') as Struc).members.isEmpty, true);
+    });
   });
 }
 
@@ -97,6 +103,7 @@
           type: Type.struct(struc1),
         ),
       ]),
+      Struc(name: 'Struct5'),
     ],
   );
 }
diff --git a/test/large_integration_tests/_expected_libclang_bindings.dart b/test/large_integration_tests/_expected_libclang_bindings.dart
index 60698fc..e0abce7 100644
--- a/test/large_integration_tests/_expected_libclang_bindings.dart
+++ b/test/large_integration_tests/_expected_libclang_bindings.dart
@@ -11,6 +11,32 @@
   /// The symbols are looked up in [dynamicLibrary].
   LibClang(ffi.DynamicLibrary dynamicLibrary) : _dylib = dynamicLibrary;
 
+  /// Retrieve the character data associated with the given string.
+  ffi.Pointer<ffi.Int8> clang_getCString(
+    CXString string,
+  ) {
+    return (_clang_getCString ??=
+        _dylib.lookupFunction<_c_clang_getCString, _dart_clang_getCString>(
+            'clang_getCString'))(
+      string,
+    );
+  }
+
+  _dart_clang_getCString? _clang_getCString;
+
+  /// Free the given string.
+  void clang_disposeString(
+    CXString string,
+  ) {
+    return (_clang_disposeString ??= _dylib.lookupFunction<
+        _c_clang_disposeString,
+        _dart_clang_disposeString>('clang_disposeString'))(
+      string,
+    );
+  }
+
+  _dart_clang_disposeString? _clang_disposeString;
+
   /// Free the given string set.
   void clang_disposeStringSet(
     ffi.Pointer<CXStringSet> set_1,
@@ -297,6 +323,19 @@
   _dart_clang_CXIndex_setInvocationEmissionPathOption?
       _clang_CXIndex_setInvocationEmissionPathOption;
 
+  /// Retrieve the complete file and path name of the given file.
+  CXString clang_getFileName(
+    ffi.Pointer<ffi.Void> SFile,
+  ) {
+    return (_clang_getFileName ??=
+        _dylib.lookupFunction<_c_clang_getFileName, _dart_clang_getFileName>(
+            'clang_getFileName'))(
+      SFile,
+    );
+  }
+
+  _dart_clang_getFileName? _clang_getFileName;
+
   /// Retrieve the last modification time of the given file.
   int clang_getFileTime(
     ffi.Pointer<ffi.Void> SFile,
@@ -391,6 +430,299 @@
 
   _dart_clang_File_isEqual? _clang_File_isEqual;
 
+  /// Returns the real path name of file.
+  CXString clang_File_tryGetRealPathName(
+    ffi.Pointer<ffi.Void> file,
+  ) {
+    return (_clang_File_tryGetRealPathName ??= _dylib.lookupFunction<
+        _c_clang_File_tryGetRealPathName,
+        _dart_clang_File_tryGetRealPathName>('clang_File_tryGetRealPathName'))(
+      file,
+    );
+  }
+
+  _dart_clang_File_tryGetRealPathName? _clang_File_tryGetRealPathName;
+
+  /// Retrieve a NULL (invalid) source location.
+  CXSourceLocation clang_getNullLocation() {
+    return (_clang_getNullLocation ??= _dylib.lookupFunction<
+        _c_clang_getNullLocation,
+        _dart_clang_getNullLocation>('clang_getNullLocation'))();
+  }
+
+  _dart_clang_getNullLocation? _clang_getNullLocation;
+
+  /// Determine whether two source locations, which must refer into the same
+  /// translation unit, refer to exactly the same point in the source code.
+  int clang_equalLocations(
+    CXSourceLocation loc1,
+    CXSourceLocation loc2,
+  ) {
+    return (_clang_equalLocations ??= _dylib.lookupFunction<
+        _c_clang_equalLocations,
+        _dart_clang_equalLocations>('clang_equalLocations'))(
+      loc1,
+      loc2,
+    );
+  }
+
+  _dart_clang_equalLocations? _clang_equalLocations;
+
+  /// Retrieves the source location associated with a given file/line/column in
+  /// a particular translation unit.
+  CXSourceLocation clang_getLocation(
+    ffi.Pointer<CXTranslationUnitImpl> tu,
+    ffi.Pointer<ffi.Void> file,
+    int line,
+    int column,
+  ) {
+    return (_clang_getLocation ??=
+        _dylib.lookupFunction<_c_clang_getLocation, _dart_clang_getLocation>(
+            'clang_getLocation'))(
+      tu,
+      file,
+      line,
+      column,
+    );
+  }
+
+  _dart_clang_getLocation? _clang_getLocation;
+
+  /// Retrieves the source location associated with a given character offset in
+  /// a particular translation unit.
+  CXSourceLocation clang_getLocationForOffset(
+    ffi.Pointer<CXTranslationUnitImpl> tu,
+    ffi.Pointer<ffi.Void> file,
+    int offset,
+  ) {
+    return (_clang_getLocationForOffset ??= _dylib.lookupFunction<
+        _c_clang_getLocationForOffset,
+        _dart_clang_getLocationForOffset>('clang_getLocationForOffset'))(
+      tu,
+      file,
+      offset,
+    );
+  }
+
+  _dart_clang_getLocationForOffset? _clang_getLocationForOffset;
+
+  /// Returns non-zero if the given source location is in a system header.
+  int clang_Location_isInSystemHeader(
+    CXSourceLocation location,
+  ) {
+    return (_clang_Location_isInSystemHeader ??= _dylib.lookupFunction<
+            _c_clang_Location_isInSystemHeader,
+            _dart_clang_Location_isInSystemHeader>(
+        'clang_Location_isInSystemHeader'))(
+      location,
+    );
+  }
+
+  _dart_clang_Location_isInSystemHeader? _clang_Location_isInSystemHeader;
+
+  /// Returns non-zero if the given source location is in the main file of the
+  /// corresponding translation unit.
+  int clang_Location_isFromMainFile(
+    CXSourceLocation location,
+  ) {
+    return (_clang_Location_isFromMainFile ??= _dylib.lookupFunction<
+        _c_clang_Location_isFromMainFile,
+        _dart_clang_Location_isFromMainFile>('clang_Location_isFromMainFile'))(
+      location,
+    );
+  }
+
+  _dart_clang_Location_isFromMainFile? _clang_Location_isFromMainFile;
+
+  /// Retrieve a NULL (invalid) source range.
+  CXSourceRange clang_getNullRange() {
+    return (_clang_getNullRange ??=
+        _dylib.lookupFunction<_c_clang_getNullRange, _dart_clang_getNullRange>(
+            'clang_getNullRange'))();
+  }
+
+  _dart_clang_getNullRange? _clang_getNullRange;
+
+  /// Retrieve a source range given the beginning and ending source locations.
+  CXSourceRange clang_getRange(
+    CXSourceLocation begin,
+    CXSourceLocation end,
+  ) {
+    return (_clang_getRange ??=
+        _dylib.lookupFunction<_c_clang_getRange, _dart_clang_getRange>(
+            'clang_getRange'))(
+      begin,
+      end,
+    );
+  }
+
+  _dart_clang_getRange? _clang_getRange;
+
+  /// Determine whether two ranges are equivalent.
+  int clang_equalRanges(
+    CXSourceRange range1,
+    CXSourceRange range2,
+  ) {
+    return (_clang_equalRanges ??=
+        _dylib.lookupFunction<_c_clang_equalRanges, _dart_clang_equalRanges>(
+            'clang_equalRanges'))(
+      range1,
+      range2,
+    );
+  }
+
+  _dart_clang_equalRanges? _clang_equalRanges;
+
+  /// Returns non-zero if range is null.
+  int clang_Range_isNull(
+    CXSourceRange range,
+  ) {
+    return (_clang_Range_isNull ??=
+        _dylib.lookupFunction<_c_clang_Range_isNull, _dart_clang_Range_isNull>(
+            'clang_Range_isNull'))(
+      range,
+    );
+  }
+
+  _dart_clang_Range_isNull? _clang_Range_isNull;
+
+  /// Retrieve the file, line, column, and offset represented by the given
+  /// source location.
+  void clang_getExpansionLocation(
+    CXSourceLocation location,
+    ffi.Pointer<ffi.Pointer<ffi.Void>> file,
+    ffi.Pointer<ffi.Uint32> line,
+    ffi.Pointer<ffi.Uint32> column,
+    ffi.Pointer<ffi.Uint32> offset,
+  ) {
+    return (_clang_getExpansionLocation ??= _dylib.lookupFunction<
+        _c_clang_getExpansionLocation,
+        _dart_clang_getExpansionLocation>('clang_getExpansionLocation'))(
+      location,
+      file,
+      line,
+      column,
+      offset,
+    );
+  }
+
+  _dart_clang_getExpansionLocation? _clang_getExpansionLocation;
+
+  /// Retrieve the file, line and column represented by the given source
+  /// location, as specified in a # line directive.
+  void clang_getPresumedLocation(
+    CXSourceLocation location,
+    ffi.Pointer<CXString> filename,
+    ffi.Pointer<ffi.Uint32> line,
+    ffi.Pointer<ffi.Uint32> column,
+  ) {
+    return (_clang_getPresumedLocation ??= _dylib.lookupFunction<
+        _c_clang_getPresumedLocation,
+        _dart_clang_getPresumedLocation>('clang_getPresumedLocation'))(
+      location,
+      filename,
+      line,
+      column,
+    );
+  }
+
+  _dart_clang_getPresumedLocation? _clang_getPresumedLocation;
+
+  /// Legacy API to retrieve the file, line, column, and offset represented by
+  /// the given source location.
+  void clang_getInstantiationLocation(
+    CXSourceLocation location,
+    ffi.Pointer<ffi.Pointer<ffi.Void>> file,
+    ffi.Pointer<ffi.Uint32> line,
+    ffi.Pointer<ffi.Uint32> column,
+    ffi.Pointer<ffi.Uint32> offset,
+  ) {
+    return (_clang_getInstantiationLocation ??= _dylib.lookupFunction<
+            _c_clang_getInstantiationLocation,
+            _dart_clang_getInstantiationLocation>(
+        'clang_getInstantiationLocation'))(
+      location,
+      file,
+      line,
+      column,
+      offset,
+    );
+  }
+
+  _dart_clang_getInstantiationLocation? _clang_getInstantiationLocation;
+
+  /// Retrieve the file, line, column, and offset represented by the given
+  /// source location.
+  void clang_getSpellingLocation(
+    CXSourceLocation location,
+    ffi.Pointer<ffi.Pointer<ffi.Void>> file,
+    ffi.Pointer<ffi.Uint32> line,
+    ffi.Pointer<ffi.Uint32> column,
+    ffi.Pointer<ffi.Uint32> offset,
+  ) {
+    return (_clang_getSpellingLocation ??= _dylib.lookupFunction<
+        _c_clang_getSpellingLocation,
+        _dart_clang_getSpellingLocation>('clang_getSpellingLocation'))(
+      location,
+      file,
+      line,
+      column,
+      offset,
+    );
+  }
+
+  _dart_clang_getSpellingLocation? _clang_getSpellingLocation;
+
+  /// Retrieve the file, line, column, and offset represented by the given
+  /// source location.
+  void clang_getFileLocation(
+    CXSourceLocation location,
+    ffi.Pointer<ffi.Pointer<ffi.Void>> file,
+    ffi.Pointer<ffi.Uint32> line,
+    ffi.Pointer<ffi.Uint32> column,
+    ffi.Pointer<ffi.Uint32> offset,
+  ) {
+    return (_clang_getFileLocation ??= _dylib.lookupFunction<
+        _c_clang_getFileLocation,
+        _dart_clang_getFileLocation>('clang_getFileLocation'))(
+      location,
+      file,
+      line,
+      column,
+      offset,
+    );
+  }
+
+  _dart_clang_getFileLocation? _clang_getFileLocation;
+
+  /// Retrieve a source location representing the first character within a
+  /// source range.
+  CXSourceLocation clang_getRangeStart(
+    CXSourceRange range,
+  ) {
+    return (_clang_getRangeStart ??= _dylib.lookupFunction<
+        _c_clang_getRangeStart,
+        _dart_clang_getRangeStart>('clang_getRangeStart'))(
+      range,
+    );
+  }
+
+  _dart_clang_getRangeStart? _clang_getRangeStart;
+
+  /// Retrieve a source location representing the last character within a source
+  /// range.
+  CXSourceLocation clang_getRangeEnd(
+    CXSourceRange range,
+  ) {
+    return (_clang_getRangeEnd ??=
+        _dylib.lookupFunction<_c_clang_getRangeEnd, _dart_clang_getRangeEnd>(
+            'clang_getRangeEnd'))(
+      range,
+    );
+  }
+
+  _dart_clang_getRangeEnd? _clang_getRangeEnd;
+
   /// Retrieve all ranges that were skipped by the preprocessor.
   ffi.Pointer<CXSourceRangeList> clang_getSkippedRanges(
     ffi.Pointer<CXTranslationUnitImpl> tu,
@@ -559,6 +891,21 @@
 
   _dart_clang_disposeDiagnostic? _clang_disposeDiagnostic;
 
+  /// Format the given diagnostic in a manner that is suitable for display.
+  CXString clang_formatDiagnostic(
+    ffi.Pointer<ffi.Void> Diagnostic,
+    int Options,
+  ) {
+    return (_clang_formatDiagnostic ??= _dylib.lookupFunction<
+        _c_clang_formatDiagnostic,
+        _dart_clang_formatDiagnostic>('clang_formatDiagnostic'))(
+      Diagnostic,
+      Options,
+    );
+  }
+
+  _dart_clang_formatDiagnostic? _clang_formatDiagnostic;
+
   /// Retrieve the set of display options most similar to the default behavior
   /// of the clang compiler.
   int clang_defaultDiagnosticDisplayOptions() {
@@ -584,6 +931,47 @@
 
   _dart_clang_getDiagnosticSeverity? _clang_getDiagnosticSeverity;
 
+  /// Retrieve the source location of the given diagnostic.
+  CXSourceLocation clang_getDiagnosticLocation(
+    ffi.Pointer<ffi.Void> arg0,
+  ) {
+    return (_clang_getDiagnosticLocation ??= _dylib.lookupFunction<
+        _c_clang_getDiagnosticLocation,
+        _dart_clang_getDiagnosticLocation>('clang_getDiagnosticLocation'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_getDiagnosticLocation? _clang_getDiagnosticLocation;
+
+  /// Retrieve the text of the given diagnostic.
+  CXString clang_getDiagnosticSpelling(
+    ffi.Pointer<ffi.Void> arg0,
+  ) {
+    return (_clang_getDiagnosticSpelling ??= _dylib.lookupFunction<
+        _c_clang_getDiagnosticSpelling,
+        _dart_clang_getDiagnosticSpelling>('clang_getDiagnosticSpelling'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_getDiagnosticSpelling? _clang_getDiagnosticSpelling;
+
+  /// Retrieve the name of the command-line option that enabled this diagnostic.
+  CXString clang_getDiagnosticOption(
+    ffi.Pointer<ffi.Void> Diag,
+    ffi.Pointer<CXString> Disable,
+  ) {
+    return (_clang_getDiagnosticOption ??= _dylib.lookupFunction<
+        _c_clang_getDiagnosticOption,
+        _dart_clang_getDiagnosticOption>('clang_getDiagnosticOption'))(
+      Diag,
+      Disable,
+    );
+  }
+
+  _dart_clang_getDiagnosticOption? _clang_getDiagnosticOption;
+
   /// Retrieve the category number for this diagnostic.
   int clang_getDiagnosticCategory(
     ffi.Pointer<ffi.Void> arg0,
@@ -597,6 +985,35 @@
 
   _dart_clang_getDiagnosticCategory? _clang_getDiagnosticCategory;
 
+  /// Retrieve the name of a particular diagnostic category. This is now
+  /// deprecated. Use clang_getDiagnosticCategoryText() instead.
+  CXString clang_getDiagnosticCategoryName(
+    int Category,
+  ) {
+    return (_clang_getDiagnosticCategoryName ??= _dylib.lookupFunction<
+            _c_clang_getDiagnosticCategoryName,
+            _dart_clang_getDiagnosticCategoryName>(
+        'clang_getDiagnosticCategoryName'))(
+      Category,
+    );
+  }
+
+  _dart_clang_getDiagnosticCategoryName? _clang_getDiagnosticCategoryName;
+
+  /// Retrieve the diagnostic category text for a given diagnostic.
+  CXString clang_getDiagnosticCategoryText(
+    ffi.Pointer<ffi.Void> arg0,
+  ) {
+    return (_clang_getDiagnosticCategoryText ??= _dylib.lookupFunction<
+            _c_clang_getDiagnosticCategoryText,
+            _dart_clang_getDiagnosticCategoryText>(
+        'clang_getDiagnosticCategoryText'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_getDiagnosticCategoryText? _clang_getDiagnosticCategoryText;
+
   /// Determine the number of source ranges associated with the given
   /// diagnostic.
   int clang_getDiagnosticNumRanges(
@@ -611,6 +1028,21 @@
 
   _dart_clang_getDiagnosticNumRanges? _clang_getDiagnosticNumRanges;
 
+  /// Retrieve a source range associated with the diagnostic.
+  CXSourceRange clang_getDiagnosticRange(
+    ffi.Pointer<ffi.Void> Diagnostic,
+    int Range,
+  ) {
+    return (_clang_getDiagnosticRange ??= _dylib.lookupFunction<
+        _c_clang_getDiagnosticRange,
+        _dart_clang_getDiagnosticRange>('clang_getDiagnosticRange'))(
+      Diagnostic,
+      Range,
+    );
+  }
+
+  _dart_clang_getDiagnosticRange? _clang_getDiagnosticRange;
+
   /// Determine the number of fix-it hints associated with the given diagnostic.
   int clang_getDiagnosticNumFixIts(
     ffi.Pointer<ffi.Void> Diagnostic,
@@ -624,6 +1056,37 @@
 
   _dart_clang_getDiagnosticNumFixIts? _clang_getDiagnosticNumFixIts;
 
+  /// Retrieve the replacement information for a given fix-it.
+  CXString clang_getDiagnosticFixIt(
+    ffi.Pointer<ffi.Void> Diagnostic,
+    int FixIt,
+    ffi.Pointer<CXSourceRange> ReplacementRange,
+  ) {
+    return (_clang_getDiagnosticFixIt ??= _dylib.lookupFunction<
+        _c_clang_getDiagnosticFixIt,
+        _dart_clang_getDiagnosticFixIt>('clang_getDiagnosticFixIt'))(
+      Diagnostic,
+      FixIt,
+      ReplacementRange,
+    );
+  }
+
+  _dart_clang_getDiagnosticFixIt? _clang_getDiagnosticFixIt;
+
+  /// Get the original translation unit source file name.
+  CXString clang_getTranslationUnitSpelling(
+    ffi.Pointer<CXTranslationUnitImpl> CTUnit,
+  ) {
+    return (_clang_getTranslationUnitSpelling ??= _dylib.lookupFunction<
+            _c_clang_getTranslationUnitSpelling,
+            _dart_clang_getTranslationUnitSpelling>(
+        'clang_getTranslationUnitSpelling'))(
+      CTUnit,
+    );
+  }
+
+  _dart_clang_getTranslationUnitSpelling? _clang_getTranslationUnitSpelling;
+
   /// Return the CXTranslationUnit for a given source file and the provided
   /// command line arguments one would pass to the compiler.
   ffi.Pointer<CXTranslationUnitImpl> clang_createTranslationUnitFromSourceFile(
@@ -886,6 +1349,33 @@
 
   _dart_clang_getTUResourceUsageName? _clang_getTUResourceUsageName;
 
+  /// Return the memory usage of a translation unit. This object should be
+  /// released with clang_disposeCXTUResourceUsage().
+  CXTUResourceUsage clang_getCXTUResourceUsage(
+    ffi.Pointer<CXTranslationUnitImpl> TU,
+  ) {
+    return (_clang_getCXTUResourceUsage ??= _dylib.lookupFunction<
+        _c_clang_getCXTUResourceUsage,
+        _dart_clang_getCXTUResourceUsage>('clang_getCXTUResourceUsage'))(
+      TU,
+    );
+  }
+
+  _dart_clang_getCXTUResourceUsage? _clang_getCXTUResourceUsage;
+
+  void clang_disposeCXTUResourceUsage(
+    CXTUResourceUsage usage,
+  ) {
+    return (_clang_disposeCXTUResourceUsage ??= _dylib.lookupFunction<
+            _c_clang_disposeCXTUResourceUsage,
+            _dart_clang_disposeCXTUResourceUsage>(
+        'clang_disposeCXTUResourceUsage'))(
+      usage,
+    );
+  }
+
+  _dart_clang_disposeCXTUResourceUsage? _clang_disposeCXTUResourceUsage;
+
   /// Get target information for this translation unit.
   ffi.Pointer<CXTargetInfoImpl> clang_getTranslationUnitTargetInfo(
     ffi.Pointer<CXTranslationUnitImpl> CTUnit,
@@ -913,6 +1403,19 @@
 
   _dart_clang_TargetInfo_dispose? _clang_TargetInfo_dispose;
 
+  /// Get the normalized target triple as a string.
+  CXString clang_TargetInfo_getTriple(
+    ffi.Pointer<CXTargetInfoImpl> Info,
+  ) {
+    return (_clang_TargetInfo_getTriple ??= _dylib.lookupFunction<
+        _c_clang_TargetInfo_getTriple,
+        _dart_clang_TargetInfo_getTriple>('clang_TargetInfo_getTriple'))(
+      Info,
+    );
+  }
+
+  _dart_clang_TargetInfo_getTriple? _clang_TargetInfo_getTriple;
+
   /// Get the pointer width of the target in bits.
   int clang_TargetInfo_getPointerWidth(
     ffi.Pointer<CXTargetInfoImpl> Info,
@@ -927,6 +1430,83 @@
 
   _dart_clang_TargetInfo_getPointerWidth? _clang_TargetInfo_getPointerWidth;
 
+  /// Retrieve the NULL cursor, which represents no entity.
+  CXCursor clang_getNullCursor() {
+    return (_clang_getNullCursor ??= _dylib.lookupFunction<
+        _c_clang_getNullCursor,
+        _dart_clang_getNullCursor>('clang_getNullCursor'))();
+  }
+
+  _dart_clang_getNullCursor? _clang_getNullCursor;
+
+  /// Retrieve the cursor that represents the given translation unit.
+  CXCursor clang_getTranslationUnitCursor(
+    ffi.Pointer<CXTranslationUnitImpl> arg0,
+  ) {
+    return (_clang_getTranslationUnitCursor ??= _dylib.lookupFunction<
+            _c_clang_getTranslationUnitCursor,
+            _dart_clang_getTranslationUnitCursor>(
+        'clang_getTranslationUnitCursor'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_getTranslationUnitCursor? _clang_getTranslationUnitCursor;
+
+  /// Determine whether two cursors are equivalent.
+  int clang_equalCursors(
+    CXCursor arg0,
+    CXCursor arg1,
+  ) {
+    return (_clang_equalCursors ??=
+        _dylib.lookupFunction<_c_clang_equalCursors, _dart_clang_equalCursors>(
+            'clang_equalCursors'))(
+      arg0,
+      arg1,
+    );
+  }
+
+  _dart_clang_equalCursors? _clang_equalCursors;
+
+  /// Returns non-zero if cursor is null.
+  int clang_Cursor_isNull(
+    CXCursor cursor,
+  ) {
+    return (_clang_Cursor_isNull ??= _dylib.lookupFunction<
+        _c_clang_Cursor_isNull,
+        _dart_clang_Cursor_isNull>('clang_Cursor_isNull'))(
+      cursor,
+    );
+  }
+
+  _dart_clang_Cursor_isNull? _clang_Cursor_isNull;
+
+  /// Compute a hash value for the given cursor.
+  int clang_hashCursor(
+    CXCursor arg0,
+  ) {
+    return (_clang_hashCursor ??=
+        _dylib.lookupFunction<_c_clang_hashCursor, _dart_clang_hashCursor>(
+            'clang_hashCursor'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_hashCursor? _clang_hashCursor;
+
+  /// Retrieve the kind of the given cursor.
+  int clang_getCursorKind(
+    CXCursor arg0,
+  ) {
+    return (_clang_getCursorKind ??= _dylib.lookupFunction<
+        _c_clang_getCursorKind,
+        _dart_clang_getCursorKind>('clang_getCursorKind'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_getCursorKind? _clang_getCursorKind;
+
   /// Determine whether the given cursor kind represents a declaration.
   int clang_isDeclaration(
     int arg0,
@@ -940,6 +1520,19 @@
 
   _dart_clang_isDeclaration? _clang_isDeclaration;
 
+  /// Determine whether the given declaration is invalid.
+  int clang_isInvalidDeclaration(
+    CXCursor arg0,
+  ) {
+    return (_clang_isInvalidDeclaration ??= _dylib.lookupFunction<
+        _c_clang_isInvalidDeclaration,
+        _dart_clang_isInvalidDeclaration>('clang_isInvalidDeclaration'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_isInvalidDeclaration? _clang_isInvalidDeclaration;
+
   /// Determine whether the given cursor kind represents a simple reference.
   int clang_isReference(
     int arg0,
@@ -992,6 +1585,19 @@
 
   _dart_clang_isAttribute? _clang_isAttribute;
 
+  /// Determine whether the given cursor has any attributes.
+  int clang_Cursor_hasAttrs(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_hasAttrs ??= _dylib.lookupFunction<
+        _c_clang_Cursor_hasAttrs,
+        _dart_clang_Cursor_hasAttrs>('clang_Cursor_hasAttrs'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_hasAttrs? _clang_Cursor_hasAttrs;
+
   /// Determine whether the given cursor kind represents an invalid cursor.
   int clang_isInvalid(
     int arg0,
@@ -1046,6 +1652,74 @@
 
   _dart_clang_isUnexposed? _clang_isUnexposed;
 
+  /// Determine the linkage of the entity referred to by a given cursor.
+  int clang_getCursorLinkage(
+    CXCursor cursor,
+  ) {
+    return (_clang_getCursorLinkage ??= _dylib.lookupFunction<
+        _c_clang_getCursorLinkage,
+        _dart_clang_getCursorLinkage>('clang_getCursorLinkage'))(
+      cursor,
+    );
+  }
+
+  _dart_clang_getCursorLinkage? _clang_getCursorLinkage;
+
+  /// Describe the visibility of the entity referred to by a cursor.
+  int clang_getCursorVisibility(
+    CXCursor cursor,
+  ) {
+    return (_clang_getCursorVisibility ??= _dylib.lookupFunction<
+        _c_clang_getCursorVisibility,
+        _dart_clang_getCursorVisibility>('clang_getCursorVisibility'))(
+      cursor,
+    );
+  }
+
+  _dart_clang_getCursorVisibility? _clang_getCursorVisibility;
+
+  /// Determine the availability of the entity that this cursor refers to,
+  /// taking the current target platform into account.
+  int clang_getCursorAvailability(
+    CXCursor cursor,
+  ) {
+    return (_clang_getCursorAvailability ??= _dylib.lookupFunction<
+        _c_clang_getCursorAvailability,
+        _dart_clang_getCursorAvailability>('clang_getCursorAvailability'))(
+      cursor,
+    );
+  }
+
+  _dart_clang_getCursorAvailability? _clang_getCursorAvailability;
+
+  /// Determine the availability of the entity that this cursor refers to on any
+  /// platforms for which availability information is known.
+  int clang_getCursorPlatformAvailability(
+    CXCursor cursor,
+    ffi.Pointer<ffi.Int32> always_deprecated,
+    ffi.Pointer<CXString> deprecated_message,
+    ffi.Pointer<ffi.Int32> always_unavailable,
+    ffi.Pointer<CXString> unavailable_message,
+    ffi.Pointer<CXPlatformAvailability> availability,
+    int availability_size,
+  ) {
+    return (_clang_getCursorPlatformAvailability ??= _dylib.lookupFunction<
+            _c_clang_getCursorPlatformAvailability,
+            _dart_clang_getCursorPlatformAvailability>(
+        'clang_getCursorPlatformAvailability'))(
+      cursor,
+      always_deprecated,
+      deprecated_message,
+      always_unavailable,
+      unavailable_message,
+      availability,
+      availability_size,
+    );
+  }
+
+  _dart_clang_getCursorPlatformAvailability?
+      _clang_getCursorPlatformAvailability;
+
   /// Free the memory associated with a CXPlatformAvailability structure.
   void clang_disposeCXPlatformAvailability(
     ffi.Pointer<CXPlatformAvailability> availability,
@@ -1061,6 +1735,47 @@
   _dart_clang_disposeCXPlatformAvailability?
       _clang_disposeCXPlatformAvailability;
 
+  /// Determine the "language" of the entity referred to by a given cursor.
+  int clang_getCursorLanguage(
+    CXCursor cursor,
+  ) {
+    return (_clang_getCursorLanguage ??= _dylib.lookupFunction<
+        _c_clang_getCursorLanguage,
+        _dart_clang_getCursorLanguage>('clang_getCursorLanguage'))(
+      cursor,
+    );
+  }
+
+  _dart_clang_getCursorLanguage? _clang_getCursorLanguage;
+
+  /// Determine the "thread-local storage (TLS) kind" of the declaration
+  /// referred to by a cursor.
+  int clang_getCursorTLSKind(
+    CXCursor cursor,
+  ) {
+    return (_clang_getCursorTLSKind ??= _dylib.lookupFunction<
+        _c_clang_getCursorTLSKind,
+        _dart_clang_getCursorTLSKind>('clang_getCursorTLSKind'))(
+      cursor,
+    );
+  }
+
+  _dart_clang_getCursorTLSKind? _clang_getCursorTLSKind;
+
+  /// Returns the translation unit that a cursor originated from.
+  ffi.Pointer<CXTranslationUnitImpl> clang_Cursor_getTranslationUnit(
+    CXCursor arg0,
+  ) {
+    return (_clang_Cursor_getTranslationUnit ??= _dylib.lookupFunction<
+            _c_clang_Cursor_getTranslationUnit,
+            _dart_clang_Cursor_getTranslationUnit>(
+        'clang_Cursor_getTranslationUnit'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_Cursor_getTranslationUnit? _clang_Cursor_getTranslationUnit;
+
   /// Creates an empty CXCursorSet.
   ffi.Pointer<CXCursorSetImpl> clang_createCXCursorSet() {
     return (_clang_createCXCursorSet ??= _dylib.lookupFunction<
@@ -1083,6 +1798,79 @@
 
   _dart_clang_disposeCXCursorSet? _clang_disposeCXCursorSet;
 
+  /// Queries a CXCursorSet to see if it contains a specific CXCursor.
+  int clang_CXCursorSet_contains(
+    ffi.Pointer<CXCursorSetImpl> cset,
+    CXCursor cursor,
+  ) {
+    return (_clang_CXCursorSet_contains ??= _dylib.lookupFunction<
+        _c_clang_CXCursorSet_contains,
+        _dart_clang_CXCursorSet_contains>('clang_CXCursorSet_contains'))(
+      cset,
+      cursor,
+    );
+  }
+
+  _dart_clang_CXCursorSet_contains? _clang_CXCursorSet_contains;
+
+  /// Inserts a CXCursor into a CXCursorSet.
+  int clang_CXCursorSet_insert(
+    ffi.Pointer<CXCursorSetImpl> cset,
+    CXCursor cursor,
+  ) {
+    return (_clang_CXCursorSet_insert ??= _dylib.lookupFunction<
+        _c_clang_CXCursorSet_insert,
+        _dart_clang_CXCursorSet_insert>('clang_CXCursorSet_insert'))(
+      cset,
+      cursor,
+    );
+  }
+
+  _dart_clang_CXCursorSet_insert? _clang_CXCursorSet_insert;
+
+  /// Determine the semantic parent of the given cursor.
+  CXCursor clang_getCursorSemanticParent(
+    CXCursor cursor,
+  ) {
+    return (_clang_getCursorSemanticParent ??= _dylib.lookupFunction<
+        _c_clang_getCursorSemanticParent,
+        _dart_clang_getCursorSemanticParent>('clang_getCursorSemanticParent'))(
+      cursor,
+    );
+  }
+
+  _dart_clang_getCursorSemanticParent? _clang_getCursorSemanticParent;
+
+  /// Determine the lexical parent of the given cursor.
+  CXCursor clang_getCursorLexicalParent(
+    CXCursor cursor,
+  ) {
+    return (_clang_getCursorLexicalParent ??= _dylib.lookupFunction<
+        _c_clang_getCursorLexicalParent,
+        _dart_clang_getCursorLexicalParent>('clang_getCursorLexicalParent'))(
+      cursor,
+    );
+  }
+
+  _dart_clang_getCursorLexicalParent? _clang_getCursorLexicalParent;
+
+  /// Determine the set of methods that are overridden by the given method.
+  void clang_getOverriddenCursors(
+    CXCursor cursor,
+    ffi.Pointer<ffi.Pointer<CXCursor>> overridden,
+    ffi.Pointer<ffi.Uint32> num_overridden,
+  ) {
+    return (_clang_getOverriddenCursors ??= _dylib.lookupFunction<
+        _c_clang_getOverriddenCursors,
+        _dart_clang_getOverriddenCursors>('clang_getOverriddenCursors'))(
+      cursor,
+      overridden,
+      num_overridden,
+    );
+  }
+
+  _dart_clang_getOverriddenCursors? _clang_getOverriddenCursors;
+
   /// Free the set of overridden cursors returned by
   /// clang_getOverriddenCursors().
   void clang_disposeOverriddenCursors(
@@ -1098,6 +1886,1204 @@
 
   _dart_clang_disposeOverriddenCursors? _clang_disposeOverriddenCursors;
 
+  /// Retrieve the file that is included by the given inclusion directive
+  /// cursor.
+  ffi.Pointer<ffi.Void> clang_getIncludedFile(
+    CXCursor cursor,
+  ) {
+    return (_clang_getIncludedFile ??= _dylib.lookupFunction<
+        _c_clang_getIncludedFile,
+        _dart_clang_getIncludedFile>('clang_getIncludedFile'))(
+      cursor,
+    );
+  }
+
+  _dart_clang_getIncludedFile? _clang_getIncludedFile;
+
+  /// Map a source location to the cursor that describes the entity at that
+  /// location in the source code.
+  CXCursor clang_getCursor(
+    ffi.Pointer<CXTranslationUnitImpl> arg0,
+    CXSourceLocation arg1,
+  ) {
+    return (_clang_getCursor ??=
+        _dylib.lookupFunction<_c_clang_getCursor, _dart_clang_getCursor>(
+            'clang_getCursor'))(
+      arg0,
+      arg1,
+    );
+  }
+
+  _dart_clang_getCursor? _clang_getCursor;
+
+  /// Retrieve the physical location of the source constructor referenced by the
+  /// given cursor.
+  CXSourceLocation clang_getCursorLocation(
+    CXCursor arg0,
+  ) {
+    return (_clang_getCursorLocation ??= _dylib.lookupFunction<
+        _c_clang_getCursorLocation,
+        _dart_clang_getCursorLocation>('clang_getCursorLocation'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_getCursorLocation? _clang_getCursorLocation;
+
+  /// Retrieve the physical extent of the source construct referenced by the
+  /// given cursor.
+  CXSourceRange clang_getCursorExtent(
+    CXCursor arg0,
+  ) {
+    return (_clang_getCursorExtent ??= _dylib.lookupFunction<
+        _c_clang_getCursorExtent,
+        _dart_clang_getCursorExtent>('clang_getCursorExtent'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_getCursorExtent? _clang_getCursorExtent;
+
+  /// Retrieve the type of a CXCursor (if any).
+  CXType clang_getCursorType(
+    CXCursor C,
+  ) {
+    return (_clang_getCursorType ??= _dylib.lookupFunction<
+        _c_clang_getCursorType,
+        _dart_clang_getCursorType>('clang_getCursorType'))(
+      C,
+    );
+  }
+
+  _dart_clang_getCursorType? _clang_getCursorType;
+
+  /// Pretty-print the underlying type using the rules of the language of the
+  /// translation unit from which it came.
+  CXString clang_getTypeSpelling(
+    CXType CT,
+  ) {
+    return (_clang_getTypeSpelling ??= _dylib.lookupFunction<
+        _c_clang_getTypeSpelling,
+        _dart_clang_getTypeSpelling>('clang_getTypeSpelling'))(
+      CT,
+    );
+  }
+
+  _dart_clang_getTypeSpelling? _clang_getTypeSpelling;
+
+  /// Retrieve the underlying type of a typedef declaration.
+  CXType clang_getTypedefDeclUnderlyingType(
+    CXCursor C,
+  ) {
+    return (_clang_getTypedefDeclUnderlyingType ??= _dylib.lookupFunction<
+            _c_clang_getTypedefDeclUnderlyingType,
+            _dart_clang_getTypedefDeclUnderlyingType>(
+        'clang_getTypedefDeclUnderlyingType'))(
+      C,
+    );
+  }
+
+  _dart_clang_getTypedefDeclUnderlyingType? _clang_getTypedefDeclUnderlyingType;
+
+  /// Retrieve the integer type of an enum declaration.
+  CXType clang_getEnumDeclIntegerType(
+    CXCursor C,
+  ) {
+    return (_clang_getEnumDeclIntegerType ??= _dylib.lookupFunction<
+        _c_clang_getEnumDeclIntegerType,
+        _dart_clang_getEnumDeclIntegerType>('clang_getEnumDeclIntegerType'))(
+      C,
+    );
+  }
+
+  _dart_clang_getEnumDeclIntegerType? _clang_getEnumDeclIntegerType;
+
+  /// Retrieve the integer value of an enum constant declaration as a signed
+  /// long long.
+  int clang_getEnumConstantDeclValue(
+    CXCursor C,
+  ) {
+    return (_clang_getEnumConstantDeclValue ??= _dylib.lookupFunction<
+            _c_clang_getEnumConstantDeclValue,
+            _dart_clang_getEnumConstantDeclValue>(
+        'clang_getEnumConstantDeclValue'))(
+      C,
+    );
+  }
+
+  _dart_clang_getEnumConstantDeclValue? _clang_getEnumConstantDeclValue;
+
+  /// Retrieve the integer value of an enum constant declaration as an unsigned
+  /// long long.
+  int clang_getEnumConstantDeclUnsignedValue(
+    CXCursor C,
+  ) {
+    return (_clang_getEnumConstantDeclUnsignedValue ??= _dylib.lookupFunction<
+            _c_clang_getEnumConstantDeclUnsignedValue,
+            _dart_clang_getEnumConstantDeclUnsignedValue>(
+        'clang_getEnumConstantDeclUnsignedValue'))(
+      C,
+    );
+  }
+
+  _dart_clang_getEnumConstantDeclUnsignedValue?
+      _clang_getEnumConstantDeclUnsignedValue;
+
+  /// Retrieve the bit width of a bit field declaration as an integer.
+  int clang_getFieldDeclBitWidth(
+    CXCursor C,
+  ) {
+    return (_clang_getFieldDeclBitWidth ??= _dylib.lookupFunction<
+        _c_clang_getFieldDeclBitWidth,
+        _dart_clang_getFieldDeclBitWidth>('clang_getFieldDeclBitWidth'))(
+      C,
+    );
+  }
+
+  _dart_clang_getFieldDeclBitWidth? _clang_getFieldDeclBitWidth;
+
+  /// Retrieve the number of non-variadic arguments associated with a given
+  /// cursor.
+  int clang_Cursor_getNumArguments(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_getNumArguments ??= _dylib.lookupFunction<
+        _c_clang_Cursor_getNumArguments,
+        _dart_clang_Cursor_getNumArguments>('clang_Cursor_getNumArguments'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_getNumArguments? _clang_Cursor_getNumArguments;
+
+  /// Retrieve the argument cursor of a function or method.
+  CXCursor clang_Cursor_getArgument(
+    CXCursor C,
+    int i,
+  ) {
+    return (_clang_Cursor_getArgument ??= _dylib.lookupFunction<
+        _c_clang_Cursor_getArgument,
+        _dart_clang_Cursor_getArgument>('clang_Cursor_getArgument'))(
+      C,
+      i,
+    );
+  }
+
+  _dart_clang_Cursor_getArgument? _clang_Cursor_getArgument;
+
+  /// Returns the number of template args of a function decl representing a
+  /// template specialization.
+  int clang_Cursor_getNumTemplateArguments(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_getNumTemplateArguments ??= _dylib.lookupFunction<
+            _c_clang_Cursor_getNumTemplateArguments,
+            _dart_clang_Cursor_getNumTemplateArguments>(
+        'clang_Cursor_getNumTemplateArguments'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_getNumTemplateArguments?
+      _clang_Cursor_getNumTemplateArguments;
+
+  /// Retrieve the kind of the I'th template argument of the CXCursor C.
+  int clang_Cursor_getTemplateArgumentKind(
+    CXCursor C,
+    int I,
+  ) {
+    return (_clang_Cursor_getTemplateArgumentKind ??= _dylib.lookupFunction<
+            _c_clang_Cursor_getTemplateArgumentKind,
+            _dart_clang_Cursor_getTemplateArgumentKind>(
+        'clang_Cursor_getTemplateArgumentKind'))(
+      C,
+      I,
+    );
+  }
+
+  _dart_clang_Cursor_getTemplateArgumentKind?
+      _clang_Cursor_getTemplateArgumentKind;
+
+  /// Retrieve a CXType representing the type of a TemplateArgument of a
+  /// function decl representing a template specialization.
+  CXType clang_Cursor_getTemplateArgumentType(
+    CXCursor C,
+    int I,
+  ) {
+    return (_clang_Cursor_getTemplateArgumentType ??= _dylib.lookupFunction<
+            _c_clang_Cursor_getTemplateArgumentType,
+            _dart_clang_Cursor_getTemplateArgumentType>(
+        'clang_Cursor_getTemplateArgumentType'))(
+      C,
+      I,
+    );
+  }
+
+  _dart_clang_Cursor_getTemplateArgumentType?
+      _clang_Cursor_getTemplateArgumentType;
+
+  /// Retrieve the value of an Integral TemplateArgument (of a function decl
+  /// representing a template specialization) as a signed long long.
+  int clang_Cursor_getTemplateArgumentValue(
+    CXCursor C,
+    int I,
+  ) {
+    return (_clang_Cursor_getTemplateArgumentValue ??= _dylib.lookupFunction<
+            _c_clang_Cursor_getTemplateArgumentValue,
+            _dart_clang_Cursor_getTemplateArgumentValue>(
+        'clang_Cursor_getTemplateArgumentValue'))(
+      C,
+      I,
+    );
+  }
+
+  _dart_clang_Cursor_getTemplateArgumentValue?
+      _clang_Cursor_getTemplateArgumentValue;
+
+  /// Retrieve the value of an Integral TemplateArgument (of a function decl
+  /// representing a template specialization) as an unsigned long long.
+  int clang_Cursor_getTemplateArgumentUnsignedValue(
+    CXCursor C,
+    int I,
+  ) {
+    return (_clang_Cursor_getTemplateArgumentUnsignedValue ??=
+        _dylib.lookupFunction<_c_clang_Cursor_getTemplateArgumentUnsignedValue,
+                _dart_clang_Cursor_getTemplateArgumentUnsignedValue>(
+            'clang_Cursor_getTemplateArgumentUnsignedValue'))(
+      C,
+      I,
+    );
+  }
+
+  _dart_clang_Cursor_getTemplateArgumentUnsignedValue?
+      _clang_Cursor_getTemplateArgumentUnsignedValue;
+
+  /// Determine whether two CXTypes represent the same type.
+  int clang_equalTypes(
+    CXType A,
+    CXType B,
+  ) {
+    return (_clang_equalTypes ??=
+        _dylib.lookupFunction<_c_clang_equalTypes, _dart_clang_equalTypes>(
+            'clang_equalTypes'))(
+      A,
+      B,
+    );
+  }
+
+  _dart_clang_equalTypes? _clang_equalTypes;
+
+  /// Return the canonical type for a CXType.
+  CXType clang_getCanonicalType(
+    CXType T,
+  ) {
+    return (_clang_getCanonicalType ??= _dylib.lookupFunction<
+        _c_clang_getCanonicalType,
+        _dart_clang_getCanonicalType>('clang_getCanonicalType'))(
+      T,
+    );
+  }
+
+  _dart_clang_getCanonicalType? _clang_getCanonicalType;
+
+  /// Determine whether a CXType has the "const" qualifier set, without looking
+  /// through typedefs that may have added "const" at a different level.
+  int clang_isConstQualifiedType(
+    CXType T,
+  ) {
+    return (_clang_isConstQualifiedType ??= _dylib.lookupFunction<
+        _c_clang_isConstQualifiedType,
+        _dart_clang_isConstQualifiedType>('clang_isConstQualifiedType'))(
+      T,
+    );
+  }
+
+  _dart_clang_isConstQualifiedType? _clang_isConstQualifiedType;
+
+  /// Determine whether a CXCursor that is a macro, is function like.
+  int clang_Cursor_isMacroFunctionLike(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_isMacroFunctionLike ??= _dylib.lookupFunction<
+            _c_clang_Cursor_isMacroFunctionLike,
+            _dart_clang_Cursor_isMacroFunctionLike>(
+        'clang_Cursor_isMacroFunctionLike'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_isMacroFunctionLike? _clang_Cursor_isMacroFunctionLike;
+
+  /// Determine whether a CXCursor that is a macro, is a builtin one.
+  int clang_Cursor_isMacroBuiltin(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_isMacroBuiltin ??= _dylib.lookupFunction<
+        _c_clang_Cursor_isMacroBuiltin,
+        _dart_clang_Cursor_isMacroBuiltin>('clang_Cursor_isMacroBuiltin'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_isMacroBuiltin? _clang_Cursor_isMacroBuiltin;
+
+  /// Determine whether a CXCursor that is a function declaration, is an inline
+  /// declaration.
+  int clang_Cursor_isFunctionInlined(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_isFunctionInlined ??= _dylib.lookupFunction<
+            _c_clang_Cursor_isFunctionInlined,
+            _dart_clang_Cursor_isFunctionInlined>(
+        'clang_Cursor_isFunctionInlined'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_isFunctionInlined? _clang_Cursor_isFunctionInlined;
+
+  /// Determine whether a CXType has the "volatile" qualifier set, without
+  /// looking through typedefs that may have added "volatile" at a different
+  /// level.
+  int clang_isVolatileQualifiedType(
+    CXType T,
+  ) {
+    return (_clang_isVolatileQualifiedType ??= _dylib.lookupFunction<
+        _c_clang_isVolatileQualifiedType,
+        _dart_clang_isVolatileQualifiedType>('clang_isVolatileQualifiedType'))(
+      T,
+    );
+  }
+
+  _dart_clang_isVolatileQualifiedType? _clang_isVolatileQualifiedType;
+
+  /// Determine whether a CXType has the "restrict" qualifier set, without
+  /// looking through typedefs that may have added "restrict" at a different
+  /// level.
+  int clang_isRestrictQualifiedType(
+    CXType T,
+  ) {
+    return (_clang_isRestrictQualifiedType ??= _dylib.lookupFunction<
+        _c_clang_isRestrictQualifiedType,
+        _dart_clang_isRestrictQualifiedType>('clang_isRestrictQualifiedType'))(
+      T,
+    );
+  }
+
+  _dart_clang_isRestrictQualifiedType? _clang_isRestrictQualifiedType;
+
+  /// Returns the address space of the given type.
+  int clang_getAddressSpace(
+    CXType T,
+  ) {
+    return (_clang_getAddressSpace ??= _dylib.lookupFunction<
+        _c_clang_getAddressSpace,
+        _dart_clang_getAddressSpace>('clang_getAddressSpace'))(
+      T,
+    );
+  }
+
+  _dart_clang_getAddressSpace? _clang_getAddressSpace;
+
+  /// Returns the typedef name of the given type.
+  CXString clang_getTypedefName(
+    CXType CT,
+  ) {
+    return (_clang_getTypedefName ??= _dylib.lookupFunction<
+        _c_clang_getTypedefName,
+        _dart_clang_getTypedefName>('clang_getTypedefName'))(
+      CT,
+    );
+  }
+
+  _dart_clang_getTypedefName? _clang_getTypedefName;
+
+  /// For pointer types, returns the type of the pointee.
+  CXType clang_getPointeeType(
+    CXType T,
+  ) {
+    return (_clang_getPointeeType ??= _dylib.lookupFunction<
+        _c_clang_getPointeeType,
+        _dart_clang_getPointeeType>('clang_getPointeeType'))(
+      T,
+    );
+  }
+
+  _dart_clang_getPointeeType? _clang_getPointeeType;
+
+  /// Return the cursor for the declaration of the given type.
+  CXCursor clang_getTypeDeclaration(
+    CXType T,
+  ) {
+    return (_clang_getTypeDeclaration ??= _dylib.lookupFunction<
+        _c_clang_getTypeDeclaration,
+        _dart_clang_getTypeDeclaration>('clang_getTypeDeclaration'))(
+      T,
+    );
+  }
+
+  _dart_clang_getTypeDeclaration? _clang_getTypeDeclaration;
+
+  /// Returns the Objective-C type encoding for the specified declaration.
+  CXString clang_getDeclObjCTypeEncoding(
+    CXCursor C,
+  ) {
+    return (_clang_getDeclObjCTypeEncoding ??= _dylib.lookupFunction<
+        _c_clang_getDeclObjCTypeEncoding,
+        _dart_clang_getDeclObjCTypeEncoding>('clang_getDeclObjCTypeEncoding'))(
+      C,
+    );
+  }
+
+  _dart_clang_getDeclObjCTypeEncoding? _clang_getDeclObjCTypeEncoding;
+
+  /// Returns the Objective-C type encoding for the specified CXType.
+  CXString clang_Type_getObjCEncoding(
+    CXType type,
+  ) {
+    return (_clang_Type_getObjCEncoding ??= _dylib.lookupFunction<
+        _c_clang_Type_getObjCEncoding,
+        _dart_clang_Type_getObjCEncoding>('clang_Type_getObjCEncoding'))(
+      type,
+    );
+  }
+
+  _dart_clang_Type_getObjCEncoding? _clang_Type_getObjCEncoding;
+
+  /// Retrieve the spelling of a given CXTypeKind.
+  CXString clang_getTypeKindSpelling(
+    int K,
+  ) {
+    return (_clang_getTypeKindSpelling ??= _dylib.lookupFunction<
+        _c_clang_getTypeKindSpelling,
+        _dart_clang_getTypeKindSpelling>('clang_getTypeKindSpelling'))(
+      K,
+    );
+  }
+
+  _dart_clang_getTypeKindSpelling? _clang_getTypeKindSpelling;
+
+  /// Retrieve the calling convention associated with a function type.
+  int clang_getFunctionTypeCallingConv(
+    CXType T,
+  ) {
+    return (_clang_getFunctionTypeCallingConv ??= _dylib.lookupFunction<
+            _c_clang_getFunctionTypeCallingConv,
+            _dart_clang_getFunctionTypeCallingConv>(
+        'clang_getFunctionTypeCallingConv'))(
+      T,
+    );
+  }
+
+  _dart_clang_getFunctionTypeCallingConv? _clang_getFunctionTypeCallingConv;
+
+  /// Retrieve the return type associated with a function type.
+  CXType clang_getResultType(
+    CXType T,
+  ) {
+    return (_clang_getResultType ??= _dylib.lookupFunction<
+        _c_clang_getResultType,
+        _dart_clang_getResultType>('clang_getResultType'))(
+      T,
+    );
+  }
+
+  _dart_clang_getResultType? _clang_getResultType;
+
+  /// Retrieve the exception specification type associated with a function type.
+  /// This is a value of type CXCursor_ExceptionSpecificationKind.
+  int clang_getExceptionSpecificationType(
+    CXType T,
+  ) {
+    return (_clang_getExceptionSpecificationType ??= _dylib.lookupFunction<
+            _c_clang_getExceptionSpecificationType,
+            _dart_clang_getExceptionSpecificationType>(
+        'clang_getExceptionSpecificationType'))(
+      T,
+    );
+  }
+
+  _dart_clang_getExceptionSpecificationType?
+      _clang_getExceptionSpecificationType;
+
+  /// Retrieve the number of non-variadic parameters associated with a function
+  /// type.
+  int clang_getNumArgTypes(
+    CXType T,
+  ) {
+    return (_clang_getNumArgTypes ??= _dylib.lookupFunction<
+        _c_clang_getNumArgTypes,
+        _dart_clang_getNumArgTypes>('clang_getNumArgTypes'))(
+      T,
+    );
+  }
+
+  _dart_clang_getNumArgTypes? _clang_getNumArgTypes;
+
+  /// Retrieve the type of a parameter of a function type.
+  CXType clang_getArgType(
+    CXType T,
+    int i,
+  ) {
+    return (_clang_getArgType ??=
+        _dylib.lookupFunction<_c_clang_getArgType, _dart_clang_getArgType>(
+            'clang_getArgType'))(
+      T,
+      i,
+    );
+  }
+
+  _dart_clang_getArgType? _clang_getArgType;
+
+  /// Retrieves the base type of the ObjCObjectType.
+  CXType clang_Type_getObjCObjectBaseType(
+    CXType T,
+  ) {
+    return (_clang_Type_getObjCObjectBaseType ??= _dylib.lookupFunction<
+            _c_clang_Type_getObjCObjectBaseType,
+            _dart_clang_Type_getObjCObjectBaseType>(
+        'clang_Type_getObjCObjectBaseType'))(
+      T,
+    );
+  }
+
+  _dart_clang_Type_getObjCObjectBaseType? _clang_Type_getObjCObjectBaseType;
+
+  /// Retrieve the number of protocol references associated with an ObjC
+  /// object/id.
+  int clang_Type_getNumObjCProtocolRefs(
+    CXType T,
+  ) {
+    return (_clang_Type_getNumObjCProtocolRefs ??= _dylib.lookupFunction<
+            _c_clang_Type_getNumObjCProtocolRefs,
+            _dart_clang_Type_getNumObjCProtocolRefs>(
+        'clang_Type_getNumObjCProtocolRefs'))(
+      T,
+    );
+  }
+
+  _dart_clang_Type_getNumObjCProtocolRefs? _clang_Type_getNumObjCProtocolRefs;
+
+  /// Retrieve the decl for a protocol reference for an ObjC object/id.
+  CXCursor clang_Type_getObjCProtocolDecl(
+    CXType T,
+    int i,
+  ) {
+    return (_clang_Type_getObjCProtocolDecl ??= _dylib.lookupFunction<
+            _c_clang_Type_getObjCProtocolDecl,
+            _dart_clang_Type_getObjCProtocolDecl>(
+        'clang_Type_getObjCProtocolDecl'))(
+      T,
+      i,
+    );
+  }
+
+  _dart_clang_Type_getObjCProtocolDecl? _clang_Type_getObjCProtocolDecl;
+
+  /// Retreive the number of type arguments associated with an ObjC object.
+  int clang_Type_getNumObjCTypeArgs(
+    CXType T,
+  ) {
+    return (_clang_Type_getNumObjCTypeArgs ??= _dylib.lookupFunction<
+        _c_clang_Type_getNumObjCTypeArgs,
+        _dart_clang_Type_getNumObjCTypeArgs>('clang_Type_getNumObjCTypeArgs'))(
+      T,
+    );
+  }
+
+  _dart_clang_Type_getNumObjCTypeArgs? _clang_Type_getNumObjCTypeArgs;
+
+  /// Retrieve a type argument associated with an ObjC object.
+  CXType clang_Type_getObjCTypeArg(
+    CXType T,
+    int i,
+  ) {
+    return (_clang_Type_getObjCTypeArg ??= _dylib.lookupFunction<
+        _c_clang_Type_getObjCTypeArg,
+        _dart_clang_Type_getObjCTypeArg>('clang_Type_getObjCTypeArg'))(
+      T,
+      i,
+    );
+  }
+
+  _dart_clang_Type_getObjCTypeArg? _clang_Type_getObjCTypeArg;
+
+  /// Return 1 if the CXType is a variadic function type, and 0 otherwise.
+  int clang_isFunctionTypeVariadic(
+    CXType T,
+  ) {
+    return (_clang_isFunctionTypeVariadic ??= _dylib.lookupFunction<
+        _c_clang_isFunctionTypeVariadic,
+        _dart_clang_isFunctionTypeVariadic>('clang_isFunctionTypeVariadic'))(
+      T,
+    );
+  }
+
+  _dart_clang_isFunctionTypeVariadic? _clang_isFunctionTypeVariadic;
+
+  /// Retrieve the return type associated with a given cursor.
+  CXType clang_getCursorResultType(
+    CXCursor C,
+  ) {
+    return (_clang_getCursorResultType ??= _dylib.lookupFunction<
+        _c_clang_getCursorResultType,
+        _dart_clang_getCursorResultType>('clang_getCursorResultType'))(
+      C,
+    );
+  }
+
+  _dart_clang_getCursorResultType? _clang_getCursorResultType;
+
+  /// Retrieve the exception specification type associated with a given cursor.
+  /// This is a value of type CXCursor_ExceptionSpecificationKind.
+  int clang_getCursorExceptionSpecificationType(
+    CXCursor C,
+  ) {
+    return (_clang_getCursorExceptionSpecificationType ??=
+        _dylib.lookupFunction<_c_clang_getCursorExceptionSpecificationType,
+                _dart_clang_getCursorExceptionSpecificationType>(
+            'clang_getCursorExceptionSpecificationType'))(
+      C,
+    );
+  }
+
+  _dart_clang_getCursorExceptionSpecificationType?
+      _clang_getCursorExceptionSpecificationType;
+
+  /// Return 1 if the CXType is a POD (plain old data) type, and 0 otherwise.
+  int clang_isPODType(
+    CXType T,
+  ) {
+    return (_clang_isPODType ??=
+        _dylib.lookupFunction<_c_clang_isPODType, _dart_clang_isPODType>(
+            'clang_isPODType'))(
+      T,
+    );
+  }
+
+  _dart_clang_isPODType? _clang_isPODType;
+
+  /// Return the element type of an array, complex, or vector type.
+  CXType clang_getElementType(
+    CXType T,
+  ) {
+    return (_clang_getElementType ??= _dylib.lookupFunction<
+        _c_clang_getElementType,
+        _dart_clang_getElementType>('clang_getElementType'))(
+      T,
+    );
+  }
+
+  _dart_clang_getElementType? _clang_getElementType;
+
+  /// Return the number of elements of an array or vector type.
+  int clang_getNumElements(
+    CXType T,
+  ) {
+    return (_clang_getNumElements ??= _dylib.lookupFunction<
+        _c_clang_getNumElements,
+        _dart_clang_getNumElements>('clang_getNumElements'))(
+      T,
+    );
+  }
+
+  _dart_clang_getNumElements? _clang_getNumElements;
+
+  /// Return the element type of an array type.
+  CXType clang_getArrayElementType(
+    CXType T,
+  ) {
+    return (_clang_getArrayElementType ??= _dylib.lookupFunction<
+        _c_clang_getArrayElementType,
+        _dart_clang_getArrayElementType>('clang_getArrayElementType'))(
+      T,
+    );
+  }
+
+  _dart_clang_getArrayElementType? _clang_getArrayElementType;
+
+  /// Return the array size of a constant array.
+  int clang_getArraySize(
+    CXType T,
+  ) {
+    return (_clang_getArraySize ??=
+        _dylib.lookupFunction<_c_clang_getArraySize, _dart_clang_getArraySize>(
+            'clang_getArraySize'))(
+      T,
+    );
+  }
+
+  _dart_clang_getArraySize? _clang_getArraySize;
+
+  /// Retrieve the type named by the qualified-id.
+  CXType clang_Type_getNamedType(
+    CXType T,
+  ) {
+    return (_clang_Type_getNamedType ??= _dylib.lookupFunction<
+        _c_clang_Type_getNamedType,
+        _dart_clang_Type_getNamedType>('clang_Type_getNamedType'))(
+      T,
+    );
+  }
+
+  _dart_clang_Type_getNamedType? _clang_Type_getNamedType;
+
+  /// Determine if a typedef is 'transparent' tag.
+  int clang_Type_isTransparentTagTypedef(
+    CXType T,
+  ) {
+    return (_clang_Type_isTransparentTagTypedef ??= _dylib.lookupFunction<
+            _c_clang_Type_isTransparentTagTypedef,
+            _dart_clang_Type_isTransparentTagTypedef>(
+        'clang_Type_isTransparentTagTypedef'))(
+      T,
+    );
+  }
+
+  _dart_clang_Type_isTransparentTagTypedef? _clang_Type_isTransparentTagTypedef;
+
+  /// Retrieve the nullability kind of a pointer type.
+  int clang_Type_getNullability(
+    CXType T,
+  ) {
+    return (_clang_Type_getNullability ??= _dylib.lookupFunction<
+        _c_clang_Type_getNullability,
+        _dart_clang_Type_getNullability>('clang_Type_getNullability'))(
+      T,
+    );
+  }
+
+  _dart_clang_Type_getNullability? _clang_Type_getNullability;
+
+  /// Return the alignment of a type in bytes as per C++[expr.alignof] standard.
+  int clang_Type_getAlignOf(
+    CXType T,
+  ) {
+    return (_clang_Type_getAlignOf ??= _dylib.lookupFunction<
+        _c_clang_Type_getAlignOf,
+        _dart_clang_Type_getAlignOf>('clang_Type_getAlignOf'))(
+      T,
+    );
+  }
+
+  _dart_clang_Type_getAlignOf? _clang_Type_getAlignOf;
+
+  /// Return the class type of an member pointer type.
+  CXType clang_Type_getClassType(
+    CXType T,
+  ) {
+    return (_clang_Type_getClassType ??= _dylib.lookupFunction<
+        _c_clang_Type_getClassType,
+        _dart_clang_Type_getClassType>('clang_Type_getClassType'))(
+      T,
+    );
+  }
+
+  _dart_clang_Type_getClassType? _clang_Type_getClassType;
+
+  /// Return the size of a type in bytes as per C++[expr.sizeof] standard.
+  int clang_Type_getSizeOf(
+    CXType T,
+  ) {
+    return (_clang_Type_getSizeOf ??= _dylib.lookupFunction<
+        _c_clang_Type_getSizeOf,
+        _dart_clang_Type_getSizeOf>('clang_Type_getSizeOf'))(
+      T,
+    );
+  }
+
+  _dart_clang_Type_getSizeOf? _clang_Type_getSizeOf;
+
+  /// Return the offset of a field named S in a record of type T in bits as it
+  /// would be returned by __offsetof__ as per C++11[18.2p4]
+  int clang_Type_getOffsetOf(
+    CXType T,
+    ffi.Pointer<ffi.Int8> S,
+  ) {
+    return (_clang_Type_getOffsetOf ??= _dylib.lookupFunction<
+        _c_clang_Type_getOffsetOf,
+        _dart_clang_Type_getOffsetOf>('clang_Type_getOffsetOf'))(
+      T,
+      S,
+    );
+  }
+
+  _dart_clang_Type_getOffsetOf? _clang_Type_getOffsetOf;
+
+  /// Return the type that was modified by this attributed type.
+  CXType clang_Type_getModifiedType(
+    CXType T,
+  ) {
+    return (_clang_Type_getModifiedType ??= _dylib.lookupFunction<
+        _c_clang_Type_getModifiedType,
+        _dart_clang_Type_getModifiedType>('clang_Type_getModifiedType'))(
+      T,
+    );
+  }
+
+  _dart_clang_Type_getModifiedType? _clang_Type_getModifiedType;
+
+  /// Return the offset of the field represented by the Cursor.
+  int clang_Cursor_getOffsetOfField(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_getOffsetOfField ??= _dylib.lookupFunction<
+        _c_clang_Cursor_getOffsetOfField,
+        _dart_clang_Cursor_getOffsetOfField>('clang_Cursor_getOffsetOfField'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_getOffsetOfField? _clang_Cursor_getOffsetOfField;
+
+  /// Determine whether the given cursor represents an anonymous tag or
+  /// namespace
+  int clang_Cursor_isAnonymous(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_isAnonymous ??= _dylib.lookupFunction<
+        _c_clang_Cursor_isAnonymous,
+        _dart_clang_Cursor_isAnonymous>('clang_Cursor_isAnonymous'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_isAnonymous? _clang_Cursor_isAnonymous;
+
+  /// Determine whether the given cursor represents an anonymous record
+  /// declaration.
+  int clang_Cursor_isAnonymousRecordDecl(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_isAnonymousRecordDecl ??= _dylib.lookupFunction<
+            _c_clang_Cursor_isAnonymousRecordDecl,
+            _dart_clang_Cursor_isAnonymousRecordDecl>(
+        'clang_Cursor_isAnonymousRecordDecl'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_isAnonymousRecordDecl? _clang_Cursor_isAnonymousRecordDecl;
+
+  /// Determine whether the given cursor represents an inline namespace
+  /// declaration.
+  int clang_Cursor_isInlineNamespace(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_isInlineNamespace ??= _dylib.lookupFunction<
+            _c_clang_Cursor_isInlineNamespace,
+            _dart_clang_Cursor_isInlineNamespace>(
+        'clang_Cursor_isInlineNamespace'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_isInlineNamespace? _clang_Cursor_isInlineNamespace;
+
+  /// Returns the number of template arguments for given template
+  /// specialization, or -1 if type T is not a template specialization.
+  int clang_Type_getNumTemplateArguments(
+    CXType T,
+  ) {
+    return (_clang_Type_getNumTemplateArguments ??= _dylib.lookupFunction<
+            _c_clang_Type_getNumTemplateArguments,
+            _dart_clang_Type_getNumTemplateArguments>(
+        'clang_Type_getNumTemplateArguments'))(
+      T,
+    );
+  }
+
+  _dart_clang_Type_getNumTemplateArguments? _clang_Type_getNumTemplateArguments;
+
+  /// Returns the type template argument of a template class specialization at
+  /// given index.
+  CXType clang_Type_getTemplateArgumentAsType(
+    CXType T,
+    int i,
+  ) {
+    return (_clang_Type_getTemplateArgumentAsType ??= _dylib.lookupFunction<
+            _c_clang_Type_getTemplateArgumentAsType,
+            _dart_clang_Type_getTemplateArgumentAsType>(
+        'clang_Type_getTemplateArgumentAsType'))(
+      T,
+      i,
+    );
+  }
+
+  _dart_clang_Type_getTemplateArgumentAsType?
+      _clang_Type_getTemplateArgumentAsType;
+
+  /// Retrieve the ref-qualifier kind of a function or method.
+  int clang_Type_getCXXRefQualifier(
+    CXType T,
+  ) {
+    return (_clang_Type_getCXXRefQualifier ??= _dylib.lookupFunction<
+        _c_clang_Type_getCXXRefQualifier,
+        _dart_clang_Type_getCXXRefQualifier>('clang_Type_getCXXRefQualifier'))(
+      T,
+    );
+  }
+
+  _dart_clang_Type_getCXXRefQualifier? _clang_Type_getCXXRefQualifier;
+
+  /// Returns non-zero if the cursor specifies a Record member that is a
+  /// bitfield.
+  int clang_Cursor_isBitField(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_isBitField ??= _dylib.lookupFunction<
+        _c_clang_Cursor_isBitField,
+        _dart_clang_Cursor_isBitField>('clang_Cursor_isBitField'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_isBitField? _clang_Cursor_isBitField;
+
+  /// Returns 1 if the base class specified by the cursor with kind
+  /// CX_CXXBaseSpecifier is virtual.
+  int clang_isVirtualBase(
+    CXCursor arg0,
+  ) {
+    return (_clang_isVirtualBase ??= _dylib.lookupFunction<
+        _c_clang_isVirtualBase,
+        _dart_clang_isVirtualBase>('clang_isVirtualBase'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_isVirtualBase? _clang_isVirtualBase;
+
+  /// Returns the access control level for the referenced object.
+  int clang_getCXXAccessSpecifier(
+    CXCursor arg0,
+  ) {
+    return (_clang_getCXXAccessSpecifier ??= _dylib.lookupFunction<
+        _c_clang_getCXXAccessSpecifier,
+        _dart_clang_getCXXAccessSpecifier>('clang_getCXXAccessSpecifier'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_getCXXAccessSpecifier? _clang_getCXXAccessSpecifier;
+
+  /// Returns the storage class for a function or variable declaration.
+  int clang_Cursor_getStorageClass(
+    CXCursor arg0,
+  ) {
+    return (_clang_Cursor_getStorageClass ??= _dylib.lookupFunction<
+        _c_clang_Cursor_getStorageClass,
+        _dart_clang_Cursor_getStorageClass>('clang_Cursor_getStorageClass'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_Cursor_getStorageClass? _clang_Cursor_getStorageClass;
+
+  /// Determine the number of overloaded declarations referenced by a
+  /// CXCursor_OverloadedDeclRef cursor.
+  int clang_getNumOverloadedDecls(
+    CXCursor cursor,
+  ) {
+    return (_clang_getNumOverloadedDecls ??= _dylib.lookupFunction<
+        _c_clang_getNumOverloadedDecls,
+        _dart_clang_getNumOverloadedDecls>('clang_getNumOverloadedDecls'))(
+      cursor,
+    );
+  }
+
+  _dart_clang_getNumOverloadedDecls? _clang_getNumOverloadedDecls;
+
+  /// Retrieve a cursor for one of the overloaded declarations referenced by a
+  /// CXCursor_OverloadedDeclRef cursor.
+  CXCursor clang_getOverloadedDecl(
+    CXCursor cursor,
+    int index,
+  ) {
+    return (_clang_getOverloadedDecl ??= _dylib.lookupFunction<
+        _c_clang_getOverloadedDecl,
+        _dart_clang_getOverloadedDecl>('clang_getOverloadedDecl'))(
+      cursor,
+      index,
+    );
+  }
+
+  _dart_clang_getOverloadedDecl? _clang_getOverloadedDecl;
+
+  /// For cursors representing an iboutletcollection attribute, this function
+  /// returns the collection element type.
+  CXType clang_getIBOutletCollectionType(
+    CXCursor arg0,
+  ) {
+    return (_clang_getIBOutletCollectionType ??= _dylib.lookupFunction<
+            _c_clang_getIBOutletCollectionType,
+            _dart_clang_getIBOutletCollectionType>(
+        'clang_getIBOutletCollectionType'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_getIBOutletCollectionType? _clang_getIBOutletCollectionType;
+
+  /// Visit the children of a particular cursor.
+  int clang_visitChildren(
+    CXCursor parent,
+    ffi.Pointer<ffi.NativeFunction<CXCursorVisitor>> visitor,
+    ffi.Pointer<ffi.Void> client_data,
+  ) {
+    return (_clang_visitChildren ??= _dylib.lookupFunction<
+        _c_clang_visitChildren,
+        _dart_clang_visitChildren>('clang_visitChildren'))(
+      parent,
+      visitor,
+      client_data,
+    );
+  }
+
+  _dart_clang_visitChildren? _clang_visitChildren;
+
+  /// Retrieve a Unified Symbol Resolution (USR) for the entity referenced by
+  /// the given cursor.
+  CXString clang_getCursorUSR(
+    CXCursor arg0,
+  ) {
+    return (_clang_getCursorUSR ??=
+        _dylib.lookupFunction<_c_clang_getCursorUSR, _dart_clang_getCursorUSR>(
+            'clang_getCursorUSR'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_getCursorUSR? _clang_getCursorUSR;
+
+  /// Construct a USR for a specified Objective-C class.
+  CXString clang_constructUSR_ObjCClass(
+    ffi.Pointer<ffi.Int8> class_name,
+  ) {
+    return (_clang_constructUSR_ObjCClass ??= _dylib.lookupFunction<
+        _c_clang_constructUSR_ObjCClass,
+        _dart_clang_constructUSR_ObjCClass>('clang_constructUSR_ObjCClass'))(
+      class_name,
+    );
+  }
+
+  _dart_clang_constructUSR_ObjCClass? _clang_constructUSR_ObjCClass;
+
+  /// Construct a USR for a specified Objective-C category.
+  CXString clang_constructUSR_ObjCCategory(
+    ffi.Pointer<ffi.Int8> class_name,
+    ffi.Pointer<ffi.Int8> category_name,
+  ) {
+    return (_clang_constructUSR_ObjCCategory ??= _dylib.lookupFunction<
+            _c_clang_constructUSR_ObjCCategory,
+            _dart_clang_constructUSR_ObjCCategory>(
+        'clang_constructUSR_ObjCCategory'))(
+      class_name,
+      category_name,
+    );
+  }
+
+  _dart_clang_constructUSR_ObjCCategory? _clang_constructUSR_ObjCCategory;
+
+  /// Construct a USR for a specified Objective-C protocol.
+  CXString clang_constructUSR_ObjCProtocol(
+    ffi.Pointer<ffi.Int8> protocol_name,
+  ) {
+    return (_clang_constructUSR_ObjCProtocol ??= _dylib.lookupFunction<
+            _c_clang_constructUSR_ObjCProtocol,
+            _dart_clang_constructUSR_ObjCProtocol>(
+        'clang_constructUSR_ObjCProtocol'))(
+      protocol_name,
+    );
+  }
+
+  _dart_clang_constructUSR_ObjCProtocol? _clang_constructUSR_ObjCProtocol;
+
+  /// Construct a USR for a specified Objective-C instance variable and the USR
+  /// for its containing class.
+  CXString clang_constructUSR_ObjCIvar(
+    ffi.Pointer<ffi.Int8> name,
+    CXString classUSR,
+  ) {
+    return (_clang_constructUSR_ObjCIvar ??= _dylib.lookupFunction<
+        _c_clang_constructUSR_ObjCIvar,
+        _dart_clang_constructUSR_ObjCIvar>('clang_constructUSR_ObjCIvar'))(
+      name,
+      classUSR,
+    );
+  }
+
+  _dart_clang_constructUSR_ObjCIvar? _clang_constructUSR_ObjCIvar;
+
+  /// Construct a USR for a specified Objective-C method and the USR for its
+  /// containing class.
+  CXString clang_constructUSR_ObjCMethod(
+    ffi.Pointer<ffi.Int8> name,
+    int isInstanceMethod,
+    CXString classUSR,
+  ) {
+    return (_clang_constructUSR_ObjCMethod ??= _dylib.lookupFunction<
+        _c_clang_constructUSR_ObjCMethod,
+        _dart_clang_constructUSR_ObjCMethod>('clang_constructUSR_ObjCMethod'))(
+      name,
+      isInstanceMethod,
+      classUSR,
+    );
+  }
+
+  _dart_clang_constructUSR_ObjCMethod? _clang_constructUSR_ObjCMethod;
+
+  /// Construct a USR for a specified Objective-C property and the USR for its
+  /// containing class.
+  CXString clang_constructUSR_ObjCProperty(
+    ffi.Pointer<ffi.Int8> property,
+    CXString classUSR,
+  ) {
+    return (_clang_constructUSR_ObjCProperty ??= _dylib.lookupFunction<
+            _c_clang_constructUSR_ObjCProperty,
+            _dart_clang_constructUSR_ObjCProperty>(
+        'clang_constructUSR_ObjCProperty'))(
+      property,
+      classUSR,
+    );
+  }
+
+  _dart_clang_constructUSR_ObjCProperty? _clang_constructUSR_ObjCProperty;
+
+  /// Retrieve a name for the entity referenced by this cursor.
+  CXString clang_getCursorSpelling(
+    CXCursor arg0,
+  ) {
+    return (_clang_getCursorSpelling ??= _dylib.lookupFunction<
+        _c_clang_getCursorSpelling,
+        _dart_clang_getCursorSpelling>('clang_getCursorSpelling'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_getCursorSpelling? _clang_getCursorSpelling;
+
+  /// Retrieve a range for a piece that forms the cursors spelling name. Most of
+  /// the times there is only one range for the complete spelling but for
+  /// Objective-C methods and Objective-C message expressions, there are
+  /// multiple pieces for each selector identifier.
+  CXSourceRange clang_Cursor_getSpellingNameRange(
+    CXCursor arg0,
+    int pieceIndex,
+    int options,
+  ) {
+    return (_clang_Cursor_getSpellingNameRange ??= _dylib.lookupFunction<
+            _c_clang_Cursor_getSpellingNameRange,
+            _dart_clang_Cursor_getSpellingNameRange>(
+        'clang_Cursor_getSpellingNameRange'))(
+      arg0,
+      pieceIndex,
+      options,
+    );
+  }
+
+  _dart_clang_Cursor_getSpellingNameRange? _clang_Cursor_getSpellingNameRange;
+
   /// Get a property value for the given printing policy.
   int clang_PrintingPolicy_getProperty(
     ffi.Pointer<ffi.Void> Policy,
@@ -1132,6 +3118,19 @@
 
   _dart_clang_PrintingPolicy_setProperty? _clang_PrintingPolicy_setProperty;
 
+  /// Retrieve the default policy for the cursor.
+  ffi.Pointer<ffi.Void> clang_getCursorPrintingPolicy(
+    CXCursor arg0,
+  ) {
+    return (_clang_getCursorPrintingPolicy ??= _dylib.lookupFunction<
+        _c_clang_getCursorPrintingPolicy,
+        _dart_clang_getCursorPrintingPolicy>('clang_getCursorPrintingPolicy'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_getCursorPrintingPolicy? _clang_getCursorPrintingPolicy;
+
   /// Release a printing policy.
   void clang_PrintingPolicy_dispose(
     ffi.Pointer<ffi.Void> Policy,
@@ -1145,6 +3144,348 @@
 
   _dart_clang_PrintingPolicy_dispose? _clang_PrintingPolicy_dispose;
 
+  /// Pretty print declarations.
+  CXString clang_getCursorPrettyPrinted(
+    CXCursor Cursor,
+    ffi.Pointer<ffi.Void> Policy,
+  ) {
+    return (_clang_getCursorPrettyPrinted ??= _dylib.lookupFunction<
+        _c_clang_getCursorPrettyPrinted,
+        _dart_clang_getCursorPrettyPrinted>('clang_getCursorPrettyPrinted'))(
+      Cursor,
+      Policy,
+    );
+  }
+
+  _dart_clang_getCursorPrettyPrinted? _clang_getCursorPrettyPrinted;
+
+  /// Retrieve the display name for the entity referenced by this cursor.
+  CXString clang_getCursorDisplayName(
+    CXCursor arg0,
+  ) {
+    return (_clang_getCursorDisplayName ??= _dylib.lookupFunction<
+        _c_clang_getCursorDisplayName,
+        _dart_clang_getCursorDisplayName>('clang_getCursorDisplayName'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_getCursorDisplayName? _clang_getCursorDisplayName;
+
+  /// For a cursor that is a reference, retrieve a cursor representing the
+  /// entity that it references.
+  CXCursor clang_getCursorReferenced(
+    CXCursor arg0,
+  ) {
+    return (_clang_getCursorReferenced ??= _dylib.lookupFunction<
+        _c_clang_getCursorReferenced,
+        _dart_clang_getCursorReferenced>('clang_getCursorReferenced'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_getCursorReferenced? _clang_getCursorReferenced;
+
+  /// For a cursor that is either a reference to or a declaration of some
+  /// entity, retrieve a cursor that describes the definition of that entity.
+  CXCursor clang_getCursorDefinition(
+    CXCursor arg0,
+  ) {
+    return (_clang_getCursorDefinition ??= _dylib.lookupFunction<
+        _c_clang_getCursorDefinition,
+        _dart_clang_getCursorDefinition>('clang_getCursorDefinition'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_getCursorDefinition? _clang_getCursorDefinition;
+
+  /// Determine whether the declaration pointed to by this cursor is also a
+  /// definition of that entity.
+  int clang_isCursorDefinition(
+    CXCursor arg0,
+  ) {
+    return (_clang_isCursorDefinition ??= _dylib.lookupFunction<
+        _c_clang_isCursorDefinition,
+        _dart_clang_isCursorDefinition>('clang_isCursorDefinition'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_isCursorDefinition? _clang_isCursorDefinition;
+
+  /// Retrieve the canonical cursor corresponding to the given cursor.
+  CXCursor clang_getCanonicalCursor(
+    CXCursor arg0,
+  ) {
+    return (_clang_getCanonicalCursor ??= _dylib.lookupFunction<
+        _c_clang_getCanonicalCursor,
+        _dart_clang_getCanonicalCursor>('clang_getCanonicalCursor'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_getCanonicalCursor? _clang_getCanonicalCursor;
+
+  /// If the cursor points to a selector identifier in an Objective-C method or
+  /// message expression, this returns the selector index.
+  int clang_Cursor_getObjCSelectorIndex(
+    CXCursor arg0,
+  ) {
+    return (_clang_Cursor_getObjCSelectorIndex ??= _dylib.lookupFunction<
+            _c_clang_Cursor_getObjCSelectorIndex,
+            _dart_clang_Cursor_getObjCSelectorIndex>(
+        'clang_Cursor_getObjCSelectorIndex'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_Cursor_getObjCSelectorIndex? _clang_Cursor_getObjCSelectorIndex;
+
+  /// Given a cursor pointing to a C++ method call or an Objective-C message,
+  /// returns non-zero if the method/message is "dynamic", meaning:
+  int clang_Cursor_isDynamicCall(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_isDynamicCall ??= _dylib.lookupFunction<
+        _c_clang_Cursor_isDynamicCall,
+        _dart_clang_Cursor_isDynamicCall>('clang_Cursor_isDynamicCall'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_isDynamicCall? _clang_Cursor_isDynamicCall;
+
+  /// Given a cursor pointing to an Objective-C message or property reference,
+  /// or C++ method call, returns the CXType of the receiver.
+  CXType clang_Cursor_getReceiverType(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_getReceiverType ??= _dylib.lookupFunction<
+        _c_clang_Cursor_getReceiverType,
+        _dart_clang_Cursor_getReceiverType>('clang_Cursor_getReceiverType'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_getReceiverType? _clang_Cursor_getReceiverType;
+
+  /// Given a cursor that represents a property declaration, return the
+  /// associated property attributes. The bits are formed from
+  /// CXObjCPropertyAttrKind.
+  int clang_Cursor_getObjCPropertyAttributes(
+    CXCursor C,
+    int reserved,
+  ) {
+    return (_clang_Cursor_getObjCPropertyAttributes ??= _dylib.lookupFunction<
+            _c_clang_Cursor_getObjCPropertyAttributes,
+            _dart_clang_Cursor_getObjCPropertyAttributes>(
+        'clang_Cursor_getObjCPropertyAttributes'))(
+      C,
+      reserved,
+    );
+  }
+
+  _dart_clang_Cursor_getObjCPropertyAttributes?
+      _clang_Cursor_getObjCPropertyAttributes;
+
+  /// Given a cursor that represents a property declaration, return the name of
+  /// the method that implements the getter.
+  CXString clang_Cursor_getObjCPropertyGetterName(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_getObjCPropertyGetterName ??= _dylib.lookupFunction<
+            _c_clang_Cursor_getObjCPropertyGetterName,
+            _dart_clang_Cursor_getObjCPropertyGetterName>(
+        'clang_Cursor_getObjCPropertyGetterName'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_getObjCPropertyGetterName?
+      _clang_Cursor_getObjCPropertyGetterName;
+
+  /// Given a cursor that represents a property declaration, return the name of
+  /// the method that implements the setter, if any.
+  CXString clang_Cursor_getObjCPropertySetterName(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_getObjCPropertySetterName ??= _dylib.lookupFunction<
+            _c_clang_Cursor_getObjCPropertySetterName,
+            _dart_clang_Cursor_getObjCPropertySetterName>(
+        'clang_Cursor_getObjCPropertySetterName'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_getObjCPropertySetterName?
+      _clang_Cursor_getObjCPropertySetterName;
+
+  /// Given a cursor that represents an Objective-C method or parameter
+  /// declaration, return the associated Objective-C qualifiers for the return
+  /// type or the parameter respectively. The bits are formed from
+  /// CXObjCDeclQualifierKind.
+  int clang_Cursor_getObjCDeclQualifiers(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_getObjCDeclQualifiers ??= _dylib.lookupFunction<
+            _c_clang_Cursor_getObjCDeclQualifiers,
+            _dart_clang_Cursor_getObjCDeclQualifiers>(
+        'clang_Cursor_getObjCDeclQualifiers'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_getObjCDeclQualifiers? _clang_Cursor_getObjCDeclQualifiers;
+
+  /// Given a cursor that represents an Objective-C method or property
+  /// declaration, return non-zero if the declaration was affected by
+  /// "@optional". Returns zero if the cursor is not such a declaration or it is
+  /// "@required".
+  int clang_Cursor_isObjCOptional(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_isObjCOptional ??= _dylib.lookupFunction<
+        _c_clang_Cursor_isObjCOptional,
+        _dart_clang_Cursor_isObjCOptional>('clang_Cursor_isObjCOptional'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_isObjCOptional? _clang_Cursor_isObjCOptional;
+
+  /// Returns non-zero if the given cursor is a variadic function or method.
+  int clang_Cursor_isVariadic(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_isVariadic ??= _dylib.lookupFunction<
+        _c_clang_Cursor_isVariadic,
+        _dart_clang_Cursor_isVariadic>('clang_Cursor_isVariadic'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_isVariadic? _clang_Cursor_isVariadic;
+
+  /// Returns non-zero if the given cursor points to a symbol marked with
+  /// external_source_symbol attribute.
+  int clang_Cursor_isExternalSymbol(
+    CXCursor C,
+    ffi.Pointer<CXString> language,
+    ffi.Pointer<CXString> definedIn,
+    ffi.Pointer<ffi.Uint32> isGenerated,
+  ) {
+    return (_clang_Cursor_isExternalSymbol ??= _dylib.lookupFunction<
+        _c_clang_Cursor_isExternalSymbol,
+        _dart_clang_Cursor_isExternalSymbol>('clang_Cursor_isExternalSymbol'))(
+      C,
+      language,
+      definedIn,
+      isGenerated,
+    );
+  }
+
+  _dart_clang_Cursor_isExternalSymbol? _clang_Cursor_isExternalSymbol;
+
+  /// Given a cursor that represents a declaration, return the associated
+  /// comment's source range. The range may include multiple consecutive
+  /// comments with whitespace in between.
+  CXSourceRange clang_Cursor_getCommentRange(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_getCommentRange ??= _dylib.lookupFunction<
+        _c_clang_Cursor_getCommentRange,
+        _dart_clang_Cursor_getCommentRange>('clang_Cursor_getCommentRange'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_getCommentRange? _clang_Cursor_getCommentRange;
+
+  /// Given a cursor that represents a declaration, return the associated
+  /// comment text, including comment markers.
+  CXString clang_Cursor_getRawCommentText(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_getRawCommentText ??= _dylib.lookupFunction<
+            _c_clang_Cursor_getRawCommentText,
+            _dart_clang_Cursor_getRawCommentText>(
+        'clang_Cursor_getRawCommentText'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_getRawCommentText? _clang_Cursor_getRawCommentText;
+
+  /// Given a cursor that represents a documentable entity (e.g., declaration),
+  /// return the associated first paragraph.
+  CXString clang_Cursor_getBriefCommentText(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_getBriefCommentText ??= _dylib.lookupFunction<
+            _c_clang_Cursor_getBriefCommentText,
+            _dart_clang_Cursor_getBriefCommentText>(
+        'clang_Cursor_getBriefCommentText'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_getBriefCommentText? _clang_Cursor_getBriefCommentText;
+
+  /// Retrieve the CXString representing the mangled name of the cursor.
+  CXString clang_Cursor_getMangling(
+    CXCursor arg0,
+  ) {
+    return (_clang_Cursor_getMangling ??= _dylib.lookupFunction<
+        _c_clang_Cursor_getMangling,
+        _dart_clang_Cursor_getMangling>('clang_Cursor_getMangling'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_Cursor_getMangling? _clang_Cursor_getMangling;
+
+  /// Retrieve the CXStrings representing the mangled symbols of the C++
+  /// constructor or destructor at the cursor.
+  ffi.Pointer<CXStringSet> clang_Cursor_getCXXManglings(
+    CXCursor arg0,
+  ) {
+    return (_clang_Cursor_getCXXManglings ??= _dylib.lookupFunction<
+        _c_clang_Cursor_getCXXManglings,
+        _dart_clang_Cursor_getCXXManglings>('clang_Cursor_getCXXManglings'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_Cursor_getCXXManglings? _clang_Cursor_getCXXManglings;
+
+  /// Retrieve the CXStrings representing the mangled symbols of the ObjC class
+  /// interface or implementation at the cursor.
+  ffi.Pointer<CXStringSet> clang_Cursor_getObjCManglings(
+    CXCursor arg0,
+  ) {
+    return (_clang_Cursor_getObjCManglings ??= _dylib.lookupFunction<
+        _c_clang_Cursor_getObjCManglings,
+        _dart_clang_Cursor_getObjCManglings>('clang_Cursor_getObjCManglings'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_Cursor_getObjCManglings? _clang_Cursor_getObjCManglings;
+
+  /// Given a CXCursor_ModuleImportDecl cursor, return the associated module.
+  ffi.Pointer<ffi.Void> clang_Cursor_getModule(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_getModule ??= _dylib.lookupFunction<
+        _c_clang_Cursor_getModule,
+        _dart_clang_Cursor_getModule>('clang_Cursor_getModule'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_getModule? _clang_Cursor_getModule;
+
   /// Given a CXFile header file, return the module that contains it, if one
   /// exists.
   ffi.Pointer<ffi.Void> clang_getModuleForFile(
@@ -1188,6 +3529,33 @@
 
   _dart_clang_Module_getParent? _clang_Module_getParent;
 
+  /// Returns the name of the module, e.g. for the 'std.vector' sub-module it
+  /// will return "vector".
+  CXString clang_Module_getName(
+    ffi.Pointer<ffi.Void> Module,
+  ) {
+    return (_clang_Module_getName ??= _dylib.lookupFunction<
+        _c_clang_Module_getName,
+        _dart_clang_Module_getName>('clang_Module_getName'))(
+      Module,
+    );
+  }
+
+  _dart_clang_Module_getName? _clang_Module_getName;
+
+  /// Returns the full name of the module, e.g. "std.vector".
+  CXString clang_Module_getFullName(
+    ffi.Pointer<ffi.Void> Module,
+  ) {
+    return (_clang_Module_getFullName ??= _dylib.lookupFunction<
+        _c_clang_Module_getFullName,
+        _dart_clang_Module_getFullName>('clang_Module_getFullName'))(
+      Module,
+    );
+  }
+
+  _dart_clang_Module_getFullName? _clang_Module_getFullName;
+
   /// Returns non-zero if the module is a system one.
   int clang_Module_isSystem(
     ffi.Pointer<ffi.Void> Module,
@@ -1235,6 +3603,318 @@
 
   _dart_clang_Module_getTopLevelHeader? _clang_Module_getTopLevelHeader;
 
+  /// Determine if a C++ constructor is a converting constructor.
+  int clang_CXXConstructor_isConvertingConstructor(
+    CXCursor C,
+  ) {
+    return (_clang_CXXConstructor_isConvertingConstructor ??=
+        _dylib.lookupFunction<_c_clang_CXXConstructor_isConvertingConstructor,
+                _dart_clang_CXXConstructor_isConvertingConstructor>(
+            'clang_CXXConstructor_isConvertingConstructor'))(
+      C,
+    );
+  }
+
+  _dart_clang_CXXConstructor_isConvertingConstructor?
+      _clang_CXXConstructor_isConvertingConstructor;
+
+  /// Determine if a C++ constructor is a copy constructor.
+  int clang_CXXConstructor_isCopyConstructor(
+    CXCursor C,
+  ) {
+    return (_clang_CXXConstructor_isCopyConstructor ??= _dylib.lookupFunction<
+            _c_clang_CXXConstructor_isCopyConstructor,
+            _dart_clang_CXXConstructor_isCopyConstructor>(
+        'clang_CXXConstructor_isCopyConstructor'))(
+      C,
+    );
+  }
+
+  _dart_clang_CXXConstructor_isCopyConstructor?
+      _clang_CXXConstructor_isCopyConstructor;
+
+  /// Determine if a C++ constructor is the default constructor.
+  int clang_CXXConstructor_isDefaultConstructor(
+    CXCursor C,
+  ) {
+    return (_clang_CXXConstructor_isDefaultConstructor ??=
+        _dylib.lookupFunction<_c_clang_CXXConstructor_isDefaultConstructor,
+                _dart_clang_CXXConstructor_isDefaultConstructor>(
+            'clang_CXXConstructor_isDefaultConstructor'))(
+      C,
+    );
+  }
+
+  _dart_clang_CXXConstructor_isDefaultConstructor?
+      _clang_CXXConstructor_isDefaultConstructor;
+
+  /// Determine if a C++ constructor is a move constructor.
+  int clang_CXXConstructor_isMoveConstructor(
+    CXCursor C,
+  ) {
+    return (_clang_CXXConstructor_isMoveConstructor ??= _dylib.lookupFunction<
+            _c_clang_CXXConstructor_isMoveConstructor,
+            _dart_clang_CXXConstructor_isMoveConstructor>(
+        'clang_CXXConstructor_isMoveConstructor'))(
+      C,
+    );
+  }
+
+  _dart_clang_CXXConstructor_isMoveConstructor?
+      _clang_CXXConstructor_isMoveConstructor;
+
+  /// Determine if a C++ field is declared 'mutable'.
+  int clang_CXXField_isMutable(
+    CXCursor C,
+  ) {
+    return (_clang_CXXField_isMutable ??= _dylib.lookupFunction<
+        _c_clang_CXXField_isMutable,
+        _dart_clang_CXXField_isMutable>('clang_CXXField_isMutable'))(
+      C,
+    );
+  }
+
+  _dart_clang_CXXField_isMutable? _clang_CXXField_isMutable;
+
+  /// Determine if a C++ method is declared '= default'.
+  int clang_CXXMethod_isDefaulted(
+    CXCursor C,
+  ) {
+    return (_clang_CXXMethod_isDefaulted ??= _dylib.lookupFunction<
+        _c_clang_CXXMethod_isDefaulted,
+        _dart_clang_CXXMethod_isDefaulted>('clang_CXXMethod_isDefaulted'))(
+      C,
+    );
+  }
+
+  _dart_clang_CXXMethod_isDefaulted? _clang_CXXMethod_isDefaulted;
+
+  /// Determine if a C++ member function or member function template is pure
+  /// virtual.
+  int clang_CXXMethod_isPureVirtual(
+    CXCursor C,
+  ) {
+    return (_clang_CXXMethod_isPureVirtual ??= _dylib.lookupFunction<
+        _c_clang_CXXMethod_isPureVirtual,
+        _dart_clang_CXXMethod_isPureVirtual>('clang_CXXMethod_isPureVirtual'))(
+      C,
+    );
+  }
+
+  _dart_clang_CXXMethod_isPureVirtual? _clang_CXXMethod_isPureVirtual;
+
+  /// Determine if a C++ member function or member function template is declared
+  /// 'static'.
+  int clang_CXXMethod_isStatic(
+    CXCursor C,
+  ) {
+    return (_clang_CXXMethod_isStatic ??= _dylib.lookupFunction<
+        _c_clang_CXXMethod_isStatic,
+        _dart_clang_CXXMethod_isStatic>('clang_CXXMethod_isStatic'))(
+      C,
+    );
+  }
+
+  _dart_clang_CXXMethod_isStatic? _clang_CXXMethod_isStatic;
+
+  /// Determine if a C++ member function or member function template is
+  /// explicitly declared 'virtual' or if it overrides a virtual method from one
+  /// of the base classes.
+  int clang_CXXMethod_isVirtual(
+    CXCursor C,
+  ) {
+    return (_clang_CXXMethod_isVirtual ??= _dylib.lookupFunction<
+        _c_clang_CXXMethod_isVirtual,
+        _dart_clang_CXXMethod_isVirtual>('clang_CXXMethod_isVirtual'))(
+      C,
+    );
+  }
+
+  _dart_clang_CXXMethod_isVirtual? _clang_CXXMethod_isVirtual;
+
+  /// Determine if a C++ record is abstract, i.e. whether a class or struct has
+  /// a pure virtual member function.
+  int clang_CXXRecord_isAbstract(
+    CXCursor C,
+  ) {
+    return (_clang_CXXRecord_isAbstract ??= _dylib.lookupFunction<
+        _c_clang_CXXRecord_isAbstract,
+        _dart_clang_CXXRecord_isAbstract>('clang_CXXRecord_isAbstract'))(
+      C,
+    );
+  }
+
+  _dart_clang_CXXRecord_isAbstract? _clang_CXXRecord_isAbstract;
+
+  /// Determine if an enum declaration refers to a scoped enum.
+  int clang_EnumDecl_isScoped(
+    CXCursor C,
+  ) {
+    return (_clang_EnumDecl_isScoped ??= _dylib.lookupFunction<
+        _c_clang_EnumDecl_isScoped,
+        _dart_clang_EnumDecl_isScoped>('clang_EnumDecl_isScoped'))(
+      C,
+    );
+  }
+
+  _dart_clang_EnumDecl_isScoped? _clang_EnumDecl_isScoped;
+
+  /// Determine if a C++ member function or member function template is declared
+  /// 'const'.
+  int clang_CXXMethod_isConst(
+    CXCursor C,
+  ) {
+    return (_clang_CXXMethod_isConst ??= _dylib.lookupFunction<
+        _c_clang_CXXMethod_isConst,
+        _dart_clang_CXXMethod_isConst>('clang_CXXMethod_isConst'))(
+      C,
+    );
+  }
+
+  _dart_clang_CXXMethod_isConst? _clang_CXXMethod_isConst;
+
+  /// Given a cursor that represents a template, determine the cursor kind of
+  /// the specializations would be generated by instantiating the template.
+  int clang_getTemplateCursorKind(
+    CXCursor C,
+  ) {
+    return (_clang_getTemplateCursorKind ??= _dylib.lookupFunction<
+        _c_clang_getTemplateCursorKind,
+        _dart_clang_getTemplateCursorKind>('clang_getTemplateCursorKind'))(
+      C,
+    );
+  }
+
+  _dart_clang_getTemplateCursorKind? _clang_getTemplateCursorKind;
+
+  /// Given a cursor that may represent a specialization or instantiation of a
+  /// template, retrieve the cursor that represents the template that it
+  /// specializes or from which it was instantiated.
+  CXCursor clang_getSpecializedCursorTemplate(
+    CXCursor C,
+  ) {
+    return (_clang_getSpecializedCursorTemplate ??= _dylib.lookupFunction<
+            _c_clang_getSpecializedCursorTemplate,
+            _dart_clang_getSpecializedCursorTemplate>(
+        'clang_getSpecializedCursorTemplate'))(
+      C,
+    );
+  }
+
+  _dart_clang_getSpecializedCursorTemplate? _clang_getSpecializedCursorTemplate;
+
+  /// Given a cursor that references something else, return the source range
+  /// covering that reference.
+  CXSourceRange clang_getCursorReferenceNameRange(
+    CXCursor C,
+    int NameFlags,
+    int PieceIndex,
+  ) {
+    return (_clang_getCursorReferenceNameRange ??= _dylib.lookupFunction<
+            _c_clang_getCursorReferenceNameRange,
+            _dart_clang_getCursorReferenceNameRange>(
+        'clang_getCursorReferenceNameRange'))(
+      C,
+      NameFlags,
+      PieceIndex,
+    );
+  }
+
+  _dart_clang_getCursorReferenceNameRange? _clang_getCursorReferenceNameRange;
+
+  /// Get the raw lexical token starting with the given location.
+  ffi.Pointer<CXToken> clang_getToken(
+    ffi.Pointer<CXTranslationUnitImpl> TU,
+    CXSourceLocation Location,
+  ) {
+    return (_clang_getToken ??=
+        _dylib.lookupFunction<_c_clang_getToken, _dart_clang_getToken>(
+            'clang_getToken'))(
+      TU,
+      Location,
+    );
+  }
+
+  _dart_clang_getToken? _clang_getToken;
+
+  /// Determine the kind of the given token.
+  int clang_getTokenKind(
+    CXToken arg0,
+  ) {
+    return (_clang_getTokenKind ??=
+        _dylib.lookupFunction<_c_clang_getTokenKind, _dart_clang_getTokenKind>(
+            'clang_getTokenKind'))(
+      arg0,
+    );
+  }
+
+  _dart_clang_getTokenKind? _clang_getTokenKind;
+
+  /// Determine the spelling of the given token.
+  CXString clang_getTokenSpelling(
+    ffi.Pointer<CXTranslationUnitImpl> arg0,
+    CXToken arg1,
+  ) {
+    return (_clang_getTokenSpelling ??= _dylib.lookupFunction<
+        _c_clang_getTokenSpelling,
+        _dart_clang_getTokenSpelling>('clang_getTokenSpelling'))(
+      arg0,
+      arg1,
+    );
+  }
+
+  _dart_clang_getTokenSpelling? _clang_getTokenSpelling;
+
+  /// Retrieve the source location of the given token.
+  CXSourceLocation clang_getTokenLocation(
+    ffi.Pointer<CXTranslationUnitImpl> arg0,
+    CXToken arg1,
+  ) {
+    return (_clang_getTokenLocation ??= _dylib.lookupFunction<
+        _c_clang_getTokenLocation,
+        _dart_clang_getTokenLocation>('clang_getTokenLocation'))(
+      arg0,
+      arg1,
+    );
+  }
+
+  _dart_clang_getTokenLocation? _clang_getTokenLocation;
+
+  /// Retrieve a source range that covers the given token.
+  CXSourceRange clang_getTokenExtent(
+    ffi.Pointer<CXTranslationUnitImpl> arg0,
+    CXToken arg1,
+  ) {
+    return (_clang_getTokenExtent ??= _dylib.lookupFunction<
+        _c_clang_getTokenExtent,
+        _dart_clang_getTokenExtent>('clang_getTokenExtent'))(
+      arg0,
+      arg1,
+    );
+  }
+
+  _dart_clang_getTokenExtent? _clang_getTokenExtent;
+
+  /// Tokenize the source code described by the given range into raw lexical
+  /// tokens.
+  void clang_tokenize(
+    ffi.Pointer<CXTranslationUnitImpl> TU,
+    CXSourceRange Range,
+    ffi.Pointer<ffi.Pointer<CXToken>> Tokens,
+    ffi.Pointer<ffi.Uint32> NumTokens,
+  ) {
+    return (_clang_tokenize ??=
+        _dylib.lookupFunction<_c_clang_tokenize, _dart_clang_tokenize>(
+            'clang_tokenize'))(
+      TU,
+      Range,
+      Tokens,
+      NumTokens,
+    );
+  }
+
+  _dart_clang_tokenize? _clang_tokenize;
+
   /// Annotate the given set of tokens by providing cursors for each token that
   /// can be mapped to a specific entity within the abstract syntax tree.
   void clang_annotateTokens(
@@ -1272,6 +3952,46 @@
 
   _dart_clang_disposeTokens? _clang_disposeTokens;
 
+  /// These routines are used for testing and debugging, only, and should not be
+  /// relied upon.
+  CXString clang_getCursorKindSpelling(
+    int Kind,
+  ) {
+    return (_clang_getCursorKindSpelling ??= _dylib.lookupFunction<
+        _c_clang_getCursorKindSpelling,
+        _dart_clang_getCursorKindSpelling>('clang_getCursorKindSpelling'))(
+      Kind,
+    );
+  }
+
+  _dart_clang_getCursorKindSpelling? _clang_getCursorKindSpelling;
+
+  void clang_getDefinitionSpellingAndExtent(
+    CXCursor arg0,
+    ffi.Pointer<ffi.Pointer<ffi.Int8>> startBuf,
+    ffi.Pointer<ffi.Pointer<ffi.Int8>> endBuf,
+    ffi.Pointer<ffi.Uint32> startLine,
+    ffi.Pointer<ffi.Uint32> startColumn,
+    ffi.Pointer<ffi.Uint32> endLine,
+    ffi.Pointer<ffi.Uint32> endColumn,
+  ) {
+    return (_clang_getDefinitionSpellingAndExtent ??= _dylib.lookupFunction<
+            _c_clang_getDefinitionSpellingAndExtent,
+            _dart_clang_getDefinitionSpellingAndExtent>(
+        'clang_getDefinitionSpellingAndExtent'))(
+      arg0,
+      startBuf,
+      endBuf,
+      startLine,
+      startColumn,
+      endLine,
+      endColumn,
+    );
+  }
+
+  _dart_clang_getDefinitionSpellingAndExtent?
+      _clang_getDefinitionSpellingAndExtent;
+
   void clang_enableStackTraces() {
     return (_clang_enableStackTraces ??= _dylib.lookupFunction<
         _c_clang_enableStackTraces,
@@ -1311,6 +4031,22 @@
 
   _dart_clang_getCompletionChunkKind? _clang_getCompletionChunkKind;
 
+  /// Retrieve the text associated with a particular chunk within a completion
+  /// string.
+  CXString clang_getCompletionChunkText(
+    ffi.Pointer<ffi.Void> completion_string,
+    int chunk_number,
+  ) {
+    return (_clang_getCompletionChunkText ??= _dylib.lookupFunction<
+        _c_clang_getCompletionChunkText,
+        _dart_clang_getCompletionChunkText>('clang_getCompletionChunkText'))(
+      completion_string,
+      chunk_number,
+    );
+  }
+
+  _dart_clang_getCompletionChunkText? _clang_getCompletionChunkText;
+
   /// Retrieve the completion string associated with a particular chunk within a
   /// completion string.
   ffi.Pointer<ffi.Void> clang_getCompletionChunkCompletionString(
@@ -1385,6 +4121,66 @@
 
   _dart_clang_getCompletionNumAnnotations? _clang_getCompletionNumAnnotations;
 
+  /// Retrieve the annotation associated with the given completion string.
+  CXString clang_getCompletionAnnotation(
+    ffi.Pointer<ffi.Void> completion_string,
+    int annotation_number,
+  ) {
+    return (_clang_getCompletionAnnotation ??= _dylib.lookupFunction<
+        _c_clang_getCompletionAnnotation,
+        _dart_clang_getCompletionAnnotation>('clang_getCompletionAnnotation'))(
+      completion_string,
+      annotation_number,
+    );
+  }
+
+  _dart_clang_getCompletionAnnotation? _clang_getCompletionAnnotation;
+
+  /// Retrieve the parent context of the given completion string.
+  CXString clang_getCompletionParent(
+    ffi.Pointer<ffi.Void> completion_string,
+    ffi.Pointer<ffi.Int32> kind,
+  ) {
+    return (_clang_getCompletionParent ??= _dylib.lookupFunction<
+        _c_clang_getCompletionParent,
+        _dart_clang_getCompletionParent>('clang_getCompletionParent'))(
+      completion_string,
+      kind,
+    );
+  }
+
+  _dart_clang_getCompletionParent? _clang_getCompletionParent;
+
+  /// Retrieve the brief documentation comment attached to the declaration that
+  /// corresponds to the given completion string.
+  CXString clang_getCompletionBriefComment(
+    ffi.Pointer<ffi.Void> completion_string,
+  ) {
+    return (_clang_getCompletionBriefComment ??= _dylib.lookupFunction<
+            _c_clang_getCompletionBriefComment,
+            _dart_clang_getCompletionBriefComment>(
+        'clang_getCompletionBriefComment'))(
+      completion_string,
+    );
+  }
+
+  _dart_clang_getCompletionBriefComment? _clang_getCompletionBriefComment;
+
+  /// Retrieve a completion string for an arbitrary declaration or macro
+  /// definition cursor.
+  ffi.Pointer<ffi.Void> clang_getCursorCompletionString(
+    CXCursor cursor,
+  ) {
+    return (_clang_getCursorCompletionString ??= _dylib.lookupFunction<
+            _c_clang_getCursorCompletionString,
+            _dart_clang_getCursorCompletionString>(
+        'clang_getCursorCompletionString'))(
+      cursor,
+    );
+  }
+
+  _dart_clang_getCursorCompletionString? _clang_getCursorCompletionString;
+
   /// Retrieve the number of fix-its for the given completion index.
   int clang_getCompletionNumFixIts(
     ffi.Pointer<CXCodeCompleteResults> results,
@@ -1400,6 +4196,26 @@
 
   _dart_clang_getCompletionNumFixIts? _clang_getCompletionNumFixIts;
 
+  /// Fix-its that *must* be applied before inserting the text for the
+  /// corresponding completion.
+  CXString clang_getCompletionFixIt(
+    ffi.Pointer<CXCodeCompleteResults> results,
+    int completion_index,
+    int fixit_index,
+    ffi.Pointer<CXSourceRange> replacement_range,
+  ) {
+    return (_clang_getCompletionFixIt ??= _dylib.lookupFunction<
+        _c_clang_getCompletionFixIt,
+        _dart_clang_getCompletionFixIt>('clang_getCompletionFixIt'))(
+      results,
+      completion_index,
+      fixit_index,
+      replacement_range,
+    );
+  }
+
+  _dart_clang_getCompletionFixIt? _clang_getCompletionFixIt;
+
   /// Returns a default set of code-completion options that can be passed to
   /// clang_codeCompleteAt().
   int clang_defaultCodeCompleteOptions() {
@@ -1531,6 +4347,49 @@
 
   _dart_clang_codeCompleteGetContainerKind? _clang_codeCompleteGetContainerKind;
 
+  /// Returns the USR for the container for the current code completion context.
+  /// If there is not a container for the current context, this function will
+  /// return the empty string.
+  CXString clang_codeCompleteGetContainerUSR(
+    ffi.Pointer<CXCodeCompleteResults> Results,
+  ) {
+    return (_clang_codeCompleteGetContainerUSR ??= _dylib.lookupFunction<
+            _c_clang_codeCompleteGetContainerUSR,
+            _dart_clang_codeCompleteGetContainerUSR>(
+        'clang_codeCompleteGetContainerUSR'))(
+      Results,
+    );
+  }
+
+  _dart_clang_codeCompleteGetContainerUSR? _clang_codeCompleteGetContainerUSR;
+
+  /// Returns the currently-entered selector for an Objective-C message send,
+  /// formatted like "initWithFoo:bar:". Only guaranteed to return a non-empty
+  /// string for CXCompletionContext_ObjCInstanceMessage and
+  /// CXCompletionContext_ObjCClassMessage.
+  CXString clang_codeCompleteGetObjCSelector(
+    ffi.Pointer<CXCodeCompleteResults> Results,
+  ) {
+    return (_clang_codeCompleteGetObjCSelector ??= _dylib.lookupFunction<
+            _c_clang_codeCompleteGetObjCSelector,
+            _dart_clang_codeCompleteGetObjCSelector>(
+        'clang_codeCompleteGetObjCSelector'))(
+      Results,
+    );
+  }
+
+  _dart_clang_codeCompleteGetObjCSelector? _clang_codeCompleteGetObjCSelector;
+
+  /// Return a version string, suitable for showing to a user, but not intended
+  /// to be parsed (the format is not guaranteed to be stable).
+  CXString clang_getClangVersion() {
+    return (_clang_getClangVersion ??= _dylib.lookupFunction<
+        _c_clang_getClangVersion,
+        _dart_clang_getClangVersion>('clang_getClangVersion'))();
+  }
+
+  _dart_clang_getClangVersion? _clang_getClangVersion;
+
   /// Enable/disable crash recovery.
   void clang_toggleCrashRecovery(
     int isEnabled,
@@ -1564,6 +4423,21 @@
 
   _dart_clang_getInclusions? _clang_getInclusions;
 
+  /// If cursor is a statement declaration tries to evaluate the statement and
+  /// if its variable, tries to evaluate its initializer, into its corresponding
+  /// type.
+  ffi.Pointer<ffi.Void> clang_Cursor_Evaluate(
+    CXCursor C,
+  ) {
+    return (_clang_Cursor_Evaluate ??= _dylib.lookupFunction<
+        _c_clang_Cursor_Evaluate,
+        _dart_clang_Cursor_Evaluate>('clang_Cursor_Evaluate'))(
+      C,
+    );
+  }
+
+  _dart_clang_Cursor_Evaluate? _clang_Cursor_Evaluate;
+
   /// Returns the kind of the evaluated result.
   int clang_EvalResult_getKind(
     ffi.Pointer<ffi.Void> E,
@@ -1752,6 +4626,40 @@
 
   _dart_clang_remap_dispose? _clang_remap_dispose;
 
+  /// Find references of a declaration in a specific file.
+  int clang_findReferencesInFile(
+    CXCursor cursor,
+    ffi.Pointer<ffi.Void> file,
+    CXCursorAndRangeVisitor visitor,
+  ) {
+    return (_clang_findReferencesInFile ??= _dylib.lookupFunction<
+        _c_clang_findReferencesInFile,
+        _dart_clang_findReferencesInFile>('clang_findReferencesInFile'))(
+      cursor,
+      file,
+      visitor,
+    );
+  }
+
+  _dart_clang_findReferencesInFile? _clang_findReferencesInFile;
+
+  /// Find #import/#include directives in a specific file.
+  int clang_findIncludesInFile(
+    ffi.Pointer<CXTranslationUnitImpl> TU,
+    ffi.Pointer<ffi.Void> file,
+    CXCursorAndRangeVisitor visitor,
+  ) {
+    return (_clang_findIncludesInFile ??= _dylib.lookupFunction<
+        _c_clang_findIncludesInFile,
+        _dart_clang_findIncludesInFile>('clang_findIncludesInFile'))(
+      TU,
+      file,
+      visitor,
+    );
+  }
+
+  _dart_clang_findIncludesInFile? _clang_findIncludesInFile;
+
   int clang_index_isEntityObjCContainerKind(
     int arg0,
   ) {
@@ -2046,6 +4954,62 @@
   }
 
   _dart_clang_indexTranslationUnit? _clang_indexTranslationUnit;
+
+  /// Retrieve the CXIdxFile, file, line, column, and offset represented by the
+  /// given CXIdxLoc.
+  void clang_indexLoc_getFileLocation(
+    CXIdxLoc loc,
+    ffi.Pointer<ffi.Pointer<ffi.Void>> indexFile,
+    ffi.Pointer<ffi.Pointer<ffi.Void>> file,
+    ffi.Pointer<ffi.Uint32> line,
+    ffi.Pointer<ffi.Uint32> column,
+    ffi.Pointer<ffi.Uint32> offset,
+  ) {
+    return (_clang_indexLoc_getFileLocation ??= _dylib.lookupFunction<
+            _c_clang_indexLoc_getFileLocation,
+            _dart_clang_indexLoc_getFileLocation>(
+        'clang_indexLoc_getFileLocation'))(
+      loc,
+      indexFile,
+      file,
+      line,
+      column,
+      offset,
+    );
+  }
+
+  _dart_clang_indexLoc_getFileLocation? _clang_indexLoc_getFileLocation;
+
+  /// Retrieve the CXSourceLocation represented by the given CXIdxLoc.
+  CXSourceLocation clang_indexLoc_getCXSourceLocation(
+    CXIdxLoc loc,
+  ) {
+    return (_clang_indexLoc_getCXSourceLocation ??= _dylib.lookupFunction<
+            _c_clang_indexLoc_getCXSourceLocation,
+            _dart_clang_indexLoc_getCXSourceLocation>(
+        'clang_indexLoc_getCXSourceLocation'))(
+      loc,
+    );
+  }
+
+  _dart_clang_indexLoc_getCXSourceLocation? _clang_indexLoc_getCXSourceLocation;
+
+  /// Visit the fields of a particular type.
+  int clang_Type_visitFields(
+    CXType T,
+    ffi.Pointer<ffi.NativeFunction<CXFieldVisitor>> visitor,
+    ffi.Pointer<ffi.Void> client_data,
+  ) {
+    return (_clang_Type_visitFields ??= _dylib.lookupFunction<
+        _c_clang_Type_visitFields,
+        _dart_clang_Type_visitFields>('clang_Type_visitFields'))(
+      T,
+      visitor,
+      client_data,
+    );
+  }
+
+  _dart_clang_Type_visitFields? _clang_Type_visitFields;
 }
 
 /// Error codes returned by libclang routines.
@@ -4066,7 +7030,11 @@
   static const int CXVisit_Continue = 1;
 }
 
-class CXCursorAndRangeVisitor extends ffi.Struct {}
+class CXCursorAndRangeVisitor extends ffi.Struct {
+  external ffi.Pointer<ffi.Void> context;
+
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_2>> visit;
+}
 
 abstract class CXResult {
   /// Function returned successfully.
@@ -4442,26 +7410,26 @@
 class IndexerCallbacks extends ffi.Struct {
   /// Called periodically to check whether indexing should be aborted. Should
   /// return 0 to continue, and non-zero to abort.
-  external ffi.Pointer<ffi.NativeFunction<_typedefC_2>> abortQuery;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_3>> abortQuery;
 
   /// Called at the end of indexing; passes the complete diagnostic set.
-  external ffi.Pointer<ffi.NativeFunction<_typedefC_3>> diagnostic;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_4>> diagnostic;
 
-  external ffi.Pointer<ffi.NativeFunction<_typedefC_4>> enteredMainFile;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_5>> enteredMainFile;
 
   /// Called when a file gets #included/#imported.
-  external ffi.Pointer<ffi.NativeFunction<_typedefC_5>> ppIncludedFile;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_6>> ppIncludedFile;
 
   /// Called when a AST file (PCH or module) gets imported.
-  external ffi.Pointer<ffi.NativeFunction<_typedefC_6>> importedASTFile;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_7>> importedASTFile;
 
   /// Called at the beginning of indexing a translation unit.
-  external ffi.Pointer<ffi.NativeFunction<_typedefC_7>> startedTranslationUnit;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_8>> startedTranslationUnit;
 
-  external ffi.Pointer<ffi.NativeFunction<_typedefC_8>> indexDeclaration;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_9>> indexDeclaration;
 
   /// Called to index a reference of an entity.
-  external ffi.Pointer<ffi.NativeFunction<_typedefC_9>> indexEntityReference;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_10>> indexEntityReference;
 }
 
 abstract class CXIndexOptFlags {
@@ -4498,6 +7466,22 @@
 
 const String CINDEX_VERSION_STRING = '0.59';
 
+typedef _c_clang_getCString = ffi.Pointer<ffi.Int8> Function(
+  CXString string,
+);
+
+typedef _dart_clang_getCString = ffi.Pointer<ffi.Int8> Function(
+  CXString string,
+);
+
+typedef _c_clang_disposeString = ffi.Void Function(
+  CXString string,
+);
+
+typedef _dart_clang_disposeString = void Function(
+  CXString string,
+);
+
 typedef _c_clang_disposeStringSet = ffi.Void Function(
   ffi.Pointer<CXStringSet> set_1,
 );
@@ -4671,6 +7655,14 @@
   ffi.Pointer<ffi.Int8> Path,
 );
 
+typedef _c_clang_getFileName = CXString Function(
+  ffi.Pointer<ffi.Void> SFile,
+);
+
+typedef _dart_clang_getFileName = CXString Function(
+  ffi.Pointer<ffi.Void> SFile,
+);
+
 typedef _c_clang_getFileTime = ffi.Int64 Function(
   ffi.Pointer<ffi.Void> SFile,
 );
@@ -4731,6 +7723,196 @@
   ffi.Pointer<ffi.Void> file2,
 );
 
+typedef _c_clang_File_tryGetRealPathName = CXString Function(
+  ffi.Pointer<ffi.Void> file,
+);
+
+typedef _dart_clang_File_tryGetRealPathName = CXString Function(
+  ffi.Pointer<ffi.Void> file,
+);
+
+typedef _c_clang_getNullLocation = CXSourceLocation Function();
+
+typedef _dart_clang_getNullLocation = CXSourceLocation Function();
+
+typedef _c_clang_equalLocations = ffi.Uint32 Function(
+  CXSourceLocation loc1,
+  CXSourceLocation loc2,
+);
+
+typedef _dart_clang_equalLocations = int Function(
+  CXSourceLocation loc1,
+  CXSourceLocation loc2,
+);
+
+typedef _c_clang_getLocation = CXSourceLocation Function(
+  ffi.Pointer<CXTranslationUnitImpl> tu,
+  ffi.Pointer<ffi.Void> file,
+  ffi.Uint32 line,
+  ffi.Uint32 column,
+);
+
+typedef _dart_clang_getLocation = CXSourceLocation Function(
+  ffi.Pointer<CXTranslationUnitImpl> tu,
+  ffi.Pointer<ffi.Void> file,
+  int line,
+  int column,
+);
+
+typedef _c_clang_getLocationForOffset = CXSourceLocation Function(
+  ffi.Pointer<CXTranslationUnitImpl> tu,
+  ffi.Pointer<ffi.Void> file,
+  ffi.Uint32 offset,
+);
+
+typedef _dart_clang_getLocationForOffset = CXSourceLocation Function(
+  ffi.Pointer<CXTranslationUnitImpl> tu,
+  ffi.Pointer<ffi.Void> file,
+  int offset,
+);
+
+typedef _c_clang_Location_isInSystemHeader = ffi.Int32 Function(
+  CXSourceLocation location,
+);
+
+typedef _dart_clang_Location_isInSystemHeader = int Function(
+  CXSourceLocation location,
+);
+
+typedef _c_clang_Location_isFromMainFile = ffi.Int32 Function(
+  CXSourceLocation location,
+);
+
+typedef _dart_clang_Location_isFromMainFile = int Function(
+  CXSourceLocation location,
+);
+
+typedef _c_clang_getNullRange = CXSourceRange Function();
+
+typedef _dart_clang_getNullRange = CXSourceRange Function();
+
+typedef _c_clang_getRange = CXSourceRange Function(
+  CXSourceLocation begin,
+  CXSourceLocation end,
+);
+
+typedef _dart_clang_getRange = CXSourceRange Function(
+  CXSourceLocation begin,
+  CXSourceLocation end,
+);
+
+typedef _c_clang_equalRanges = ffi.Uint32 Function(
+  CXSourceRange range1,
+  CXSourceRange range2,
+);
+
+typedef _dart_clang_equalRanges = int Function(
+  CXSourceRange range1,
+  CXSourceRange range2,
+);
+
+typedef _c_clang_Range_isNull = ffi.Int32 Function(
+  CXSourceRange range,
+);
+
+typedef _dart_clang_Range_isNull = int Function(
+  CXSourceRange range,
+);
+
+typedef _c_clang_getExpansionLocation = ffi.Void Function(
+  CXSourceLocation location,
+  ffi.Pointer<ffi.Pointer<ffi.Void>> file,
+  ffi.Pointer<ffi.Uint32> line,
+  ffi.Pointer<ffi.Uint32> column,
+  ffi.Pointer<ffi.Uint32> offset,
+);
+
+typedef _dart_clang_getExpansionLocation = void Function(
+  CXSourceLocation location,
+  ffi.Pointer<ffi.Pointer<ffi.Void>> file,
+  ffi.Pointer<ffi.Uint32> line,
+  ffi.Pointer<ffi.Uint32> column,
+  ffi.Pointer<ffi.Uint32> offset,
+);
+
+typedef _c_clang_getPresumedLocation = ffi.Void Function(
+  CXSourceLocation location,
+  ffi.Pointer<CXString> filename,
+  ffi.Pointer<ffi.Uint32> line,
+  ffi.Pointer<ffi.Uint32> column,
+);
+
+typedef _dart_clang_getPresumedLocation = void Function(
+  CXSourceLocation location,
+  ffi.Pointer<CXString> filename,
+  ffi.Pointer<ffi.Uint32> line,
+  ffi.Pointer<ffi.Uint32> column,
+);
+
+typedef _c_clang_getInstantiationLocation = ffi.Void Function(
+  CXSourceLocation location,
+  ffi.Pointer<ffi.Pointer<ffi.Void>> file,
+  ffi.Pointer<ffi.Uint32> line,
+  ffi.Pointer<ffi.Uint32> column,
+  ffi.Pointer<ffi.Uint32> offset,
+);
+
+typedef _dart_clang_getInstantiationLocation = void Function(
+  CXSourceLocation location,
+  ffi.Pointer<ffi.Pointer<ffi.Void>> file,
+  ffi.Pointer<ffi.Uint32> line,
+  ffi.Pointer<ffi.Uint32> column,
+  ffi.Pointer<ffi.Uint32> offset,
+);
+
+typedef _c_clang_getSpellingLocation = ffi.Void Function(
+  CXSourceLocation location,
+  ffi.Pointer<ffi.Pointer<ffi.Void>> file,
+  ffi.Pointer<ffi.Uint32> line,
+  ffi.Pointer<ffi.Uint32> column,
+  ffi.Pointer<ffi.Uint32> offset,
+);
+
+typedef _dart_clang_getSpellingLocation = void Function(
+  CXSourceLocation location,
+  ffi.Pointer<ffi.Pointer<ffi.Void>> file,
+  ffi.Pointer<ffi.Uint32> line,
+  ffi.Pointer<ffi.Uint32> column,
+  ffi.Pointer<ffi.Uint32> offset,
+);
+
+typedef _c_clang_getFileLocation = ffi.Void Function(
+  CXSourceLocation location,
+  ffi.Pointer<ffi.Pointer<ffi.Void>> file,
+  ffi.Pointer<ffi.Uint32> line,
+  ffi.Pointer<ffi.Uint32> column,
+  ffi.Pointer<ffi.Uint32> offset,
+);
+
+typedef _dart_clang_getFileLocation = void Function(
+  CXSourceLocation location,
+  ffi.Pointer<ffi.Pointer<ffi.Void>> file,
+  ffi.Pointer<ffi.Uint32> line,
+  ffi.Pointer<ffi.Uint32> column,
+  ffi.Pointer<ffi.Uint32> offset,
+);
+
+typedef _c_clang_getRangeStart = CXSourceLocation Function(
+  CXSourceRange range,
+);
+
+typedef _dart_clang_getRangeStart = CXSourceLocation Function(
+  CXSourceRange range,
+);
+
+typedef _c_clang_getRangeEnd = CXSourceLocation Function(
+  CXSourceRange range,
+);
+
+typedef _dart_clang_getRangeEnd = CXSourceLocation Function(
+  CXSourceRange range,
+);
+
 typedef _c_clang_getSkippedRanges = ffi.Pointer<CXSourceRangeList> Function(
   ffi.Pointer<CXTranslationUnitImpl> tu,
   ffi.Pointer<ffi.Void> file,
@@ -4838,6 +8020,16 @@
   ffi.Pointer<ffi.Void> Diagnostic,
 );
 
+typedef _c_clang_formatDiagnostic = CXString Function(
+  ffi.Pointer<ffi.Void> Diagnostic,
+  ffi.Uint32 Options,
+);
+
+typedef _dart_clang_formatDiagnostic = CXString Function(
+  ffi.Pointer<ffi.Void> Diagnostic,
+  int Options,
+);
+
 typedef _c_clang_defaultDiagnosticDisplayOptions = ffi.Uint32 Function();
 
 typedef _dart_clang_defaultDiagnosticDisplayOptions = int Function();
@@ -4850,6 +8042,32 @@
   ffi.Pointer<ffi.Void> arg0,
 );
 
+typedef _c_clang_getDiagnosticLocation = CXSourceLocation Function(
+  ffi.Pointer<ffi.Void> arg0,
+);
+
+typedef _dart_clang_getDiagnosticLocation = CXSourceLocation Function(
+  ffi.Pointer<ffi.Void> arg0,
+);
+
+typedef _c_clang_getDiagnosticSpelling = CXString Function(
+  ffi.Pointer<ffi.Void> arg0,
+);
+
+typedef _dart_clang_getDiagnosticSpelling = CXString Function(
+  ffi.Pointer<ffi.Void> arg0,
+);
+
+typedef _c_clang_getDiagnosticOption = CXString Function(
+  ffi.Pointer<ffi.Void> Diag,
+  ffi.Pointer<CXString> Disable,
+);
+
+typedef _dart_clang_getDiagnosticOption = CXString Function(
+  ffi.Pointer<ffi.Void> Diag,
+  ffi.Pointer<CXString> Disable,
+);
+
 typedef _c_clang_getDiagnosticCategory = ffi.Uint32 Function(
   ffi.Pointer<ffi.Void> arg0,
 );
@@ -4858,6 +8076,22 @@
   ffi.Pointer<ffi.Void> arg0,
 );
 
+typedef _c_clang_getDiagnosticCategoryName = CXString Function(
+  ffi.Uint32 Category,
+);
+
+typedef _dart_clang_getDiagnosticCategoryName = CXString Function(
+  int Category,
+);
+
+typedef _c_clang_getDiagnosticCategoryText = CXString Function(
+  ffi.Pointer<ffi.Void> arg0,
+);
+
+typedef _dart_clang_getDiagnosticCategoryText = CXString Function(
+  ffi.Pointer<ffi.Void> arg0,
+);
+
 typedef _c_clang_getDiagnosticNumRanges = ffi.Uint32 Function(
   ffi.Pointer<ffi.Void> arg0,
 );
@@ -4866,6 +8100,16 @@
   ffi.Pointer<ffi.Void> arg0,
 );
 
+typedef _c_clang_getDiagnosticRange = CXSourceRange Function(
+  ffi.Pointer<ffi.Void> Diagnostic,
+  ffi.Uint32 Range,
+);
+
+typedef _dart_clang_getDiagnosticRange = CXSourceRange Function(
+  ffi.Pointer<ffi.Void> Diagnostic,
+  int Range,
+);
+
 typedef _c_clang_getDiagnosticNumFixIts = ffi.Uint32 Function(
   ffi.Pointer<ffi.Void> Diagnostic,
 );
@@ -4874,6 +8118,26 @@
   ffi.Pointer<ffi.Void> Diagnostic,
 );
 
+typedef _c_clang_getDiagnosticFixIt = CXString Function(
+  ffi.Pointer<ffi.Void> Diagnostic,
+  ffi.Uint32 FixIt,
+  ffi.Pointer<CXSourceRange> ReplacementRange,
+);
+
+typedef _dart_clang_getDiagnosticFixIt = CXString Function(
+  ffi.Pointer<ffi.Void> Diagnostic,
+  int FixIt,
+  ffi.Pointer<CXSourceRange> ReplacementRange,
+);
+
+typedef _c_clang_getTranslationUnitSpelling = CXString Function(
+  ffi.Pointer<CXTranslationUnitImpl> CTUnit,
+);
+
+typedef _dart_clang_getTranslationUnitSpelling = CXString Function(
+  ffi.Pointer<CXTranslationUnitImpl> CTUnit,
+);
+
 typedef _c_clang_createTranslationUnitFromSourceFile
     = ffi.Pointer<CXTranslationUnitImpl> Function(
   ffi.Pointer<ffi.Void> CIdx,
@@ -5054,6 +8318,22 @@
   int kind,
 );
 
+typedef _c_clang_getCXTUResourceUsage = CXTUResourceUsage Function(
+  ffi.Pointer<CXTranslationUnitImpl> TU,
+);
+
+typedef _dart_clang_getCXTUResourceUsage = CXTUResourceUsage Function(
+  ffi.Pointer<CXTranslationUnitImpl> TU,
+);
+
+typedef _c_clang_disposeCXTUResourceUsage = ffi.Void Function(
+  CXTUResourceUsage usage,
+);
+
+typedef _dart_clang_disposeCXTUResourceUsage = void Function(
+  CXTUResourceUsage usage,
+);
+
 typedef _c_clang_getTranslationUnitTargetInfo = ffi.Pointer<CXTargetInfoImpl>
     Function(
   ffi.Pointer<CXTranslationUnitImpl> CTUnit,
@@ -5072,6 +8352,14 @@
   ffi.Pointer<CXTargetInfoImpl> Info,
 );
 
+typedef _c_clang_TargetInfo_getTriple = CXString Function(
+  ffi.Pointer<CXTargetInfoImpl> Info,
+);
+
+typedef _dart_clang_TargetInfo_getTriple = CXString Function(
+  ffi.Pointer<CXTargetInfoImpl> Info,
+);
+
 typedef _c_clang_TargetInfo_getPointerWidth = ffi.Int32 Function(
   ffi.Pointer<CXTargetInfoImpl> Info,
 );
@@ -5080,6 +8368,52 @@
   ffi.Pointer<CXTargetInfoImpl> Info,
 );
 
+typedef _c_clang_getNullCursor = CXCursor Function();
+
+typedef _dart_clang_getNullCursor = CXCursor Function();
+
+typedef _c_clang_getTranslationUnitCursor = CXCursor Function(
+  ffi.Pointer<CXTranslationUnitImpl> arg0,
+);
+
+typedef _dart_clang_getTranslationUnitCursor = CXCursor Function(
+  ffi.Pointer<CXTranslationUnitImpl> arg0,
+);
+
+typedef _c_clang_equalCursors = ffi.Uint32 Function(
+  CXCursor arg0,
+  CXCursor arg1,
+);
+
+typedef _dart_clang_equalCursors = int Function(
+  CXCursor arg0,
+  CXCursor arg1,
+);
+
+typedef _c_clang_Cursor_isNull = ffi.Int32 Function(
+  CXCursor cursor,
+);
+
+typedef _dart_clang_Cursor_isNull = int Function(
+  CXCursor cursor,
+);
+
+typedef _c_clang_hashCursor = ffi.Uint32 Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_hashCursor = int Function(
+  CXCursor arg0,
+);
+
+typedef _c_clang_getCursorKind = ffi.Int32 Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_getCursorKind = int Function(
+  CXCursor arg0,
+);
+
 typedef _c_clang_isDeclaration = ffi.Uint32 Function(
   ffi.Int32 arg0,
 );
@@ -5088,6 +8422,14 @@
   int arg0,
 );
 
+typedef _c_clang_isInvalidDeclaration = ffi.Uint32 Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_isInvalidDeclaration = int Function(
+  CXCursor arg0,
+);
+
 typedef _c_clang_isReference = ffi.Uint32 Function(
   ffi.Int32 arg0,
 );
@@ -5120,6 +8462,14 @@
   int arg0,
 );
 
+typedef _c_clang_Cursor_hasAttrs = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_hasAttrs = int Function(
+  CXCursor C,
+);
+
 typedef _c_clang_isInvalid = ffi.Uint32 Function(
   ffi.Int32 arg0,
 );
@@ -5152,6 +8502,50 @@
   int arg0,
 );
 
+typedef _c_clang_getCursorLinkage = ffi.Int32 Function(
+  CXCursor cursor,
+);
+
+typedef _dart_clang_getCursorLinkage = int Function(
+  CXCursor cursor,
+);
+
+typedef _c_clang_getCursorVisibility = ffi.Int32 Function(
+  CXCursor cursor,
+);
+
+typedef _dart_clang_getCursorVisibility = int Function(
+  CXCursor cursor,
+);
+
+typedef _c_clang_getCursorAvailability = ffi.Int32 Function(
+  CXCursor cursor,
+);
+
+typedef _dart_clang_getCursorAvailability = int Function(
+  CXCursor cursor,
+);
+
+typedef _c_clang_getCursorPlatformAvailability = ffi.Int32 Function(
+  CXCursor cursor,
+  ffi.Pointer<ffi.Int32> always_deprecated,
+  ffi.Pointer<CXString> deprecated_message,
+  ffi.Pointer<ffi.Int32> always_unavailable,
+  ffi.Pointer<CXString> unavailable_message,
+  ffi.Pointer<CXPlatformAvailability> availability,
+  ffi.Int32 availability_size,
+);
+
+typedef _dart_clang_getCursorPlatformAvailability = int Function(
+  CXCursor cursor,
+  ffi.Pointer<ffi.Int32> always_deprecated,
+  ffi.Pointer<CXString> deprecated_message,
+  ffi.Pointer<ffi.Int32> always_unavailable,
+  ffi.Pointer<CXString> unavailable_message,
+  ffi.Pointer<CXPlatformAvailability> availability,
+  int availability_size,
+);
+
 typedef _c_clang_disposeCXPlatformAvailability = ffi.Void Function(
   ffi.Pointer<CXPlatformAvailability> availability,
 );
@@ -5160,6 +8554,32 @@
   ffi.Pointer<CXPlatformAvailability> availability,
 );
 
+typedef _c_clang_getCursorLanguage = ffi.Int32 Function(
+  CXCursor cursor,
+);
+
+typedef _dart_clang_getCursorLanguage = int Function(
+  CXCursor cursor,
+);
+
+typedef _c_clang_getCursorTLSKind = ffi.Int32 Function(
+  CXCursor cursor,
+);
+
+typedef _dart_clang_getCursorTLSKind = int Function(
+  CXCursor cursor,
+);
+
+typedef _c_clang_Cursor_getTranslationUnit = ffi.Pointer<CXTranslationUnitImpl>
+    Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_Cursor_getTranslationUnit
+    = ffi.Pointer<CXTranslationUnitImpl> Function(
+  CXCursor arg0,
+);
+
 typedef _c_clang_createCXCursorSet = ffi.Pointer<CXCursorSetImpl> Function();
 
 typedef _dart_clang_createCXCursorSet = ffi.Pointer<CXCursorSetImpl> Function();
@@ -5172,6 +8592,54 @@
   ffi.Pointer<CXCursorSetImpl> cset,
 );
 
+typedef _c_clang_CXCursorSet_contains = ffi.Uint32 Function(
+  ffi.Pointer<CXCursorSetImpl> cset,
+  CXCursor cursor,
+);
+
+typedef _dart_clang_CXCursorSet_contains = int Function(
+  ffi.Pointer<CXCursorSetImpl> cset,
+  CXCursor cursor,
+);
+
+typedef _c_clang_CXCursorSet_insert = ffi.Uint32 Function(
+  ffi.Pointer<CXCursorSetImpl> cset,
+  CXCursor cursor,
+);
+
+typedef _dart_clang_CXCursorSet_insert = int Function(
+  ffi.Pointer<CXCursorSetImpl> cset,
+  CXCursor cursor,
+);
+
+typedef _c_clang_getCursorSemanticParent = CXCursor Function(
+  CXCursor cursor,
+);
+
+typedef _dart_clang_getCursorSemanticParent = CXCursor Function(
+  CXCursor cursor,
+);
+
+typedef _c_clang_getCursorLexicalParent = CXCursor Function(
+  CXCursor cursor,
+);
+
+typedef _dart_clang_getCursorLexicalParent = CXCursor Function(
+  CXCursor cursor,
+);
+
+typedef _c_clang_getOverriddenCursors = ffi.Void Function(
+  CXCursor cursor,
+  ffi.Pointer<ffi.Pointer<CXCursor>> overridden,
+  ffi.Pointer<ffi.Uint32> num_overridden,
+);
+
+typedef _dart_clang_getOverriddenCursors = void Function(
+  CXCursor cursor,
+  ffi.Pointer<ffi.Pointer<CXCursor>> overridden,
+  ffi.Pointer<ffi.Uint32> num_overridden,
+);
+
 typedef _c_clang_disposeOverriddenCursors = ffi.Void Function(
   ffi.Pointer<CXCursor> overridden,
 );
@@ -5180,6 +8648,720 @@
   ffi.Pointer<CXCursor> overridden,
 );
 
+typedef _c_clang_getIncludedFile = ffi.Pointer<ffi.Void> Function(
+  CXCursor cursor,
+);
+
+typedef _dart_clang_getIncludedFile = ffi.Pointer<ffi.Void> Function(
+  CXCursor cursor,
+);
+
+typedef _c_clang_getCursor = CXCursor Function(
+  ffi.Pointer<CXTranslationUnitImpl> arg0,
+  CXSourceLocation arg1,
+);
+
+typedef _dart_clang_getCursor = CXCursor Function(
+  ffi.Pointer<CXTranslationUnitImpl> arg0,
+  CXSourceLocation arg1,
+);
+
+typedef _c_clang_getCursorLocation = CXSourceLocation Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_getCursorLocation = CXSourceLocation Function(
+  CXCursor arg0,
+);
+
+typedef _c_clang_getCursorExtent = CXSourceRange Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_getCursorExtent = CXSourceRange Function(
+  CXCursor arg0,
+);
+
+typedef _c_clang_getCursorType = CXType Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_getCursorType = CXType Function(
+  CXCursor C,
+);
+
+typedef _c_clang_getTypeSpelling = CXString Function(
+  CXType CT,
+);
+
+typedef _dart_clang_getTypeSpelling = CXString Function(
+  CXType CT,
+);
+
+typedef _c_clang_getTypedefDeclUnderlyingType = CXType Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_getTypedefDeclUnderlyingType = CXType Function(
+  CXCursor C,
+);
+
+typedef _c_clang_getEnumDeclIntegerType = CXType Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_getEnumDeclIntegerType = CXType Function(
+  CXCursor C,
+);
+
+typedef _c_clang_getEnumConstantDeclValue = ffi.Int64 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_getEnumConstantDeclValue = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_getEnumConstantDeclUnsignedValue = ffi.Uint64 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_getEnumConstantDeclUnsignedValue = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_getFieldDeclBitWidth = ffi.Int32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_getFieldDeclBitWidth = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_Cursor_getNumArguments = ffi.Int32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_getNumArguments = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_Cursor_getArgument = CXCursor Function(
+  CXCursor C,
+  ffi.Uint32 i,
+);
+
+typedef _dart_clang_Cursor_getArgument = CXCursor Function(
+  CXCursor C,
+  int i,
+);
+
+typedef _c_clang_Cursor_getNumTemplateArguments = ffi.Int32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_getNumTemplateArguments = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_Cursor_getTemplateArgumentKind = ffi.Int32 Function(
+  CXCursor C,
+  ffi.Uint32 I,
+);
+
+typedef _dart_clang_Cursor_getTemplateArgumentKind = int Function(
+  CXCursor C,
+  int I,
+);
+
+typedef _c_clang_Cursor_getTemplateArgumentType = CXType Function(
+  CXCursor C,
+  ffi.Uint32 I,
+);
+
+typedef _dart_clang_Cursor_getTemplateArgumentType = CXType Function(
+  CXCursor C,
+  int I,
+);
+
+typedef _c_clang_Cursor_getTemplateArgumentValue = ffi.Int64 Function(
+  CXCursor C,
+  ffi.Uint32 I,
+);
+
+typedef _dart_clang_Cursor_getTemplateArgumentValue = int Function(
+  CXCursor C,
+  int I,
+);
+
+typedef _c_clang_Cursor_getTemplateArgumentUnsignedValue = ffi.Uint64 Function(
+  CXCursor C,
+  ffi.Uint32 I,
+);
+
+typedef _dart_clang_Cursor_getTemplateArgumentUnsignedValue = int Function(
+  CXCursor C,
+  int I,
+);
+
+typedef _c_clang_equalTypes = ffi.Uint32 Function(
+  CXType A,
+  CXType B,
+);
+
+typedef _dart_clang_equalTypes = int Function(
+  CXType A,
+  CXType B,
+);
+
+typedef _c_clang_getCanonicalType = CXType Function(
+  CXType T,
+);
+
+typedef _dart_clang_getCanonicalType = CXType Function(
+  CXType T,
+);
+
+typedef _c_clang_isConstQualifiedType = ffi.Uint32 Function(
+  CXType T,
+);
+
+typedef _dart_clang_isConstQualifiedType = int Function(
+  CXType T,
+);
+
+typedef _c_clang_Cursor_isMacroFunctionLike = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_isMacroFunctionLike = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_Cursor_isMacroBuiltin = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_isMacroBuiltin = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_Cursor_isFunctionInlined = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_isFunctionInlined = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_isVolatileQualifiedType = ffi.Uint32 Function(
+  CXType T,
+);
+
+typedef _dart_clang_isVolatileQualifiedType = int Function(
+  CXType T,
+);
+
+typedef _c_clang_isRestrictQualifiedType = ffi.Uint32 Function(
+  CXType T,
+);
+
+typedef _dart_clang_isRestrictQualifiedType = int Function(
+  CXType T,
+);
+
+typedef _c_clang_getAddressSpace = ffi.Uint32 Function(
+  CXType T,
+);
+
+typedef _dart_clang_getAddressSpace = int Function(
+  CXType T,
+);
+
+typedef _c_clang_getTypedefName = CXString Function(
+  CXType CT,
+);
+
+typedef _dart_clang_getTypedefName = CXString Function(
+  CXType CT,
+);
+
+typedef _c_clang_getPointeeType = CXType Function(
+  CXType T,
+);
+
+typedef _dart_clang_getPointeeType = CXType Function(
+  CXType T,
+);
+
+typedef _c_clang_getTypeDeclaration = CXCursor Function(
+  CXType T,
+);
+
+typedef _dart_clang_getTypeDeclaration = CXCursor Function(
+  CXType T,
+);
+
+typedef _c_clang_getDeclObjCTypeEncoding = CXString Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_getDeclObjCTypeEncoding = CXString Function(
+  CXCursor C,
+);
+
+typedef _c_clang_Type_getObjCEncoding = CXString Function(
+  CXType type,
+);
+
+typedef _dart_clang_Type_getObjCEncoding = CXString Function(
+  CXType type,
+);
+
+typedef _c_clang_getTypeKindSpelling = CXString Function(
+  ffi.Int32 K,
+);
+
+typedef _dart_clang_getTypeKindSpelling = CXString Function(
+  int K,
+);
+
+typedef _c_clang_getFunctionTypeCallingConv = ffi.Int32 Function(
+  CXType T,
+);
+
+typedef _dart_clang_getFunctionTypeCallingConv = int Function(
+  CXType T,
+);
+
+typedef _c_clang_getResultType = CXType Function(
+  CXType T,
+);
+
+typedef _dart_clang_getResultType = CXType Function(
+  CXType T,
+);
+
+typedef _c_clang_getExceptionSpecificationType = ffi.Int32 Function(
+  CXType T,
+);
+
+typedef _dart_clang_getExceptionSpecificationType = int Function(
+  CXType T,
+);
+
+typedef _c_clang_getNumArgTypes = ffi.Int32 Function(
+  CXType T,
+);
+
+typedef _dart_clang_getNumArgTypes = int Function(
+  CXType T,
+);
+
+typedef _c_clang_getArgType = CXType Function(
+  CXType T,
+  ffi.Uint32 i,
+);
+
+typedef _dart_clang_getArgType = CXType Function(
+  CXType T,
+  int i,
+);
+
+typedef _c_clang_Type_getObjCObjectBaseType = CXType Function(
+  CXType T,
+);
+
+typedef _dart_clang_Type_getObjCObjectBaseType = CXType Function(
+  CXType T,
+);
+
+typedef _c_clang_Type_getNumObjCProtocolRefs = ffi.Uint32 Function(
+  CXType T,
+);
+
+typedef _dart_clang_Type_getNumObjCProtocolRefs = int Function(
+  CXType T,
+);
+
+typedef _c_clang_Type_getObjCProtocolDecl = CXCursor Function(
+  CXType T,
+  ffi.Uint32 i,
+);
+
+typedef _dart_clang_Type_getObjCProtocolDecl = CXCursor Function(
+  CXType T,
+  int i,
+);
+
+typedef _c_clang_Type_getNumObjCTypeArgs = ffi.Uint32 Function(
+  CXType T,
+);
+
+typedef _dart_clang_Type_getNumObjCTypeArgs = int Function(
+  CXType T,
+);
+
+typedef _c_clang_Type_getObjCTypeArg = CXType Function(
+  CXType T,
+  ffi.Uint32 i,
+);
+
+typedef _dart_clang_Type_getObjCTypeArg = CXType Function(
+  CXType T,
+  int i,
+);
+
+typedef _c_clang_isFunctionTypeVariadic = ffi.Uint32 Function(
+  CXType T,
+);
+
+typedef _dart_clang_isFunctionTypeVariadic = int Function(
+  CXType T,
+);
+
+typedef _c_clang_getCursorResultType = CXType Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_getCursorResultType = CXType Function(
+  CXCursor C,
+);
+
+typedef _c_clang_getCursorExceptionSpecificationType = ffi.Int32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_getCursorExceptionSpecificationType = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_isPODType = ffi.Uint32 Function(
+  CXType T,
+);
+
+typedef _dart_clang_isPODType = int Function(
+  CXType T,
+);
+
+typedef _c_clang_getElementType = CXType Function(
+  CXType T,
+);
+
+typedef _dart_clang_getElementType = CXType Function(
+  CXType T,
+);
+
+typedef _c_clang_getNumElements = ffi.Int64 Function(
+  CXType T,
+);
+
+typedef _dart_clang_getNumElements = int Function(
+  CXType T,
+);
+
+typedef _c_clang_getArrayElementType = CXType Function(
+  CXType T,
+);
+
+typedef _dart_clang_getArrayElementType = CXType Function(
+  CXType T,
+);
+
+typedef _c_clang_getArraySize = ffi.Int64 Function(
+  CXType T,
+);
+
+typedef _dart_clang_getArraySize = int Function(
+  CXType T,
+);
+
+typedef _c_clang_Type_getNamedType = CXType Function(
+  CXType T,
+);
+
+typedef _dart_clang_Type_getNamedType = CXType Function(
+  CXType T,
+);
+
+typedef _c_clang_Type_isTransparentTagTypedef = ffi.Uint32 Function(
+  CXType T,
+);
+
+typedef _dart_clang_Type_isTransparentTagTypedef = int Function(
+  CXType T,
+);
+
+typedef _c_clang_Type_getNullability = ffi.Int32 Function(
+  CXType T,
+);
+
+typedef _dart_clang_Type_getNullability = int Function(
+  CXType T,
+);
+
+typedef _c_clang_Type_getAlignOf = ffi.Int64 Function(
+  CXType T,
+);
+
+typedef _dart_clang_Type_getAlignOf = int Function(
+  CXType T,
+);
+
+typedef _c_clang_Type_getClassType = CXType Function(
+  CXType T,
+);
+
+typedef _dart_clang_Type_getClassType = CXType Function(
+  CXType T,
+);
+
+typedef _c_clang_Type_getSizeOf = ffi.Int64 Function(
+  CXType T,
+);
+
+typedef _dart_clang_Type_getSizeOf = int Function(
+  CXType T,
+);
+
+typedef _c_clang_Type_getOffsetOf = ffi.Int64 Function(
+  CXType T,
+  ffi.Pointer<ffi.Int8> S,
+);
+
+typedef _dart_clang_Type_getOffsetOf = int Function(
+  CXType T,
+  ffi.Pointer<ffi.Int8> S,
+);
+
+typedef _c_clang_Type_getModifiedType = CXType Function(
+  CXType T,
+);
+
+typedef _dart_clang_Type_getModifiedType = CXType Function(
+  CXType T,
+);
+
+typedef _c_clang_Cursor_getOffsetOfField = ffi.Int64 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_getOffsetOfField = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_Cursor_isAnonymous = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_isAnonymous = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_Cursor_isAnonymousRecordDecl = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_isAnonymousRecordDecl = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_Cursor_isInlineNamespace = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_isInlineNamespace = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_Type_getNumTemplateArguments = ffi.Int32 Function(
+  CXType T,
+);
+
+typedef _dart_clang_Type_getNumTemplateArguments = int Function(
+  CXType T,
+);
+
+typedef _c_clang_Type_getTemplateArgumentAsType = CXType Function(
+  CXType T,
+  ffi.Uint32 i,
+);
+
+typedef _dart_clang_Type_getTemplateArgumentAsType = CXType Function(
+  CXType T,
+  int i,
+);
+
+typedef _c_clang_Type_getCXXRefQualifier = ffi.Int32 Function(
+  CXType T,
+);
+
+typedef _dart_clang_Type_getCXXRefQualifier = int Function(
+  CXType T,
+);
+
+typedef _c_clang_Cursor_isBitField = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_isBitField = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_isVirtualBase = ffi.Uint32 Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_isVirtualBase = int Function(
+  CXCursor arg0,
+);
+
+typedef _c_clang_getCXXAccessSpecifier = ffi.Int32 Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_getCXXAccessSpecifier = int Function(
+  CXCursor arg0,
+);
+
+typedef _c_clang_Cursor_getStorageClass = ffi.Int32 Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_Cursor_getStorageClass = int Function(
+  CXCursor arg0,
+);
+
+typedef _c_clang_getNumOverloadedDecls = ffi.Uint32 Function(
+  CXCursor cursor,
+);
+
+typedef _dart_clang_getNumOverloadedDecls = int Function(
+  CXCursor cursor,
+);
+
+typedef _c_clang_getOverloadedDecl = CXCursor Function(
+  CXCursor cursor,
+  ffi.Uint32 index,
+);
+
+typedef _dart_clang_getOverloadedDecl = CXCursor Function(
+  CXCursor cursor,
+  int index,
+);
+
+typedef _c_clang_getIBOutletCollectionType = CXType Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_getIBOutletCollectionType = CXType Function(
+  CXCursor arg0,
+);
+
+typedef CXCursorVisitor = ffi.Int32 Function(
+  CXCursor,
+  CXCursor,
+  ffi.Pointer<ffi.Void>,
+);
+
+typedef _c_clang_visitChildren = ffi.Uint32 Function(
+  CXCursor parent,
+  ffi.Pointer<ffi.NativeFunction<CXCursorVisitor>> visitor,
+  ffi.Pointer<ffi.Void> client_data,
+);
+
+typedef _dart_clang_visitChildren = int Function(
+  CXCursor parent,
+  ffi.Pointer<ffi.NativeFunction<CXCursorVisitor>> visitor,
+  ffi.Pointer<ffi.Void> client_data,
+);
+
+typedef _c_clang_getCursorUSR = CXString Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_getCursorUSR = CXString Function(
+  CXCursor arg0,
+);
+
+typedef _c_clang_constructUSR_ObjCClass = CXString Function(
+  ffi.Pointer<ffi.Int8> class_name,
+);
+
+typedef _dart_clang_constructUSR_ObjCClass = CXString Function(
+  ffi.Pointer<ffi.Int8> class_name,
+);
+
+typedef _c_clang_constructUSR_ObjCCategory = CXString Function(
+  ffi.Pointer<ffi.Int8> class_name,
+  ffi.Pointer<ffi.Int8> category_name,
+);
+
+typedef _dart_clang_constructUSR_ObjCCategory = CXString Function(
+  ffi.Pointer<ffi.Int8> class_name,
+  ffi.Pointer<ffi.Int8> category_name,
+);
+
+typedef _c_clang_constructUSR_ObjCProtocol = CXString Function(
+  ffi.Pointer<ffi.Int8> protocol_name,
+);
+
+typedef _dart_clang_constructUSR_ObjCProtocol = CXString Function(
+  ffi.Pointer<ffi.Int8> protocol_name,
+);
+
+typedef _c_clang_constructUSR_ObjCIvar = CXString Function(
+  ffi.Pointer<ffi.Int8> name,
+  CXString classUSR,
+);
+
+typedef _dart_clang_constructUSR_ObjCIvar = CXString Function(
+  ffi.Pointer<ffi.Int8> name,
+  CXString classUSR,
+);
+
+typedef _c_clang_constructUSR_ObjCMethod = CXString Function(
+  ffi.Pointer<ffi.Int8> name,
+  ffi.Uint32 isInstanceMethod,
+  CXString classUSR,
+);
+
+typedef _dart_clang_constructUSR_ObjCMethod = CXString Function(
+  ffi.Pointer<ffi.Int8> name,
+  int isInstanceMethod,
+  CXString classUSR,
+);
+
+typedef _c_clang_constructUSR_ObjCProperty = CXString Function(
+  ffi.Pointer<ffi.Int8> property,
+  CXString classUSR,
+);
+
+typedef _dart_clang_constructUSR_ObjCProperty = CXString Function(
+  ffi.Pointer<ffi.Int8> property,
+  CXString classUSR,
+);
+
+typedef _c_clang_getCursorSpelling = CXString Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_getCursorSpelling = CXString Function(
+  CXCursor arg0,
+);
+
+typedef _c_clang_Cursor_getSpellingNameRange = CXSourceRange Function(
+  CXCursor arg0,
+  ffi.Uint32 pieceIndex,
+  ffi.Uint32 options,
+);
+
+typedef _dart_clang_Cursor_getSpellingNameRange = CXSourceRange Function(
+  CXCursor arg0,
+  int pieceIndex,
+  int options,
+);
+
 typedef _c_clang_PrintingPolicy_getProperty = ffi.Uint32 Function(
   ffi.Pointer<ffi.Void> Policy,
   ffi.Int32 Property,
@@ -5202,6 +9384,14 @@
   int Value,
 );
 
+typedef _c_clang_getCursorPrintingPolicy = ffi.Pointer<ffi.Void> Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_getCursorPrintingPolicy = ffi.Pointer<ffi.Void> Function(
+  CXCursor arg0,
+);
+
 typedef _c_clang_PrintingPolicy_dispose = ffi.Void Function(
   ffi.Pointer<ffi.Void> Policy,
 );
@@ -5210,6 +9400,200 @@
   ffi.Pointer<ffi.Void> Policy,
 );
 
+typedef _c_clang_getCursorPrettyPrinted = CXString Function(
+  CXCursor Cursor,
+  ffi.Pointer<ffi.Void> Policy,
+);
+
+typedef _dart_clang_getCursorPrettyPrinted = CXString Function(
+  CXCursor Cursor,
+  ffi.Pointer<ffi.Void> Policy,
+);
+
+typedef _c_clang_getCursorDisplayName = CXString Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_getCursorDisplayName = CXString Function(
+  CXCursor arg0,
+);
+
+typedef _c_clang_getCursorReferenced = CXCursor Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_getCursorReferenced = CXCursor Function(
+  CXCursor arg0,
+);
+
+typedef _c_clang_getCursorDefinition = CXCursor Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_getCursorDefinition = CXCursor Function(
+  CXCursor arg0,
+);
+
+typedef _c_clang_isCursorDefinition = ffi.Uint32 Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_isCursorDefinition = int Function(
+  CXCursor arg0,
+);
+
+typedef _c_clang_getCanonicalCursor = CXCursor Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_getCanonicalCursor = CXCursor Function(
+  CXCursor arg0,
+);
+
+typedef _c_clang_Cursor_getObjCSelectorIndex = ffi.Int32 Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_Cursor_getObjCSelectorIndex = int Function(
+  CXCursor arg0,
+);
+
+typedef _c_clang_Cursor_isDynamicCall = ffi.Int32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_isDynamicCall = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_Cursor_getReceiverType = CXType Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_getReceiverType = CXType Function(
+  CXCursor C,
+);
+
+typedef _c_clang_Cursor_getObjCPropertyAttributes = ffi.Uint32 Function(
+  CXCursor C,
+  ffi.Uint32 reserved,
+);
+
+typedef _dart_clang_Cursor_getObjCPropertyAttributes = int Function(
+  CXCursor C,
+  int reserved,
+);
+
+typedef _c_clang_Cursor_getObjCPropertyGetterName = CXString Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_getObjCPropertyGetterName = CXString Function(
+  CXCursor C,
+);
+
+typedef _c_clang_Cursor_getObjCPropertySetterName = CXString Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_getObjCPropertySetterName = CXString Function(
+  CXCursor C,
+);
+
+typedef _c_clang_Cursor_getObjCDeclQualifiers = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_getObjCDeclQualifiers = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_Cursor_isObjCOptional = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_isObjCOptional = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_Cursor_isVariadic = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_isVariadic = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_Cursor_isExternalSymbol = ffi.Uint32 Function(
+  CXCursor C,
+  ffi.Pointer<CXString> language,
+  ffi.Pointer<CXString> definedIn,
+  ffi.Pointer<ffi.Uint32> isGenerated,
+);
+
+typedef _dart_clang_Cursor_isExternalSymbol = int Function(
+  CXCursor C,
+  ffi.Pointer<CXString> language,
+  ffi.Pointer<CXString> definedIn,
+  ffi.Pointer<ffi.Uint32> isGenerated,
+);
+
+typedef _c_clang_Cursor_getCommentRange = CXSourceRange Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_getCommentRange = CXSourceRange Function(
+  CXCursor C,
+);
+
+typedef _c_clang_Cursor_getRawCommentText = CXString Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_getRawCommentText = CXString Function(
+  CXCursor C,
+);
+
+typedef _c_clang_Cursor_getBriefCommentText = CXString Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_getBriefCommentText = CXString Function(
+  CXCursor C,
+);
+
+typedef _c_clang_Cursor_getMangling = CXString Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_Cursor_getMangling = CXString Function(
+  CXCursor arg0,
+);
+
+typedef _c_clang_Cursor_getCXXManglings = ffi.Pointer<CXStringSet> Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_Cursor_getCXXManglings = ffi.Pointer<CXStringSet> Function(
+  CXCursor arg0,
+);
+
+typedef _c_clang_Cursor_getObjCManglings = ffi.Pointer<CXStringSet> Function(
+  CXCursor arg0,
+);
+
+typedef _dart_clang_Cursor_getObjCManglings = ffi.Pointer<CXStringSet> Function(
+  CXCursor arg0,
+);
+
+typedef _c_clang_Cursor_getModule = ffi.Pointer<ffi.Void> Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_getModule = ffi.Pointer<ffi.Void> Function(
+  CXCursor C,
+);
+
 typedef _c_clang_getModuleForFile = ffi.Pointer<ffi.Void> Function(
   ffi.Pointer<CXTranslationUnitImpl> arg0,
   ffi.Pointer<ffi.Void> arg1,
@@ -5236,6 +9620,22 @@
   ffi.Pointer<ffi.Void> Module,
 );
 
+typedef _c_clang_Module_getName = CXString Function(
+  ffi.Pointer<ffi.Void> Module,
+);
+
+typedef _dart_clang_Module_getName = CXString Function(
+  ffi.Pointer<ffi.Void> Module,
+);
+
+typedef _c_clang_Module_getFullName = CXString Function(
+  ffi.Pointer<ffi.Void> Module,
+);
+
+typedef _dart_clang_Module_getFullName = CXString Function(
+  ffi.Pointer<ffi.Void> Module,
+);
+
 typedef _c_clang_Module_isSystem = ffi.Int32 Function(
   ffi.Pointer<ffi.Void> Module,
 );
@@ -5266,6 +9666,192 @@
   int Index,
 );
 
+typedef _c_clang_CXXConstructor_isConvertingConstructor = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_CXXConstructor_isConvertingConstructor = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_CXXConstructor_isCopyConstructor = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_CXXConstructor_isCopyConstructor = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_CXXConstructor_isDefaultConstructor = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_CXXConstructor_isDefaultConstructor = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_CXXConstructor_isMoveConstructor = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_CXXConstructor_isMoveConstructor = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_CXXField_isMutable = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_CXXField_isMutable = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_CXXMethod_isDefaulted = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_CXXMethod_isDefaulted = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_CXXMethod_isPureVirtual = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_CXXMethod_isPureVirtual = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_CXXMethod_isStatic = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_CXXMethod_isStatic = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_CXXMethod_isVirtual = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_CXXMethod_isVirtual = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_CXXRecord_isAbstract = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_CXXRecord_isAbstract = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_EnumDecl_isScoped = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_EnumDecl_isScoped = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_CXXMethod_isConst = ffi.Uint32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_CXXMethod_isConst = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_getTemplateCursorKind = ffi.Int32 Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_getTemplateCursorKind = int Function(
+  CXCursor C,
+);
+
+typedef _c_clang_getSpecializedCursorTemplate = CXCursor Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_getSpecializedCursorTemplate = CXCursor Function(
+  CXCursor C,
+);
+
+typedef _c_clang_getCursorReferenceNameRange = CXSourceRange Function(
+  CXCursor C,
+  ffi.Uint32 NameFlags,
+  ffi.Uint32 PieceIndex,
+);
+
+typedef _dart_clang_getCursorReferenceNameRange = CXSourceRange Function(
+  CXCursor C,
+  int NameFlags,
+  int PieceIndex,
+);
+
+typedef _c_clang_getToken = ffi.Pointer<CXToken> Function(
+  ffi.Pointer<CXTranslationUnitImpl> TU,
+  CXSourceLocation Location,
+);
+
+typedef _dart_clang_getToken = ffi.Pointer<CXToken> Function(
+  ffi.Pointer<CXTranslationUnitImpl> TU,
+  CXSourceLocation Location,
+);
+
+typedef _c_clang_getTokenKind = ffi.Int32 Function(
+  CXToken arg0,
+);
+
+typedef _dart_clang_getTokenKind = int Function(
+  CXToken arg0,
+);
+
+typedef _c_clang_getTokenSpelling = CXString Function(
+  ffi.Pointer<CXTranslationUnitImpl> arg0,
+  CXToken arg1,
+);
+
+typedef _dart_clang_getTokenSpelling = CXString Function(
+  ffi.Pointer<CXTranslationUnitImpl> arg0,
+  CXToken arg1,
+);
+
+typedef _c_clang_getTokenLocation = CXSourceLocation Function(
+  ffi.Pointer<CXTranslationUnitImpl> arg0,
+  CXToken arg1,
+);
+
+typedef _dart_clang_getTokenLocation = CXSourceLocation Function(
+  ffi.Pointer<CXTranslationUnitImpl> arg0,
+  CXToken arg1,
+);
+
+typedef _c_clang_getTokenExtent = CXSourceRange Function(
+  ffi.Pointer<CXTranslationUnitImpl> arg0,
+  CXToken arg1,
+);
+
+typedef _dart_clang_getTokenExtent = CXSourceRange Function(
+  ffi.Pointer<CXTranslationUnitImpl> arg0,
+  CXToken arg1,
+);
+
+typedef _c_clang_tokenize = ffi.Void Function(
+  ffi.Pointer<CXTranslationUnitImpl> TU,
+  CXSourceRange Range,
+  ffi.Pointer<ffi.Pointer<CXToken>> Tokens,
+  ffi.Pointer<ffi.Uint32> NumTokens,
+);
+
+typedef _dart_clang_tokenize = void Function(
+  ffi.Pointer<CXTranslationUnitImpl> TU,
+  CXSourceRange Range,
+  ffi.Pointer<ffi.Pointer<CXToken>> Tokens,
+  ffi.Pointer<ffi.Uint32> NumTokens,
+);
+
 typedef _c_clang_annotateTokens = ffi.Void Function(
   ffi.Pointer<CXTranslationUnitImpl> TU,
   ffi.Pointer<CXToken> Tokens,
@@ -5292,6 +9878,34 @@
   int NumTokens,
 );
 
+typedef _c_clang_getCursorKindSpelling = CXString Function(
+  ffi.Int32 Kind,
+);
+
+typedef _dart_clang_getCursorKindSpelling = CXString Function(
+  int Kind,
+);
+
+typedef _c_clang_getDefinitionSpellingAndExtent = ffi.Void Function(
+  CXCursor arg0,
+  ffi.Pointer<ffi.Pointer<ffi.Int8>> startBuf,
+  ffi.Pointer<ffi.Pointer<ffi.Int8>> endBuf,
+  ffi.Pointer<ffi.Uint32> startLine,
+  ffi.Pointer<ffi.Uint32> startColumn,
+  ffi.Pointer<ffi.Uint32> endLine,
+  ffi.Pointer<ffi.Uint32> endColumn,
+);
+
+typedef _dart_clang_getDefinitionSpellingAndExtent = void Function(
+  CXCursor arg0,
+  ffi.Pointer<ffi.Pointer<ffi.Int8>> startBuf,
+  ffi.Pointer<ffi.Pointer<ffi.Int8>> endBuf,
+  ffi.Pointer<ffi.Uint32> startLine,
+  ffi.Pointer<ffi.Uint32> startColumn,
+  ffi.Pointer<ffi.Uint32> endLine,
+  ffi.Pointer<ffi.Uint32> endColumn,
+);
+
 typedef _c_clang_enableStackTraces = ffi.Void Function();
 
 typedef _dart_clang_enableStackTraces = void Function();
@@ -5322,6 +9936,16 @@
   int chunk_number,
 );
 
+typedef _c_clang_getCompletionChunkText = CXString Function(
+  ffi.Pointer<ffi.Void> completion_string,
+  ffi.Uint32 chunk_number,
+);
+
+typedef _dart_clang_getCompletionChunkText = CXString Function(
+  ffi.Pointer<ffi.Void> completion_string,
+  int chunk_number,
+);
+
 typedef _c_clang_getCompletionChunkCompletionString = ffi.Pointer<ffi.Void>
     Function(
   ffi.Pointer<ffi.Void> completion_string,
@@ -5366,6 +9990,42 @@
   ffi.Pointer<ffi.Void> completion_string,
 );
 
+typedef _c_clang_getCompletionAnnotation = CXString Function(
+  ffi.Pointer<ffi.Void> completion_string,
+  ffi.Uint32 annotation_number,
+);
+
+typedef _dart_clang_getCompletionAnnotation = CXString Function(
+  ffi.Pointer<ffi.Void> completion_string,
+  int annotation_number,
+);
+
+typedef _c_clang_getCompletionParent = CXString Function(
+  ffi.Pointer<ffi.Void> completion_string,
+  ffi.Pointer<ffi.Int32> kind,
+);
+
+typedef _dart_clang_getCompletionParent = CXString Function(
+  ffi.Pointer<ffi.Void> completion_string,
+  ffi.Pointer<ffi.Int32> kind,
+);
+
+typedef _c_clang_getCompletionBriefComment = CXString Function(
+  ffi.Pointer<ffi.Void> completion_string,
+);
+
+typedef _dart_clang_getCompletionBriefComment = CXString Function(
+  ffi.Pointer<ffi.Void> completion_string,
+);
+
+typedef _c_clang_getCursorCompletionString = ffi.Pointer<ffi.Void> Function(
+  CXCursor cursor,
+);
+
+typedef _dart_clang_getCursorCompletionString = ffi.Pointer<ffi.Void> Function(
+  CXCursor cursor,
+);
+
 typedef _c_clang_getCompletionNumFixIts = ffi.Uint32 Function(
   ffi.Pointer<CXCodeCompleteResults> results,
   ffi.Uint32 completion_index,
@@ -5376,6 +10036,20 @@
   int completion_index,
 );
 
+typedef _c_clang_getCompletionFixIt = CXString Function(
+  ffi.Pointer<CXCodeCompleteResults> results,
+  ffi.Uint32 completion_index,
+  ffi.Uint32 fixit_index,
+  ffi.Pointer<CXSourceRange> replacement_range,
+);
+
+typedef _dart_clang_getCompletionFixIt = CXString Function(
+  ffi.Pointer<CXCodeCompleteResults> results,
+  int completion_index,
+  int fixit_index,
+  ffi.Pointer<CXSourceRange> replacement_range,
+);
+
 typedef _c_clang_defaultCodeCompleteOptions = ffi.Uint32 Function();
 
 typedef _dart_clang_defaultCodeCompleteOptions = int Function();
@@ -5455,6 +10129,26 @@
   ffi.Pointer<ffi.Uint32> IsIncomplete,
 );
 
+typedef _c_clang_codeCompleteGetContainerUSR = CXString Function(
+  ffi.Pointer<CXCodeCompleteResults> Results,
+);
+
+typedef _dart_clang_codeCompleteGetContainerUSR = CXString Function(
+  ffi.Pointer<CXCodeCompleteResults> Results,
+);
+
+typedef _c_clang_codeCompleteGetObjCSelector = CXString Function(
+  ffi.Pointer<CXCodeCompleteResults> Results,
+);
+
+typedef _dart_clang_codeCompleteGetObjCSelector = CXString Function(
+  ffi.Pointer<CXCodeCompleteResults> Results,
+);
+
+typedef _c_clang_getClangVersion = CXString Function();
+
+typedef _dart_clang_getClangVersion = CXString Function();
+
 typedef _c_clang_toggleCrashRecovery = ffi.Void Function(
   ffi.Uint32 isEnabled,
 );
@@ -5482,6 +10176,14 @@
   ffi.Pointer<ffi.Void> client_data,
 );
 
+typedef _c_clang_Cursor_Evaluate = ffi.Pointer<ffi.Void> Function(
+  CXCursor C,
+);
+
+typedef _dart_clang_Cursor_Evaluate = ffi.Pointer<ffi.Void> Function(
+  CXCursor C,
+);
+
 typedef _c_clang_EvalResult_getKind = ffi.Int32 Function(
   ffi.Pointer<ffi.Void> E,
 );
@@ -5594,6 +10296,30 @@
   ffi.Pointer<ffi.Void> arg0,
 );
 
+typedef _c_clang_findReferencesInFile = ffi.Int32 Function(
+  CXCursor cursor,
+  ffi.Pointer<ffi.Void> file,
+  CXCursorAndRangeVisitor visitor,
+);
+
+typedef _dart_clang_findReferencesInFile = int Function(
+  CXCursor cursor,
+  ffi.Pointer<ffi.Void> file,
+  CXCursorAndRangeVisitor visitor,
+);
+
+typedef _c_clang_findIncludesInFile = ffi.Int32 Function(
+  ffi.Pointer<CXTranslationUnitImpl> TU,
+  ffi.Pointer<ffi.Void> file,
+  CXCursorAndRangeVisitor visitor,
+);
+
+typedef _dart_clang_findIncludesInFile = int Function(
+  ffi.Pointer<CXTranslationUnitImpl> TU,
+  ffi.Pointer<ffi.Void> file,
+  CXCursorAndRangeVisitor visitor,
+);
+
 typedef _c_clang_index_isEntityObjCContainerKind = ffi.Int32 Function(
   ffi.Int32 arg0,
 );
@@ -5802,18 +10528,61 @@
   ffi.Pointer<CXTranslationUnitImpl> arg5,
 );
 
+typedef _c_clang_indexLoc_getFileLocation = ffi.Void Function(
+  CXIdxLoc loc,
+  ffi.Pointer<ffi.Pointer<ffi.Void>> indexFile,
+  ffi.Pointer<ffi.Pointer<ffi.Void>> file,
+  ffi.Pointer<ffi.Uint32> line,
+  ffi.Pointer<ffi.Uint32> column,
+  ffi.Pointer<ffi.Uint32> offset,
+);
+
+typedef _dart_clang_indexLoc_getFileLocation = void Function(
+  CXIdxLoc loc,
+  ffi.Pointer<ffi.Pointer<ffi.Void>> indexFile,
+  ffi.Pointer<ffi.Pointer<ffi.Void>> file,
+  ffi.Pointer<ffi.Uint32> line,
+  ffi.Pointer<ffi.Uint32> column,
+  ffi.Pointer<ffi.Uint32> offset,
+);
+
+typedef _c_clang_indexLoc_getCXSourceLocation = CXSourceLocation Function(
+  CXIdxLoc loc,
+);
+
+typedef _dart_clang_indexLoc_getCXSourceLocation = CXSourceLocation Function(
+  CXIdxLoc loc,
+);
+
+typedef CXFieldVisitor = ffi.Int32 Function(
+  CXCursor,
+  ffi.Pointer<ffi.Void>,
+);
+
+typedef _c_clang_Type_visitFields = ffi.Uint32 Function(
+  CXType T,
+  ffi.Pointer<ffi.NativeFunction<CXFieldVisitor>> visitor,
+  ffi.Pointer<ffi.Void> client_data,
+);
+
+typedef _dart_clang_Type_visitFields = int Function(
+  CXType T,
+  ffi.Pointer<ffi.NativeFunction<CXFieldVisitor>> visitor,
+  ffi.Pointer<ffi.Void> client_data,
+);
+
 typedef _typedefC_2 = ffi.Int32 Function(
   ffi.Pointer<ffi.Void>,
-  ffi.Pointer<ffi.Void>,
+  CXCursor,
+  CXSourceRange,
 );
 
-typedef _typedefC_3 = ffi.Void Function(
-  ffi.Pointer<ffi.Void>,
+typedef _typedefC_3 = ffi.Int32 Function(
   ffi.Pointer<ffi.Void>,
   ffi.Pointer<ffi.Void>,
 );
 
-typedef _typedefC_4 = ffi.Pointer<ffi.Void> Function(
+typedef _typedefC_4 = ffi.Void Function(
   ffi.Pointer<ffi.Void>,
   ffi.Pointer<ffi.Void>,
   ffi.Pointer<ffi.Void>,
@@ -5821,25 +10590,31 @@
 
 typedef _typedefC_5 = ffi.Pointer<ffi.Void> Function(
   ffi.Pointer<ffi.Void>,
-  ffi.Pointer<CXIdxIncludedFileInfo>,
+  ffi.Pointer<ffi.Void>,
+  ffi.Pointer<ffi.Void>,
 );
 
 typedef _typedefC_6 = ffi.Pointer<ffi.Void> Function(
   ffi.Pointer<ffi.Void>,
-  ffi.Pointer<CXIdxImportedASTFileInfo>,
+  ffi.Pointer<CXIdxIncludedFileInfo>,
 );
 
 typedef _typedefC_7 = ffi.Pointer<ffi.Void> Function(
   ffi.Pointer<ffi.Void>,
+  ffi.Pointer<CXIdxImportedASTFileInfo>,
+);
+
+typedef _typedefC_8 = ffi.Pointer<ffi.Void> Function(
+  ffi.Pointer<ffi.Void>,
   ffi.Pointer<ffi.Void>,
 );
 
-typedef _typedefC_8 = ffi.Void Function(
+typedef _typedefC_9 = ffi.Void Function(
   ffi.Pointer<ffi.Void>,
   ffi.Pointer<CXIdxDeclInfo>,
 );
 
-typedef _typedefC_9 = ffi.Void Function(
+typedef _typedefC_10 = ffi.Void Function(
   ffi.Pointer<ffi.Void>,
   ffi.Pointer<CXIdxEntityRefInfo>,
 );
diff --git a/test/native_test/native_test.c b/test/native_test/native_test.c
index 57b23c0..037a73b 100644
--- a/test/native_test/native_test.c
+++ b/test/native_test/native_test.c
@@ -49,3 +49,24 @@
     s->data[2][0][1] = 6;
     return s;
 }
+
+struct Struct3
+{
+    int a;
+    int b;
+    int c;
+};
+
+struct Struct3 Function1StructReturnByValue(int a, int b, int c)
+{
+    struct Struct3 s;
+    s.a = a;
+    s.b = b;
+    s.c = c;
+    return s;
+}
+
+int Function1StructPassByValue(struct Struct3 sum_a_b_c)
+{
+    return sum_a_b_c.a + sum_a_b_c.b + sum_a_b_c.c;
+}
diff --git a/test/native_test/native_test.dart b/test/native_test/native_test.dart
index 479b910..5e90a0b 100644
--- a/test/native_test/native_test.dart
+++ b/test/native_test/native_test.dart
@@ -135,5 +135,11 @@
       expect(() => struct1.ref.data[0][0][-1] = 0,
           throwsA(TypeMatcher<RangeError>()));
     });
+    test('Struct By Value', () {
+      final r = Random();
+      final a = r.nextInt(100), b = r.nextInt(100), c = r.nextInt(100);
+      final s = bindings.Function1StructReturnByValue(a, b, c);
+      expect(bindings.Function1StructPassByValue(s), a + b + c);
+    });
   });
 }
diff --git a/test/native_test/native_test_bindings.dart b/test/native_test/native_test_bindings.dart
index 60825f1..a4ae36f 100644
--- a/test/native_test/native_test_bindings.dart
+++ b/test/native_test/native_test_bindings.dart
@@ -162,6 +162,34 @@
   }
 
   _dart_getStruct1? _getStruct1;
+
+  Struct3 Function1StructReturnByValue(
+    int a,
+    int b,
+    int c,
+  ) {
+    return (_Function1StructReturnByValue ??= _dylib.lookupFunction<
+        _c_Function1StructReturnByValue,
+        _dart_Function1StructReturnByValue>('Function1StructReturnByValue'))(
+      a,
+      b,
+      c,
+    );
+  }
+
+  _dart_Function1StructReturnByValue? _Function1StructReturnByValue;
+
+  int Function1StructPassByValue(
+    Struct3 sum_a_b_c,
+  ) {
+    return (_Function1StructPassByValue ??= _dylib.lookupFunction<
+        _c_Function1StructPassByValue,
+        _dart_Function1StructPassByValue>('Function1StructPassByValue'))(
+      sum_a_b_c,
+    );
+  }
+
+  _dart_Function1StructPassByValue? _Function1StructPassByValue;
 }
 
 class Struct1 extends ffi.Struct {
@@ -303,6 +331,17 @@
   }
 }
 
+class Struct3 extends ffi.Struct {
+  @ffi.Int32()
+  external int a;
+
+  @ffi.Int32()
+  external int b;
+
+  @ffi.Int32()
+  external int c;
+}
+
 typedef _c_Function1Bool = ffi.Uint8 Function(
   ffi.Uint8 x,
 );
@@ -402,3 +441,23 @@
 typedef _c_getStruct1 = ffi.Pointer<Struct1> Function();
 
 typedef _dart_getStruct1 = ffi.Pointer<Struct1> Function();
+
+typedef _c_Function1StructReturnByValue = Struct3 Function(
+  ffi.Int32 a,
+  ffi.Int32 b,
+  ffi.Int32 c,
+);
+
+typedef _dart_Function1StructReturnByValue = Struct3 Function(
+  int a,
+  int b,
+  int c,
+);
+
+typedef _c_Function1StructPassByValue = ffi.Int32 Function(
+  Struct3 sum_a_b_c,
+);
+
+typedef _dart_Function1StructPassByValue = int Function(
+  Struct3 sum_a_b_c,
+);