diff --git a/CHANGELOG.md b/CHANGELOG.md
index bcd11c7..ba4e384 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,7 @@
 # 0.2.0-dev
 - Updated header config. Header `entry-points` and `include-directives` are now specified under `headers` key. Glob syntax is allowed.
+- Updated declaration `include`/`exclude` config. These are now specified as a list.
+- Added Regexp based declaration renaming using `rename` subkey.
 
 # 0.1.5
 - Added support for parsing macros and anonymous unnamed enums. These are generated as top level constants.
diff --git a/README.md b/README.md
index 7cee823..ed8ff82 100644
--- a/README.md
+++ b/README.md
@@ -14,7 +14,8 @@
 ffigen:
   output: 'generated_bindings.dart'
   headers:
-    - 'example.h'
+    entry-points:
+      - 'example.h'
 ```
 Output (_generated_bindings.dart_).
 ```dart
@@ -39,7 +40,7 @@
 - Run the tool- `pub run ffigen`.
 
 ## Setup
-`package:ffigen` uses LLVM. Install LLVM in the following way.
+`package:ffigen` uses LLVM. Install LLVM (9+) in the following way.
 
 #### ubuntu/linux
 1. Install libclangdev - `sudo apt-get install libclang-dev`.
@@ -107,17 +108,16 @@
     <td>Filters for declarations.<br><b>Default: all are included</b></td>
     <td><pre lang="yaml"><code>
 functions:
-  include: # Exclude is also available.
-    names: # Matches with exact name.
-      - someFuncName
-      - anotherName
-    matches: # Matches using regexp.
-      - prefix.*
-      - [a-z][a-zA-Z0-9]*
-  prefix: 'cx_' # Prefix added to all functions.
-  prefix-replacement: # Replaces a functions's prefix.
-    'clang_': ''
-    '_': 'C'</code></pre></td>
+  include: # 'exclude' is also available.
+    - [a-z][a-zA-Z0-9]* # Matches using regexp.
+    - prefix.* # '.' matches any character.
+    - someFuncName # Matches with exact name
+    - anotherName # full names have higher priority.
+  rename:
+    'clang_(.*)': '$1' # Regexp groups based replacement.
+    'clang_dispose': 'dispose' # full name matches have higher priority.
+    '_(.*)': '$1' # Removes '_' from beginning of a name.
+    </code></pre></td>
   </tr>
   <tr>
     <td>array-workaround</td>
diff --git a/example/libclang-example/pubspec.yaml b/example/libclang-example/pubspec.yaml
index b05796f..246400a 100644
--- a/example/libclang-example/pubspec.yaml
+++ b/example/libclang-example/pubspec.yaml
@@ -27,19 +27,14 @@
   compiler-opts: '-I/usr/lib/llvm-9/include/ -I/usr/lib/llvm-10/include/ -IC:\Progra~1\LLVM\include -I/usr/local/opt/llvm/include/ -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/ -Wno-nullability-completeness'
   functions:
     include:
-      matches:
-      # Should be valid regexp.
-        - 'clang_.*'
+      - 'clang_.*' # Can be a regexp, '.' matches any character.
   structs:
     include:
-        matches:
-          - 'CX.*'
+        - 'CX.*'
   enums:
     include:
-      # Compares the exact name.
-      names:
-        - 'CXTypeKind'
-        - 'CXGlobalOptFlags'
+      - 'CXTypeKind' # Full names are given higher priority than regexp.
+      - 'CXGlobalOptFlags'
 
   # These are optional and also default,
   # Omitting any and the default will be used.
diff --git a/lib/src/config_provider/config_types.dart b/lib/src/config_provider/config_types.dart
index a417a18..302e69a 100644
--- a/lib/src/config_provider/config_types.dart
+++ b/lib/src/config_provider/config_types.dart
@@ -91,72 +91,86 @@
   }
 }
 
-/// A generic declaration config.
+/// A generic declaration config, used for Functions, Structs and Enums.
 class Declaration {
-  // matchers
-  List<RegExp> _includeMatchers = [];
-  Set<String> _includeFull = {};
-  List<RegExp> _excludeMatchers = [];
-  Set<String> _excludeFull = {};
-  String _globalPrefix = '';
-  Map<String, String> _prefixReplacement = {};
+  final Includer _includer;
+  final Renamer _renamer;
 
   Declaration({
-    List<String> includeMatchers,
-    List<String> includeFull,
-    List<String> excludeMatchers,
-    List<String> excludeFull,
-    String globalPrefix,
-    Map<String, String> prefixReplacement,
-  }) {
-    if (includeMatchers != null) {
-      _includeMatchers =
-          includeMatchers.map((e) => RegExp(e, dotAll: true)).toList();
-    }
-    if (includeFull != null) {
-      _includeFull = includeFull.map((e) => e).toSet();
-    }
-    if (excludeMatchers != null) {
-      _excludeMatchers =
-          excludeMatchers.map((e) => RegExp(e, dotAll: true)).toList();
-    }
-    if (excludeFull != null) {
-      _excludeFull = excludeFull.map((e) => e).toSet();
-    }
-    if (globalPrefix != null) {
-      _globalPrefix = globalPrefix;
-    }
-    if (prefixReplacement != null) {
-      _prefixReplacement = prefixReplacement;
-    }
-  }
+    Includer includer,
+    Renamer renamer,
+  })  : _includer = includer ?? Includer(),
+        _renamer = renamer ?? Renamer();
 
-  /// Applies prefix and replacement and returns the result.
-  ///
-  /// Also logs warnings if declaration starts with '_'.
-  String getPrefixedName(String name) {
-    // Apply prefix replacement.
-    for (final pattern in _prefixReplacement.keys) {
-      if (name.startsWith(pattern)) {
-        name = name.replaceFirst(pattern, _prefixReplacement[pattern]);
-        break;
-      }
-    }
-
-    // Apply global prefixes.
-    name = '${_globalPrefix}$name';
-
-    return name;
-  }
+  /// Applies renaming and returns the result.
+  String renameUsingConfig(String name) => _renamer.renameUsingConfig(name);
 
   /// Checks if a name is allowed by a filter.
+  bool shouldInclude(String name) => _includer.shouldInclude(name);
+}
+
+/// Matches `$<single_digit_int>`, value can be accessed in group 1 of match.
+final replaceGroupRegexp = RegExp(r'\$([0-9])');
+
+class RenamePattern {
+  final RegExp regExp;
+  final String replacementPattern;
+
+  RenamePattern(this.regExp, this.replacementPattern);
+
+  /// Returns true if [str] has a full match with [regExp].
+  bool matches(String str) => quiver.matchesFull(regExp, str);
+
+  /// Renames [str] according to [replacementPattern].
+  String rename(String str) {
+    if (quiver.matchesFull(regExp, str)) {
+      final regExpMatch = regExp.firstMatch(str);
+      final groups = regExpMatch.groups(
+          List.generate(regExpMatch.groupCount, (index) => index) +
+              [regExpMatch.groupCount]);
+
+      final result =
+          replacementPattern.replaceAllMapped(replaceGroupRegexp, (match) {
+        final groupInt = int.parse(match.group(1));
+        return groups[groupInt];
+      });
+      return result;
+    } else {
+      /// We return [str] if pattern doesn't have a full match.
+      return str;
+    }
+  }
+
+  @override
+  String toString() {
+    return 'Regexp: $regExp, ReplacementPattern: $replacementPattern';
+  }
+}
+
+class Includer {
+  // matchers
+  final List<RegExp> _includeMatchers;
+  final Set<String> _includeFull;
+  final List<RegExp> _excludeMatchers;
+  final Set<String> _excludeFull;
+
+  Includer({
+    List<RegExp> includeMatchers,
+    Set<String> includeFull,
+    List<RegExp> excludeMatchers,
+    Set<String> excludeFull,
+  })  : _includeMatchers = includeMatchers ?? [],
+        _includeFull = includeFull ?? {},
+        _excludeMatchers = excludeMatchers ?? [],
+        _excludeFull = excludeFull ?? {};
+
   bool shouldInclude(String name) {
     if (_excludeFull.contains(name)) {
       return false;
     }
 
     for (final em in _excludeMatchers) {
-      if (em.firstMatch(name)?.end == name.length) {
+      if (quiver.matchesFull(em, name)) {
         return false;
       }
     }
@@ -166,7 +180,7 @@
     }
 
     for (final im in _includeMatchers) {
-      if (im.firstMatch(name)?.end == name.length) {
+      if (quiver.matchesFull(im, name)) {
         return true;
       }
     }
@@ -180,3 +194,31 @@
     }
   }
 }
+
+class Renamer {
+  final Map<String, String> _renameFull;
+  final List<RenamePattern> _renameMatchers;
+
+  Renamer({
+    List<RenamePattern> renamePatterns,
+    Map<String, String> renameFull,
+  })  : _renameMatchers = renamePatterns ?? [],
+        _renameFull = renameFull ?? {};
+
+  String renameUsingConfig(String name) {
+    // Apply full rename (if any).
+    if (_renameFull.containsKey(name)) {
+      return _renameFull[name];
+    }
+
+    // Apply rename regexp (if matches).
+    for (final renamer in _renameMatchers) {
+      if (renamer.matches(name)) {
+        return renamer.rename(name);
+      }
+    }
+
+    // No renaming is provided for this declaration, return unchanged.
+    return name;
+  }
+}
diff --git a/lib/src/config_provider/spec_utils.dart b/lib/src/config_provider/spec_utils.dart
index d6d08cf..8b29d9d 100644
--- a/lib/src/config_provider/spec_utils.dart
+++ b/lib/src/config_provider/spec_utils.dart
@@ -26,9 +26,12 @@
 }
 
 /// Checks if type of value is [T], logs an error if it's not.
-bool checkType<T>(String key, dynamic value) {
+///
+/// [key] is printed as `'item1 -> item2 => item3'` in log message.
+bool checkType<T>(List<String> keys, dynamic value) {
   if (value is! T) {
-    _logger.severe("Expected value of key '$key' to be of type '${T}'.");
+    _logger.severe(
+        "Expected value of key '${keys.join(' -> ')}' to be of type '${T}'.");
     return false;
   }
   return true;
@@ -37,7 +40,7 @@
 bool booleanExtractor(dynamic value) => value as bool;
 
 bool booleanValidator(String name, dynamic value) =>
-    checkType<bool>(name, value);
+    checkType<bool>([name], value);
 
 Map<int, SupportedNativeType> sizemapExtractor(dynamic yamlConfig) {
   final resultMap = <int, SupportedNativeType>{};
@@ -56,7 +59,7 @@
 }
 
 bool sizemapValidator(String name, dynamic yamlConfig) {
-  if (!checkType<YamlMap>(name, yamlConfig)) {
+  if (!checkType<YamlMap>([name], yamlConfig)) {
     return false;
   }
   for (final key in (yamlConfig as YamlMap).keys) {
@@ -72,7 +75,7 @@
     (value as String)?.split(' ');
 
 bool compilerOptsValidator(String name, dynamic value) =>
-    checkType<String>(name, value);
+    checkType<String>([name], value);
 
 Headers headersExtractor(dynamic yamlConfig) {
   final entryPoints = <String>[];
@@ -112,7 +115,7 @@
 }
 
 bool headersValidator(String name, dynamic value) {
-  if (!checkType<YamlMap>(name, value)) {
+  if (!checkType<YamlMap>([name], value)) {
     return false;
   }
   if (!(value as YamlMap).containsKey(strings.entryPoints)) {
@@ -121,8 +124,7 @@
   } else {
     for (final key in (value as YamlMap).keys) {
       if (key == strings.entryPoints || key == strings.includeDirectives) {
-        if (!checkType<YamlList>(key as String, value[key])) {
-          _logger.severe("Expected '$name -> $key' to be a Map.");
+        if (!checkType<YamlList>([name, key as String], value[key])) {
           return false;
         }
       } else {
@@ -137,7 +139,7 @@
 String libclangDylibExtractor(dynamic value) => getDylibPath(value as String);
 
 bool libclangDylibValidator(String name, dynamic value) {
-  if (!checkType<String>(name, value)) {
+  if (!checkType<String>([name], value)) {
     return false;
   } else {
     final dylibPath = getDylibPath(value as String);
@@ -167,37 +169,68 @@
 String outputExtractor(dynamic value) => _replaceSeparators(value as String);
 
 bool outputValidator(String name, dynamic value) =>
-    checkType<String>(name, value);
+    checkType<String>([name], value);
+
+/// Returns true if [str] is not a full name.
+///
+/// E.g `abc` is a full name, `abc.*` is not.
+bool isFullDeclarationName(String str) =>
+    quiver.matchesFull(RegExp('[a-zA-Z_0-9]*'), str);
 
 Declaration declarationConfigExtractor(dynamic yamlMap) {
-  List<String> includeMatchers, includeFull, excludeMatchers, excludeFull;
-  String prefix;
-  Map<String, String> prefixReplacement;
+  final includeMatchers = <RegExp>[],
+      includeFull = <String>{},
+      excludeMatchers = <RegExp>[],
+      excludeFull = <String>{};
+  final renamePatterns = <RenamePattern>[];
+  final renameFull = <String, String>{};
 
-  final include = yamlMap[strings.include] as YamlMap;
+  final include = (yamlMap[strings.include] as YamlList)?.cast<String>();
   if (include != null) {
-    includeMatchers = (include[strings.matches] as YamlList)?.cast<String>();
-    includeFull = (include[strings.names] as YamlList)?.cast<String>();
+    for (final str in include) {
+      if (isFullDeclarationName(str)) {
+        includeFull.add(str);
+      } else {
+        includeMatchers.add(RegExp(str, dotAll: true));
+      }
+    }
   }
 
-  final exclude = yamlMap[strings.exclude] as YamlMap;
+  final exclude = (yamlMap[strings.exclude] as YamlList)?.cast<String>();
   if (exclude != null) {
-    excludeMatchers = (exclude[strings.matches] as YamlList)?.cast<String>();
-    excludeFull = (exclude[strings.names] as YamlList)?.cast<String>();
+    for (final str in exclude) {
+      if (isFullDeclarationName(str)) {
+        excludeFull.add(str);
+      } else {
+        excludeMatchers.add(RegExp(str, dotAll: true));
+      }
+    }
   }
 
-  prefix = yamlMap[strings.prefix] as String;
+  final rename = (yamlMap[strings.rename] as YamlMap)?.cast<String, String>();
 
-  prefixReplacement =
-      (yamlMap[strings.prefix_replacement] as YamlMap)?.cast<String, String>();
+  if (rename != null) {
+    for (final str in rename.keys) {
+      if (isFullDeclarationName(str)) {
+        renameFull[str] = rename[str];
+      } else {
+        renamePatterns
+            .add(RenamePattern(RegExp(str, dotAll: true), rename[str]));
+      }
+    }
+  }
 
   return Declaration(
-    includeMatchers: includeMatchers,
-    includeFull: includeFull,
-    excludeMatchers: excludeMatchers,
-    excludeFull: excludeFull,
-    globalPrefix: prefix,
-    prefixReplacement: prefixReplacement,
+    includer: Includer(
+      includeMatchers: includeMatchers,
+      includeFull: includeFull,
+      excludeMatchers: excludeMatchers,
+      excludeFull: excludeFull,
+    ),
+    renamer: Renamer(
+      renameFull: renameFull,
+      renamePatterns: renamePatterns,
+    ),
   );
 }
 
@@ -206,35 +239,16 @@
   if (value is YamlMap) {
     for (final key in value.keys) {
       if (key == strings.include || key == strings.exclude) {
-        if (value[key] is! YamlMap) {
-          _logger.severe("Expected '$name -> $key' to be a Map.");
+        if (!checkType<YamlList>([name, key as String], value[key])) {
           _result = false;
         }
-        for (final subkey in value[key].keys) {
-          if (subkey == strings.matches || subkey == strings.names) {
-            if (value[key][subkey] is! YamlList) {
-              _logger
-                  .severe("Expected '$name -> $key -> $subkey' to be a List.");
-              _result = false;
-            }
-          } else {
-            _logger.severe("Unknown key '$subkey' in '$name -> $key'.");
-          }
-        }
-      } else if (key == strings.prefix) {
-        if (value[key] is! String) {
-          _logger.severe("Expected '$name -> $key' to be a String.");
-          _result = false;
-        }
-      } else if (key == strings.prefix_replacement) {
-        if (value[key] is! YamlMap) {
-          _logger.severe("Expected '$name -> $key' to be a Map.");
+      } else if (key == strings.rename) {
+        if (!checkType<YamlMap>([name, key as String], value[key])) {
           _result = false;
         } else {
           for (final subkey in value[key].keys) {
-            if (value[key][subkey] is! String) {
-              _logger.severe(
-                  "Expected '$name -> $key -> $subkey' to be a String.");
+            if (!checkType<String>(
+                [name, key as String, subkey as String], value[key][subkey])) {
               _result = false;
             }
           }
@@ -280,7 +294,7 @@
 
 bool dartClassNameValidator(String name, dynamic value) {
   if (value is String &&
-      RegExp('[a-zA-Z]+[_a-zA-Z0-9]*').stringMatch(value) == value) {
+      quiver.matchesFull(RegExp('[a-zA-Z]+[_a-zA-Z0-9]*'), value)) {
     return true;
   } else {
     _logger.severe(
diff --git a/lib/src/header_parser/data.dart b/lib/src/header_parser/data.dart
index ebda2dc..87551cb 100644
--- a/lib/src/header_parser/data.dart
+++ b/lib/src/header_parser/data.dart
@@ -8,6 +8,8 @@
 import 'package:ffigen/src/config_provider.dart';
 import 'clang_bindings/clang_bindings.dart' show Clang;
 
+import 'utils.dart';
+
 /// Holds all Global shared variables.
 
 /// Holds configurations.
@@ -16,6 +18,9 @@
 /// Holds clang functions.
 Clang clang;
 
+/// Used for naming typedefs.
+IncrementalNamer incrementalNamer;
+
 /// Holds the unique id refering to this isolate.
 ///
 /// Used by visitChildren_wrap to call the correct dart function from C.
diff --git a/lib/src/header_parser/parser.dart b/lib/src/header_parser/parser.dart
index 29a86e5..87e14ef 100644
--- a/lib/src/header_parser/parser.dart
+++ b/lib/src/header_parser/parser.dart
@@ -49,6 +49,7 @@
 void initParser(Config c) {
   // Set global configurations.
   config = c;
+  incrementalNamer = IncrementalNamer();
 
   // Find full path of dynamic library and initialise bindings.
   if (findDotDartTool() == null) {
diff --git a/lib/src/header_parser/sub_parsers/enumdecl_parser.dart b/lib/src/header_parser/sub_parsers/enumdecl_parser.dart
index 293fa22..99b6b57 100644
--- a/lib/src/header_parser/sub_parsers/enumdecl_parser.dart
+++ b/lib/src/header_parser/sub_parsers/enumdecl_parser.dart
@@ -47,7 +47,7 @@
     _stack.top.enumClass = EnumClass(
       dartDoc: getCursorDocComment(cursor),
       originalName: enumName,
-      name: config.enumClassDecl.getPrefixedName(enumName),
+      name: config.enumClassDecl.renameUsingConfig(enumName),
     );
     addEnumClassToSeen(enumName, _stack.top.enumClass);
     _addEnumConstant(cursor);
diff --git a/lib/src/header_parser/sub_parsers/functiondecl_parser.dart b/lib/src/header_parser/sub_parsers/functiondecl_parser.dart
index 8f35c24..f3e1507 100644
--- a/lib/src/header_parser/sub_parsers/functiondecl_parser.dart
+++ b/lib/src/header_parser/sub_parsers/functiondecl_parser.dart
@@ -65,7 +65,7 @@
         cursor,
         nesting.length + commentPrefix.length,
       ),
-      name: config.functionDecl.getPrefixedName(funcName),
+      name: config.functionDecl.renameUsingConfig(funcName),
       originalName: funcName,
       returnType: rt,
       parameters: parameters,
diff --git a/lib/src/header_parser/sub_parsers/macro_parser.dart b/lib/src/header_parser/sub_parsers/macro_parser.dart
index 87bb642..27a7b30 100644
--- a/lib/src/header_parser/sub_parsers/macro_parser.dart
+++ b/lib/src/header_parser/sub_parsers/macro_parser.dart
@@ -31,7 +31,7 @@
     // Parse macro only if it's not builtin or function-like.
     _logger.fine(
         "++++ Saved Macro '$originalMacroName' for later : ${cursor.completeStringRepr()}");
-    final prefixedName = config.macroDecl.getPrefixedName(originalMacroName);
+    final prefixedName = config.macroDecl.renameUsingConfig(originalMacroName);
     addMacroToSeen(originalMacroName, prefixedName);
     _saveMacro(prefixedName, originalMacroName);
   }
diff --git a/lib/src/header_parser/sub_parsers/structdecl_parser.dart b/lib/src/header_parser/sub_parsers/structdecl_parser.dart
index 32e2fd7..32e3a76 100644
--- a/lib/src/header_parser/sub_parsers/structdecl_parser.dart
+++ b/lib/src/header_parser/sub_parsers/structdecl_parser.dart
@@ -47,7 +47,7 @@
         '++++ Adding Structure: structName: ${structName}, ${cursor.completeStringRepr()}');
     _stack.top.struc = Struc(
       originalName: structName,
-      name: config.structDecl.getPrefixedName(structName),
+      name: config.structDecl.renameUsingConfig(structName),
       dartDoc: getCursorDocComment(cursor),
     );
     // Adding to seen here to stop recursion if a struct has itself as a
diff --git a/lib/src/header_parser/type_extractor/extractor.dart b/lib/src/header_parser/type_extractor/extractor.dart
index d95b771..1336d7e 100644
--- a/lib/src/header_parser/type_extractor/extractor.dart
+++ b/lib/src/header_parser/type_extractor/extractor.dart
@@ -100,7 +100,7 @@
         structName = cxtype.spelling();
       }
 
-      final fixedStructName = config.structDecl.getPrefixedName(structName);
+      final fixedStructName = config.structDecl.renameUsingConfig(structName);
 
       // Also add a struct binding, if its unseen.
       // TODO(23): Check if we should auto add struct.
@@ -135,9 +135,9 @@
 
   // Set a name for typedefc incase it was null or empty.
   if (name == null || name == '') {
-    name = _getNextIncrementedString('_typedefC');
+    name = incrementalNamer.name('_typedefC');
   } else {
-    name = _getNextIncrementedString(name);
+    name = incrementalNamer.name(name);
   }
   final _parameters = <Parameter>[];
   final totalArgs = clang.clang_getNumArgTypes_wrap(cxtype);
@@ -165,13 +165,3 @@
 
   return Type.nativeFunc(typedefC);
 }
-
-/// Generate a unique string for naming in [Typedef].
-String _getNextIncrementedString(String prefix) {
-  var i = _incrementedStringCounters[prefix] ?? 0;
-  i++;
-  _incrementedStringCounters[prefix] = i;
-  return '${prefix}_$i';
-}
-
-Map<String, int> _incrementedStringCounters = {};
diff --git a/lib/src/header_parser/utils.dart b/lib/src/header_parser/utils.dart
index 3591e88..e8190bf 100644
--- a/lib/src/header_parser/utils.dart
+++ b/lib/src/header_parser/utils.dart
@@ -310,3 +310,15 @@
   T pop() => _stack.removeLast();
   void push(T item) => _stack.add(item);
 }
+
+class IncrementalNamer {
+  final _incrementedStringCounters = <String, int>{};
+
+  /// Appends `_<int>` to base. <int> is incremented on every call.
+  String name(String base) {
+    var i = _incrementedStringCounters[base] ?? 0;
+    i++;
+    _incrementedStringCounters[base] = i;
+    return '${base}_$i';
+  }
+}
diff --git a/lib/src/strings.dart b/lib/src/strings.dart
index 6196075..b432442 100644
--- a/lib/src/strings.dart
+++ b/lib/src/strings.dart
@@ -45,13 +45,7 @@
 // Sub-fields of Declarations.
 const include = 'include';
 const exclude = 'exclude';
-const prefix = 'prefix';
-const prefix_replacement = 'prefix-replacement';
-
-// Sub-fields of include/exclude.
-const matches = 'matches'; // regex
-const names = 'names'; // hashset
-
+const rename = 'rename';
 const sizemap = 'size-map';
 
 // Sizemap values.
diff --git a/test/example_tests/libclang_example_test.dart b/test/example_tests/libclang_example_test.dart
index 761dddc..80cd96d 100644
--- a/test/example_tests/libclang_example_test.dart
+++ b/test/example_tests/libclang_example_test.dart
@@ -23,24 +23,21 @@
 ${strings.headers}:
   ${strings.entryPoints}:
     - third_party/libclang/include/clang-c/Index.h
-  ${strings.include}-directives:
+  ${strings.includeDirectives}:
     - '**CXString.h'
     - '**Index.h'
 
 ${strings.compilerOpts}: '-I/usr/lib/llvm-9/include/ -I/usr/lib/llvm-10/include/ -IC:\Progra~1\LLVM\include -I/usr/local/opt/llvm/include/ -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/ -Wno-nullability-completeness'
 ${strings.functions}:
   ${strings.include}:
-    ${strings.matches}:
-      - 'clang_.*'
+    - 'clang_.*'
 ${strings.structs}:
   ${strings.include}:
-      ${strings.matches}:
-        - 'CX.*'
+      - 'CX.*'
 ${strings.enums}:
   ${strings.include}:
-    ${strings.names}:
-      - 'CXTypeKind'
-      - 'CXGlobalOptFlags'
+    - 'CXTypeKind'
+    - 'CXGlobalOptFlags'
 
 ${strings.name}: 'LibClang'
 ${strings.description}: 'Holds bindings to LibClang.'
diff --git a/test/header_parser_tests/nested_parsing_test.dart b/test/header_parser_tests/nested_parsing_test.dart
index ed1bacf..c4c01a7 100644
--- a/test/header_parser_tests/nested_parsing_test.dart
+++ b/test/header_parser_tests/nested_parsing_test.dart
@@ -29,8 +29,7 @@
     - 'test/header_parser_tests/nested_parsing.h'
 ${strings.structs}:
   ${strings.include}:
-    ${strings.names}:
-      - Struct1
+    - Struct1
         ''') as yaml.YamlMap),
       );
     });
diff --git a/test/header_parser_tests/unnamed_enums_test.dart b/test/header_parser_tests/unnamed_enums_test.dart
index a7ee4c4..99456f3 100644
--- a/test/header_parser_tests/unnamed_enums_test.dart
+++ b/test/header_parser_tests/unnamed_enums_test.dart
@@ -28,8 +28,7 @@
     - 'test/header_parser_tests/unnamed_enums.h'
 ${strings.enums}:
   ${strings.exclude}:
-    ${strings.names}:
-      - Named
+    - Named
         ''') as yaml.YamlMap),
       );
     });
diff --git a/test/large_integration_tests/_expected_cjson_bindings.dart b/test/large_integration_tests/_expected_cjson_bindings.dart
index 7beb2ef..2a33af3 100644
--- a/test/large_integration_tests/_expected_cjson_bindings.dart
+++ b/test/large_integration_tests/_expected_cjson_bindings.dart
@@ -1058,9 +1058,9 @@
 }
 
 class cJSON_Hooks extends ffi.Struct {
-  ffi.Pointer<ffi.NativeFunction<_typedefC_11>> malloc_fn;
+  ffi.Pointer<ffi.NativeFunction<_typedefC_1>> malloc_fn;
 
-  ffi.Pointer<ffi.NativeFunction<_typedefC_12>> free_fn;
+  ffi.Pointer<ffi.NativeFunction<_typedefC_2>> free_fn;
 }
 
 const int CJSON_VERSION_MAJOR = 1;
@@ -1775,10 +1775,10 @@
   ffi.Pointer<ffi.Void> object,
 );
 
-typedef _typedefC_11 = ffi.Pointer<ffi.Void> Function(
+typedef _typedefC_1 = ffi.Pointer<ffi.Void> Function(
   ffi.Uint64,
 );
 
-typedef _typedefC_12 = ffi.Void Function(
+typedef _typedefC_2 = ffi.Void Function(
   ffi.Pointer<ffi.Void>,
 );
diff --git a/test/large_integration_tests/_expected_sqlite_bindings.dart b/test/large_integration_tests/_expected_sqlite_bindings.dart
index ad214b3..f2f0a23 100644
--- a/test/large_integration_tests/_expected_sqlite_bindings.dart
+++ b/test/large_integration_tests/_expected_sqlite_bindings.dart
@@ -231,7 +231,7 @@
   int sqlite3_exec(
     ffi.Pointer<sqlite3> arg0,
     ffi.Pointer<ffi.Int8> sql,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_13>> callback,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_1>> callback,
     ffi.Pointer<ffi.Void> arg3,
     ffi.Pointer<ffi.Pointer<ffi.Int8>> errmsg,
   ) {
@@ -816,7 +816,7 @@
   /// or [prepared statement] that invoked the busy handler.
   int sqlite3_busy_handler(
     ffi.Pointer<sqlite3> arg0,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_32>> arg1,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_20>> arg1,
     ffi.Pointer<ffi.Void> arg2,
   ) {
     _sqlite3_busy_handler ??= _dylib.lookupFunction<_c_sqlite3_busy_handler,
@@ -1356,7 +1356,7 @@
   /// sqlite3_prepare_v2() to reprepare a statement after a schema change.
   int sqlite3_set_authorizer(
     ffi.Pointer<sqlite3> arg0,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_33>> xAuth,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_21>> xAuth,
     ffi.Pointer<ffi.Void> pUserData,
   ) {
     _sqlite3_set_authorizer ??= _dylib.lookupFunction<_c_sqlite3_set_authorizer,
@@ -1402,7 +1402,7 @@
   /// profile callback.
   ffi.Pointer<ffi.Void> sqlite3_trace(
     ffi.Pointer<sqlite3> arg0,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_34>> xTrace,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_22>> xTrace,
     ffi.Pointer<ffi.Void> arg2,
   ) {
     _sqlite3_trace ??= _dylib
@@ -1418,7 +1418,7 @@
 
   ffi.Pointer<ffi.Void> sqlite3_profile(
     ffi.Pointer<sqlite3> arg0,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_35>> xProfile,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_23>> xProfile,
     ffi.Pointer<ffi.Void> arg2,
   ) {
     _sqlite3_profile ??=
@@ -1463,7 +1463,7 @@
   int sqlite3_trace_v2(
     ffi.Pointer<sqlite3> arg0,
     int uMask,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_36>> xCallback,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_24>> xCallback,
     ffi.Pointer<ffi.Void> pCtx,
   ) {
     _sqlite3_trace_v2 ??=
@@ -1511,7 +1511,7 @@
   void sqlite3_progress_handler(
     ffi.Pointer<sqlite3> arg0,
     int arg1,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_37>> arg2,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_25>> arg2,
     ffi.Pointer<ffi.Void> arg3,
   ) {
     _sqlite3_progress_handler ??= _dylib.lookupFunction<
@@ -2819,7 +2819,7 @@
     int arg1,
     ffi.Pointer<ffi.Void> arg2,
     int n,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_38>> arg4,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_26>> arg4,
   ) {
     _sqlite3_bind_blob ??=
         _dylib.lookupFunction<_c_sqlite3_bind_blob, _dart_sqlite3_bind_blob>(
@@ -2840,7 +2840,7 @@
     int arg1,
     ffi.Pointer<ffi.Void> arg2,
     int arg3,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_39>> arg4,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_27>> arg4,
   ) {
     _sqlite3_bind_blob64 ??= _dylib.lookupFunction<_c_sqlite3_bind_blob64,
         _dart_sqlite3_bind_blob64>('sqlite3_bind_blob64');
@@ -2925,7 +2925,7 @@
     int arg1,
     ffi.Pointer<ffi.Int8> arg2,
     int arg3,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_40>> arg4,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_28>> arg4,
   ) {
     _sqlite3_bind_text ??=
         _dylib.lookupFunction<_c_sqlite3_bind_text, _dart_sqlite3_bind_text>(
@@ -2946,7 +2946,7 @@
     int arg1,
     ffi.Pointer<ffi.Void> arg2,
     int arg3,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_41>> arg4,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_29>> arg4,
   ) {
     _sqlite3_bind_text16 ??= _dylib.lookupFunction<_c_sqlite3_bind_text16,
         _dart_sqlite3_bind_text16>('sqlite3_bind_text16');
@@ -2966,7 +2966,7 @@
     int arg1,
     ffi.Pointer<ffi.Int8> arg2,
     int arg3,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_42>> arg4,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_30>> arg4,
     int encoding,
   ) {
     _sqlite3_bind_text64 ??= _dylib.lookupFunction<_c_sqlite3_bind_text64,
@@ -3005,7 +3005,7 @@
     int arg1,
     ffi.Pointer<ffi.Void> arg2,
     ffi.Pointer<ffi.Int8> arg3,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_43>> arg4,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_31>> arg4,
   ) {
     _sqlite3_bind_pointer ??= _dylib.lookupFunction<_c_sqlite3_bind_pointer,
         _dart_sqlite3_bind_pointer>('sqlite3_bind_pointer');
@@ -4105,9 +4105,9 @@
     int nArg,
     int eTextRep,
     ffi.Pointer<ffi.Void> pApp,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_44>> xFunc,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_45>> xStep,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_46>> xFinal,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_32>> xFunc,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_33>> xStep,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_34>> xFinal,
   ) {
     _sqlite3_create_function ??= _dylib.lookupFunction<
         _c_sqlite3_create_function,
@@ -4132,9 +4132,9 @@
     int nArg,
     int eTextRep,
     ffi.Pointer<ffi.Void> pApp,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_47>> xFunc,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_48>> xStep,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_49>> xFinal,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_35>> xFunc,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_36>> xStep,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_37>> xFinal,
   ) {
     _sqlite3_create_function16 ??= _dylib.lookupFunction<
         _c_sqlite3_create_function16,
@@ -4159,10 +4159,10 @@
     int nArg,
     int eTextRep,
     ffi.Pointer<ffi.Void> pApp,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_50>> xFunc,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_51>> xStep,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_52>> xFinal,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_53>> xDestroy,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_38>> xFunc,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_39>> xStep,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_40>> xFinal,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_41>> xDestroy,
   ) {
     _sqlite3_create_function_v2 ??= _dylib.lookupFunction<
         _c_sqlite3_create_function_v2,
@@ -4188,11 +4188,11 @@
     int nArg,
     int eTextRep,
     ffi.Pointer<ffi.Void> pApp,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_54>> xStep,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_55>> xFinal,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_56>> xValue,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_57>> xInverse,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_58>> xDestroy,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_42>> xStep,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_43>> xFinal,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_44>> xValue,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_45>> xInverse,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_46>> xDestroy,
   ) {
     _sqlite3_create_window_function ??= _dylib.lookupFunction<
         _c_sqlite3_create_window_function,
@@ -4271,7 +4271,7 @@
   _dart_sqlite3_thread_cleanup _sqlite3_thread_cleanup;
 
   int sqlite3_memory_alarm(
-    ffi.Pointer<ffi.NativeFunction<_typedefC_59>> arg0,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_47>> arg0,
     ffi.Pointer<ffi.Void> arg1,
     int arg2,
   ) {
@@ -4831,7 +4831,7 @@
     ffi.Pointer<sqlite3_context> arg0,
     int N,
     ffi.Pointer<ffi.Void> arg2,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_60>> arg3,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_48>> arg3,
   ) {
     _sqlite3_set_auxdata ??= _dylib.lookupFunction<_c_sqlite3_set_auxdata,
         _dart_sqlite3_set_auxdata>('sqlite3_set_auxdata');
@@ -4993,7 +4993,7 @@
     ffi.Pointer<sqlite3_context> arg0,
     ffi.Pointer<ffi.Void> arg1,
     int arg2,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_61>> arg3,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_49>> arg3,
   ) {
     _sqlite3_result_blob ??= _dylib.lookupFunction<_c_sqlite3_result_blob,
         _dart_sqlite3_result_blob>('sqlite3_result_blob');
@@ -5011,7 +5011,7 @@
     ffi.Pointer<sqlite3_context> arg0,
     ffi.Pointer<ffi.Void> arg1,
     int arg2,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_62>> arg3,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_50>> arg3,
   ) {
     _sqlite3_result_blob64 ??= _dylib.lookupFunction<_c_sqlite3_result_blob64,
         _dart_sqlite3_result_blob64>('sqlite3_result_blob64');
@@ -5157,7 +5157,7 @@
     ffi.Pointer<sqlite3_context> arg0,
     ffi.Pointer<ffi.Int8> arg1,
     int arg2,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_63>> arg3,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_51>> arg3,
   ) {
     _sqlite3_result_text ??= _dylib.lookupFunction<_c_sqlite3_result_text,
         _dart_sqlite3_result_text>('sqlite3_result_text');
@@ -5175,7 +5175,7 @@
     ffi.Pointer<sqlite3_context> arg0,
     ffi.Pointer<ffi.Int8> arg1,
     int arg2,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_64>> arg3,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_52>> arg3,
     int encoding,
   ) {
     _sqlite3_result_text64 ??= _dylib.lookupFunction<_c_sqlite3_result_text64,
@@ -5195,7 +5195,7 @@
     ffi.Pointer<sqlite3_context> arg0,
     ffi.Pointer<ffi.Void> arg1,
     int arg2,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_65>> arg3,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_53>> arg3,
   ) {
     _sqlite3_result_text16 ??= _dylib.lookupFunction<_c_sqlite3_result_text16,
         _dart_sqlite3_result_text16>('sqlite3_result_text16');
@@ -5213,7 +5213,7 @@
     ffi.Pointer<sqlite3_context> arg0,
     ffi.Pointer<ffi.Void> arg1,
     int arg2,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_66>> arg3,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_54>> arg3,
   ) {
     _sqlite3_result_text16le ??= _dylib.lookupFunction<
         _c_sqlite3_result_text16le,
@@ -5232,7 +5232,7 @@
     ffi.Pointer<sqlite3_context> arg0,
     ffi.Pointer<ffi.Void> arg1,
     int arg2,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_67>> arg3,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_55>> arg3,
   ) {
     _sqlite3_result_text16be ??= _dylib.lookupFunction<
         _c_sqlite3_result_text16be,
@@ -5265,7 +5265,7 @@
     ffi.Pointer<sqlite3_context> arg0,
     ffi.Pointer<ffi.Void> arg1,
     ffi.Pointer<ffi.Int8> arg2,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_68>> arg3,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_56>> arg3,
   ) {
     _sqlite3_result_pointer ??= _dylib.lookupFunction<_c_sqlite3_result_pointer,
         _dart_sqlite3_result_pointer>('sqlite3_result_pointer');
@@ -5417,7 +5417,7 @@
     ffi.Pointer<ffi.Int8> zName,
     int eTextRep,
     ffi.Pointer<ffi.Void> pArg,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_69>> xCompare,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_57>> xCompare,
   ) {
     _sqlite3_create_collation ??= _dylib.lookupFunction<
         _c_sqlite3_create_collation,
@@ -5438,8 +5438,8 @@
     ffi.Pointer<ffi.Int8> zName,
     int eTextRep,
     ffi.Pointer<ffi.Void> pArg,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_70>> xCompare,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_71>> xDestroy,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_58>> xCompare,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_59>> xDestroy,
   ) {
     _sqlite3_create_collation_v2 ??= _dylib.lookupFunction<
         _c_sqlite3_create_collation_v2,
@@ -5461,7 +5461,7 @@
     ffi.Pointer<ffi.Void> zName,
     int eTextRep,
     ffi.Pointer<ffi.Void> pArg,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_72>> xCompare,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_60>> xCompare,
   ) {
     _sqlite3_create_collation16 ??= _dylib.lookupFunction<
         _c_sqlite3_create_collation16,
@@ -5505,7 +5505,7 @@
   int sqlite3_collation_needed(
     ffi.Pointer<sqlite3> arg0,
     ffi.Pointer<ffi.Void> arg1,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_73>> arg2,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_61>> arg2,
   ) {
     _sqlite3_collation_needed ??= _dylib.lookupFunction<
         _c_sqlite3_collation_needed,
@@ -5522,7 +5522,7 @@
   int sqlite3_collation_needed16(
     ffi.Pointer<sqlite3> arg0,
     ffi.Pointer<ffi.Void> arg1,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_74>> arg2,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_62>> arg2,
   ) {
     _sqlite3_collation_needed16 ??= _dylib.lookupFunction<
         _c_sqlite3_collation_needed16,
@@ -5815,7 +5815,7 @@
   /// See also the [sqlite3_update_hook()] interface.
   ffi.Pointer<ffi.Void> sqlite3_commit_hook(
     ffi.Pointer<sqlite3> arg0,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_75>> arg1,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_63>> arg1,
     ffi.Pointer<ffi.Void> arg2,
   ) {
     _sqlite3_commit_hook ??= _dylib.lookupFunction<_c_sqlite3_commit_hook,
@@ -5831,7 +5831,7 @@
 
   ffi.Pointer<ffi.Void> sqlite3_rollback_hook(
     ffi.Pointer<sqlite3> arg0,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_76>> arg1,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_64>> arg1,
     ffi.Pointer<ffi.Void> arg2,
   ) {
     _sqlite3_rollback_hook ??= _dylib.lookupFunction<_c_sqlite3_rollback_hook,
@@ -5894,7 +5894,7 @@
   /// and [sqlite3_preupdate_hook()] interfaces.
   ffi.Pointer<ffi.Void> sqlite3_update_hook(
     ffi.Pointer<sqlite3> arg0,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_77>> arg1,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_65>> arg1,
     ffi.Pointer<ffi.Void> arg2,
   ) {
     _sqlite3_update_hook ??= _dylib.lookupFunction<_c_sqlite3_update_hook,
@@ -6342,7 +6342,7 @@
   /// See also: [sqlite3_reset_auto_extension()]
   /// and [sqlite3_cancel_auto_extension()]
   int sqlite3_auto_extension(
-    ffi.Pointer<ffi.NativeFunction<_typedefC_78>> xEntryPoint,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_66>> xEntryPoint,
   ) {
     _sqlite3_auto_extension ??= _dylib.lookupFunction<_c_sqlite3_auto_extension,
         _dart_sqlite3_auto_extension>('sqlite3_auto_extension');
@@ -6362,7 +6362,7 @@
   /// unregistered and it returns 0 if X was not on the list of initialization
   /// routines.
   int sqlite3_cancel_auto_extension(
-    ffi.Pointer<ffi.NativeFunction<_typedefC_79>> xEntryPoint,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_67>> xEntryPoint,
   ) {
     _sqlite3_cancel_auto_extension ??= _dylib.lookupFunction<
         _c_sqlite3_cancel_auto_extension,
@@ -6440,7 +6440,7 @@
     ffi.Pointer<ffi.Int8> zName,
     ffi.Pointer<sqlite3_module> p,
     ffi.Pointer<ffi.Void> pClientData,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_80>> xDestroy,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_68>> xDestroy,
   ) {
     _sqlite3_create_module_v2 ??= _dylib.lookupFunction<
         _c_sqlite3_create_module_v2,
@@ -8024,7 +8024,7 @@
   /// SQLITE_LOCKED.)^
   int sqlite3_unlock_notify(
     ffi.Pointer<sqlite3> pBlocked,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_81>> xNotify,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_69>> xNotify,
     ffi.Pointer<ffi.Void> pNotifyArg,
   ) {
     _sqlite3_unlock_notify ??= _dylib.lookupFunction<_c_sqlite3_unlock_notify,
@@ -8207,7 +8207,7 @@
   /// overwrite any prior [sqlite3_wal_hook()] settings.
   ffi.Pointer<ffi.Void> sqlite3_wal_hook(
     ffi.Pointer<sqlite3> arg0,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_82>> arg1,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_70>> arg1,
     ffi.Pointer<ffi.Void> arg2,
   ) {
     _sqlite3_wal_hook ??=
@@ -8955,7 +8955,7 @@
   int sqlite3_rtree_geometry_callback(
     ffi.Pointer<sqlite3> db,
     ffi.Pointer<ffi.Int8> zGeom,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_83>> xGeom,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_71>> xGeom,
     ffi.Pointer<ffi.Void> pContext,
   ) {
     _sqlite3_rtree_geometry_callback ??= _dylib.lookupFunction<
@@ -8979,9 +8979,9 @@
   int sqlite3_rtree_query_callback(
     ffi.Pointer<sqlite3> db,
     ffi.Pointer<ffi.Int8> zQueryFunc,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_84>> xQueryFunc,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_72>> xQueryFunc,
     ffi.Pointer<ffi.Void> pContext,
-    ffi.Pointer<ffi.NativeFunction<_typedefC_85>> xDestructor,
+    ffi.Pointer<ffi.NativeFunction<_typedefC_73>> xDestructor,
   ) {
     _sqlite3_rtree_query_callback ??= _dylib.lookupFunction<
         _c_sqlite3_rtree_query_callback,
@@ -9006,43 +9006,43 @@
   @ffi.Int32()
   int iVersion;
 
-  ffi.Pointer<ffi.NativeFunction<_typedefC_14>> xClose;
+  ffi.Pointer<ffi.NativeFunction<_typedefC_2>> xClose;
 
-  ffi.Pointer<ffi.NativeFunction<_typedefC_15>> xRead;
+  ffi.Pointer<ffi.NativeFunction<_typedefC_3>> xRead;
 
-  ffi.Pointer<ffi.NativeFunction<_typedefC_16>> xWrite;
+  ffi.Pointer<ffi.NativeFunction<_typedefC_4>> xWrite;
 
-  ffi.Pointer<ffi.NativeFunction<_typedefC_17>> xTruncate;
+  ffi.Pointer<ffi.NativeFunction<_typedefC_5>> xTruncate;
 
-  ffi.Pointer<ffi.NativeFunction<_typedefC_18>> xSync;
+  ffi.Pointer<ffi.NativeFunction<_typedefC_6>> xSync;
 
-  ffi.Pointer<ffi.NativeFunction<_typedefC_19>> xFileSize;
+  ffi.Pointer<ffi.NativeFunction<_typedefC_7>> xFileSize;
 
-  ffi.Pointer<ffi.NativeFunction<_typedefC_20>> xLock;
+  ffi.Pointer<ffi.NativeFunction<_typedefC_8>> xLock;
 
-  ffi.Pointer<ffi.NativeFunction<_typedefC_21>> xUnlock;
+  ffi.Pointer<ffi.NativeFunction<_typedefC_9>> xUnlock;
 
-  ffi.Pointer<ffi.NativeFunction<_typedefC_22>> xCheckReservedLock;
+  ffi.Pointer<ffi.NativeFunction<_typedefC_10>> xCheckReservedLock;
 
-  ffi.Pointer<ffi.NativeFunction<_typedefC_23>> xFileControl;
+  ffi.Pointer<ffi.NativeFunction<_typedefC_11>> xFileControl;
 
-  ffi.Pointer<ffi.NativeFunction<_typedefC_24>> xSectorSize;
+  ffi.Pointer<ffi.NativeFunction<_typedefC_12>> xSectorSize;
 
-  ffi.Pointer<ffi.NativeFunction<_typedefC_25>> xDeviceCharacteristics;
+  ffi.Pointer<ffi.NativeFunction<_typedefC_13>> xDeviceCharacteristics;
 
   /// Methods above are valid for version 1
-  ffi.Pointer<ffi.NativeFunction<_typedefC_26>> xShmMap;
+  ffi.Pointer<ffi.NativeFunction<_typedefC_14>> xShmMap;
 
-  ffi.Pointer<ffi.NativeFunction<_typedefC_27>> xShmLock;
+  ffi.Pointer<ffi.NativeFunction<_typedefC_15>> xShmLock;
 
-  ffi.Pointer<ffi.NativeFunction<_typedefC_28>> xShmBarrier;
+  ffi.Pointer<ffi.NativeFunction<_typedefC_16>> xShmBarrier;
 
-  ffi.Pointer<ffi.NativeFunction<_typedefC_29>> xShmUnmap;
+  ffi.Pointer<ffi.NativeFunction<_typedefC_17>> xShmUnmap;
 
   /// Methods above are valid for version 2
-  ffi.Pointer<ffi.NativeFunction<_typedefC_30>> xFetch;
+  ffi.Pointer<ffi.NativeFunction<_typedefC_18>> xFetch;
 
-  ffi.Pointer<ffi.NativeFunction<_typedefC_31>> xUnfetch;
+  ffi.Pointer<ffi.NativeFunction<_typedefC_19>> xUnfetch;
 }
 
 class sqlite3_mutex extends ffi.Struct {}
@@ -10785,7 +10785,7 @@
   ffi.Pointer<sqlite3> arg0,
 );
 
-typedef _typedefC_13 = ffi.Int32 Function(
+typedef _typedefC_1 = ffi.Int32 Function(
   ffi.Pointer<ffi.Void>,
   ffi.Int32,
   ffi.Pointer<ffi.Pointer<ffi.Int8>>,
@@ -10795,7 +10795,7 @@
 typedef _c_sqlite3_exec = ffi.Int32 Function(
   ffi.Pointer<sqlite3> arg0,
   ffi.Pointer<ffi.Int8> sql,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_13>> callback,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_1>> callback,
   ffi.Pointer<ffi.Void> arg3,
   ffi.Pointer<ffi.Pointer<ffi.Int8>> errmsg,
 );
@@ -10803,7 +10803,7 @@
 typedef _dart_sqlite3_exec = int Function(
   ffi.Pointer<sqlite3> arg0,
   ffi.Pointer<ffi.Int8> sql,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_13>> callback,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_1>> callback,
   ffi.Pointer<ffi.Void> arg3,
   ffi.Pointer<ffi.Pointer<ffi.Int8>> errmsg,
 );
@@ -10910,20 +10910,20 @@
   ffi.Pointer<ffi.Void> sql,
 );
 
-typedef _typedefC_32 = ffi.Int32 Function(
+typedef _typedefC_20 = ffi.Int32 Function(
   ffi.Pointer<ffi.Void>,
   ffi.Int32,
 );
 
 typedef _c_sqlite3_busy_handler = ffi.Int32 Function(
   ffi.Pointer<sqlite3> arg0,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_32>> arg1,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_20>> arg1,
   ffi.Pointer<ffi.Void> arg2,
 );
 
 typedef _dart_sqlite3_busy_handler = int Function(
   ffi.Pointer<sqlite3> arg0,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_32>> arg1,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_20>> arg1,
   ffi.Pointer<ffi.Void> arg2,
 );
 
@@ -11057,7 +11057,7 @@
   ffi.Pointer<ffi.Void> P,
 );
 
-typedef _typedefC_33 = ffi.Int32 Function(
+typedef _typedefC_21 = ffi.Int32 Function(
   ffi.Pointer<ffi.Void>,
   ffi.Int32,
   ffi.Pointer<ffi.Int8>,
@@ -11068,34 +11068,34 @@
 
 typedef _c_sqlite3_set_authorizer = ffi.Int32 Function(
   ffi.Pointer<sqlite3> arg0,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_33>> xAuth,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_21>> xAuth,
   ffi.Pointer<ffi.Void> pUserData,
 );
 
 typedef _dart_sqlite3_set_authorizer = int Function(
   ffi.Pointer<sqlite3> arg0,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_33>> xAuth,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_21>> xAuth,
   ffi.Pointer<ffi.Void> pUserData,
 );
 
-typedef _typedefC_34 = ffi.Void Function(
+typedef _typedefC_22 = ffi.Void Function(
   ffi.Pointer<ffi.Void>,
   ffi.Pointer<ffi.Int8>,
 );
 
 typedef _c_sqlite3_trace = ffi.Pointer<ffi.Void> Function(
   ffi.Pointer<sqlite3> arg0,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_34>> xTrace,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_22>> xTrace,
   ffi.Pointer<ffi.Void> arg2,
 );
 
 typedef _dart_sqlite3_trace = ffi.Pointer<ffi.Void> Function(
   ffi.Pointer<sqlite3> arg0,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_34>> xTrace,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_22>> xTrace,
   ffi.Pointer<ffi.Void> arg2,
 );
 
-typedef _typedefC_35 = ffi.Void Function(
+typedef _typedefC_23 = ffi.Void Function(
   ffi.Pointer<ffi.Void>,
   ffi.Pointer<ffi.Int8>,
   ffi.Uint64,
@@ -11103,17 +11103,17 @@
 
 typedef _c_sqlite3_profile = ffi.Pointer<ffi.Void> Function(
   ffi.Pointer<sqlite3> arg0,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_35>> xProfile,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_23>> xProfile,
   ffi.Pointer<ffi.Void> arg2,
 );
 
 typedef _dart_sqlite3_profile = ffi.Pointer<ffi.Void> Function(
   ffi.Pointer<sqlite3> arg0,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_35>> xProfile,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_23>> xProfile,
   ffi.Pointer<ffi.Void> arg2,
 );
 
-typedef _typedefC_36 = ffi.Int32 Function(
+typedef _typedefC_24 = ffi.Int32 Function(
   ffi.Uint32,
   ffi.Pointer<ffi.Void>,
   ffi.Pointer<ffi.Void>,
@@ -11123,32 +11123,32 @@
 typedef _c_sqlite3_trace_v2 = ffi.Int32 Function(
   ffi.Pointer<sqlite3> arg0,
   ffi.Uint32 uMask,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_36>> xCallback,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_24>> xCallback,
   ffi.Pointer<ffi.Void> pCtx,
 );
 
 typedef _dart_sqlite3_trace_v2 = int Function(
   ffi.Pointer<sqlite3> arg0,
   int uMask,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_36>> xCallback,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_24>> xCallback,
   ffi.Pointer<ffi.Void> pCtx,
 );
 
-typedef _typedefC_37 = ffi.Int32 Function(
+typedef _typedefC_25 = ffi.Int32 Function(
   ffi.Pointer<ffi.Void>,
 );
 
 typedef _c_sqlite3_progress_handler = ffi.Void Function(
   ffi.Pointer<sqlite3> arg0,
   ffi.Int32 arg1,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_37>> arg2,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_25>> arg2,
   ffi.Pointer<ffi.Void> arg3,
 );
 
 typedef _dart_sqlite3_progress_handler = void Function(
   ffi.Pointer<sqlite3> arg0,
   int arg1,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_37>> arg2,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_25>> arg2,
   ffi.Pointer<ffi.Void> arg3,
 );
 
@@ -11486,7 +11486,7 @@
   ffi.Pointer<sqlite3_stmt> arg0,
 );
 
-typedef _typedefC_38 = ffi.Void Function(
+typedef _typedefC_26 = ffi.Void Function(
   ffi.Pointer<ffi.Void>,
 );
 
@@ -11495,7 +11495,7 @@
   ffi.Int32 arg1,
   ffi.Pointer<ffi.Void> arg2,
   ffi.Int32 n,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_38>> arg4,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_26>> arg4,
 );
 
 typedef _dart_sqlite3_bind_blob = int Function(
@@ -11503,10 +11503,10 @@
   int arg1,
   ffi.Pointer<ffi.Void> arg2,
   int n,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_38>> arg4,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_26>> arg4,
 );
 
-typedef _typedefC_39 = ffi.Void Function(
+typedef _typedefC_27 = ffi.Void Function(
   ffi.Pointer<ffi.Void>,
 );
 
@@ -11515,7 +11515,7 @@
   ffi.Int32 arg1,
   ffi.Pointer<ffi.Void> arg2,
   ffi.Uint64 arg3,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_39>> arg4,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_27>> arg4,
 );
 
 typedef _dart_sqlite3_bind_blob64 = int Function(
@@ -11523,7 +11523,7 @@
   int arg1,
   ffi.Pointer<ffi.Void> arg2,
   int arg3,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_39>> arg4,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_27>> arg4,
 );
 
 typedef _c_sqlite3_bind_double = ffi.Int32 Function(
@@ -11572,7 +11572,7 @@
   int arg1,
 );
 
-typedef _typedefC_40 = ffi.Void Function(
+typedef _typedefC_28 = ffi.Void Function(
   ffi.Pointer<ffi.Void>,
 );
 
@@ -11581,7 +11581,7 @@
   ffi.Int32 arg1,
   ffi.Pointer<ffi.Int8> arg2,
   ffi.Int32 arg3,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_40>> arg4,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_28>> arg4,
 );
 
 typedef _dart_sqlite3_bind_text = int Function(
@@ -11589,10 +11589,10 @@
   int arg1,
   ffi.Pointer<ffi.Int8> arg2,
   int arg3,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_40>> arg4,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_28>> arg4,
 );
 
-typedef _typedefC_41 = ffi.Void Function(
+typedef _typedefC_29 = ffi.Void Function(
   ffi.Pointer<ffi.Void>,
 );
 
@@ -11601,7 +11601,7 @@
   ffi.Int32 arg1,
   ffi.Pointer<ffi.Void> arg2,
   ffi.Int32 arg3,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_41>> arg4,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_29>> arg4,
 );
 
 typedef _dart_sqlite3_bind_text16 = int Function(
@@ -11609,10 +11609,10 @@
   int arg1,
   ffi.Pointer<ffi.Void> arg2,
   int arg3,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_41>> arg4,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_29>> arg4,
 );
 
-typedef _typedefC_42 = ffi.Void Function(
+typedef _typedefC_30 = ffi.Void Function(
   ffi.Pointer<ffi.Void>,
 );
 
@@ -11621,7 +11621,7 @@
   ffi.Int32 arg1,
   ffi.Pointer<ffi.Int8> arg2,
   ffi.Uint64 arg3,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_42>> arg4,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_30>> arg4,
   ffi.Uint8 encoding,
 );
 
@@ -11630,7 +11630,7 @@
   int arg1,
   ffi.Pointer<ffi.Int8> arg2,
   int arg3,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_42>> arg4,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_30>> arg4,
   int encoding,
 );
 
@@ -11646,7 +11646,7 @@
   ffi.Pointer<sqlite3_value> arg2,
 );
 
-typedef _typedefC_43 = ffi.Void Function(
+typedef _typedefC_31 = ffi.Void Function(
   ffi.Pointer<ffi.Void>,
 );
 
@@ -11655,7 +11655,7 @@
   ffi.Int32 arg1,
   ffi.Pointer<ffi.Void> arg2,
   ffi.Pointer<ffi.Int8> arg3,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_43>> arg4,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_31>> arg4,
 );
 
 typedef _dart_sqlite3_bind_pointer = int Function(
@@ -11663,7 +11663,7 @@
   int arg1,
   ffi.Pointer<ffi.Void> arg2,
   ffi.Pointer<ffi.Int8> arg3,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_43>> arg4,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_31>> arg4,
 );
 
 typedef _c_sqlite3_bind_zeroblob = ffi.Int32 Function(
@@ -11966,19 +11966,19 @@
   ffi.Pointer<sqlite3_stmt> pStmt,
 );
 
-typedef _typedefC_44 = ffi.Void Function(
+typedef _typedefC_32 = ffi.Void Function(
   ffi.Pointer<sqlite3_context>,
   ffi.Int32,
   ffi.Pointer<ffi.Pointer<sqlite3_value>>,
 );
 
-typedef _typedefC_45 = ffi.Void Function(
+typedef _typedefC_33 = ffi.Void Function(
   ffi.Pointer<sqlite3_context>,
   ffi.Int32,
   ffi.Pointer<ffi.Pointer<sqlite3_value>>,
 );
 
-typedef _typedefC_46 = ffi.Void Function(
+typedef _typedefC_34 = ffi.Void Function(
   ffi.Pointer<sqlite3_context>,
 );
 
@@ -11988,9 +11988,9 @@
   ffi.Int32 nArg,
   ffi.Int32 eTextRep,
   ffi.Pointer<ffi.Void> pApp,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_44>> xFunc,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_45>> xStep,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_46>> xFinal,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_32>> xFunc,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_33>> xStep,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_34>> xFinal,
 );
 
 typedef _dart_sqlite3_create_function = int Function(
@@ -11999,24 +11999,24 @@
   int nArg,
   int eTextRep,
   ffi.Pointer<ffi.Void> pApp,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_44>> xFunc,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_45>> xStep,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_46>> xFinal,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_32>> xFunc,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_33>> xStep,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_34>> xFinal,
 );
 
-typedef _typedefC_47 = ffi.Void Function(
+typedef _typedefC_35 = ffi.Void Function(
   ffi.Pointer<sqlite3_context>,
   ffi.Int32,
   ffi.Pointer<ffi.Pointer<sqlite3_value>>,
 );
 
-typedef _typedefC_48 = ffi.Void Function(
+typedef _typedefC_36 = ffi.Void Function(
   ffi.Pointer<sqlite3_context>,
   ffi.Int32,
   ffi.Pointer<ffi.Pointer<sqlite3_value>>,
 );
 
-typedef _typedefC_49 = ffi.Void Function(
+typedef _typedefC_37 = ffi.Void Function(
   ffi.Pointer<sqlite3_context>,
 );
 
@@ -12026,9 +12026,9 @@
   ffi.Int32 nArg,
   ffi.Int32 eTextRep,
   ffi.Pointer<ffi.Void> pApp,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_47>> xFunc,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_48>> xStep,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_49>> xFinal,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_35>> xFunc,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_36>> xStep,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_37>> xFinal,
 );
 
 typedef _dart_sqlite3_create_function16 = int Function(
@@ -12037,28 +12037,28 @@
   int nArg,
   int eTextRep,
   ffi.Pointer<ffi.Void> pApp,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_47>> xFunc,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_48>> xStep,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_49>> xFinal,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_35>> xFunc,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_36>> xStep,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_37>> xFinal,
 );
 
-typedef _typedefC_50 = ffi.Void Function(
+typedef _typedefC_38 = ffi.Void Function(
   ffi.Pointer<sqlite3_context>,
   ffi.Int32,
   ffi.Pointer<ffi.Pointer<sqlite3_value>>,
 );
 
-typedef _typedefC_51 = ffi.Void Function(
+typedef _typedefC_39 = ffi.Void Function(
   ffi.Pointer<sqlite3_context>,
   ffi.Int32,
   ffi.Pointer<ffi.Pointer<sqlite3_value>>,
 );
 
-typedef _typedefC_52 = ffi.Void Function(
+typedef _typedefC_40 = ffi.Void Function(
   ffi.Pointer<sqlite3_context>,
 );
 
-typedef _typedefC_53 = ffi.Void Function(
+typedef _typedefC_41 = ffi.Void Function(
   ffi.Pointer<ffi.Void>,
 );
 
@@ -12068,10 +12068,10 @@
   ffi.Int32 nArg,
   ffi.Int32 eTextRep,
   ffi.Pointer<ffi.Void> pApp,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_50>> xFunc,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_51>> xStep,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_52>> xFinal,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_53>> xDestroy,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_38>> xFunc,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_39>> xStep,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_40>> xFinal,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_41>> xDestroy,
 );
 
 typedef _dart_sqlite3_create_function_v2 = int Function(
@@ -12080,33 +12080,33 @@
   int nArg,
   int eTextRep,
   ffi.Pointer<ffi.Void> pApp,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_50>> xFunc,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_51>> xStep,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_52>> xFinal,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_53>> xDestroy,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_38>> xFunc,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_39>> xStep,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_40>> xFinal,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_41>> xDestroy,
 );
 
-typedef _typedefC_54 = ffi.Void Function(
+typedef _typedefC_42 = ffi.Void Function(
   ffi.Pointer<sqlite3_context>,
   ffi.Int32,
   ffi.Pointer<ffi.Pointer<sqlite3_value>>,
 );
 
-typedef _typedefC_55 = ffi.Void Function(
+typedef _typedefC_43 = ffi.Void Function(
   ffi.Pointer<sqlite3_context>,
 );
 
-typedef _typedefC_56 = ffi.Void Function(
+typedef _typedefC_44 = ffi.Void Function(
   ffi.Pointer<sqlite3_context>,
 );
 
-typedef _typedefC_57 = ffi.Void Function(
+typedef _typedefC_45 = ffi.Void Function(
   ffi.Pointer<sqlite3_context>,
   ffi.Int32,
   ffi.Pointer<ffi.Pointer<sqlite3_value>>,
 );
 
-typedef _typedefC_58 = ffi.Void Function(
+typedef _typedefC_46 = ffi.Void Function(
   ffi.Pointer<ffi.Void>,
 );
 
@@ -12116,11 +12116,11 @@
   ffi.Int32 nArg,
   ffi.Int32 eTextRep,
   ffi.Pointer<ffi.Void> pApp,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_54>> xStep,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_55>> xFinal,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_56>> xValue,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_57>> xInverse,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_58>> xDestroy,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_42>> xStep,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_43>> xFinal,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_44>> xValue,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_45>> xInverse,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_46>> xDestroy,
 );
 
 typedef _dart_sqlite3_create_window_function = int Function(
@@ -12129,11 +12129,11 @@
   int nArg,
   int eTextRep,
   ffi.Pointer<ffi.Void> pApp,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_54>> xStep,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_55>> xFinal,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_56>> xValue,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_57>> xInverse,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_58>> xDestroy,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_42>> xStep,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_43>> xFinal,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_44>> xValue,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_45>> xInverse,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_46>> xDestroy,
 );
 
 typedef _c_sqlite3_aggregate_count = ffi.Int32 Function(
@@ -12170,20 +12170,20 @@
 
 typedef _dart_sqlite3_thread_cleanup = void Function();
 
-typedef _typedefC_59 = ffi.Void Function(
+typedef _typedefC_47 = ffi.Void Function(
   ffi.Pointer<ffi.Void>,
   ffi.Int64,
   ffi.Int32,
 );
 
 typedef _c_sqlite3_memory_alarm = ffi.Int32 Function(
-  ffi.Pointer<ffi.NativeFunction<_typedefC_59>> arg0,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_47>> arg0,
   ffi.Pointer<ffi.Void> arg1,
   ffi.Int64 arg2,
 );
 
 typedef _dart_sqlite3_memory_alarm = int Function(
-  ffi.Pointer<ffi.NativeFunction<_typedefC_59>> arg0,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_47>> arg0,
   ffi.Pointer<ffi.Void> arg1,
   int arg2,
 );
@@ -12370,7 +12370,7 @@
   int N,
 );
 
-typedef _typedefC_60 = ffi.Void Function(
+typedef _typedefC_48 = ffi.Void Function(
   ffi.Pointer<ffi.Void>,
 );
 
@@ -12378,17 +12378,17 @@
   ffi.Pointer<sqlite3_context> arg0,
   ffi.Int32 N,
   ffi.Pointer<ffi.Void> arg2,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_60>> arg3,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_48>> arg3,
 );
 
 typedef _dart_sqlite3_set_auxdata = void Function(
   ffi.Pointer<sqlite3_context> arg0,
   int N,
   ffi.Pointer<ffi.Void> arg2,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_60>> arg3,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_48>> arg3,
 );
 
-typedef _typedefC_61 = ffi.Void Function(
+typedef _typedefC_49 = ffi.Void Function(
   ffi.Pointer<ffi.Void>,
 );
 
@@ -12396,17 +12396,17 @@
   ffi.Pointer<sqlite3_context> arg0,
   ffi.Pointer<ffi.Void> arg1,
   ffi.Int32 arg2,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_61>> arg3,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_49>> arg3,
 );
 
 typedef _dart_sqlite3_result_blob = void Function(
   ffi.Pointer<sqlite3_context> arg0,
   ffi.Pointer<ffi.Void> arg1,
   int arg2,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_61>> arg3,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_49>> arg3,
 );
 
-typedef _typedefC_62 = ffi.Void Function(
+typedef _typedefC_50 = ffi.Void Function(
   ffi.Pointer<ffi.Void>,
 );
 
@@ -12414,14 +12414,14 @@
   ffi.Pointer<sqlite3_context> arg0,
   ffi.Pointer<ffi.Void> arg1,
   ffi.Uint64 arg2,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_62>> arg3,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_50>> arg3,
 );
 
 typedef _dart_sqlite3_result_blob64 = void Function(
   ffi.Pointer<sqlite3_context> arg0,
   ffi.Pointer<ffi.Void> arg1,
   int arg2,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_62>> arg3,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_50>> arg3,
 );
 
 typedef _c_sqlite3_result_double = ffi.Void Function(
@@ -12512,7 +12512,7 @@
   ffi.Pointer<sqlite3_context> arg0,
 );
 
-typedef _typedefC_63 = ffi.Void Function(
+typedef _typedefC_51 = ffi.Void Function(
   ffi.Pointer<ffi.Void>,
 );
 
@@ -12520,17 +12520,17 @@
   ffi.Pointer<sqlite3_context> arg0,
   ffi.Pointer<ffi.Int8> arg1,
   ffi.Int32 arg2,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_63>> arg3,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_51>> arg3,
 );
 
 typedef _dart_sqlite3_result_text = void Function(
   ffi.Pointer<sqlite3_context> arg0,
   ffi.Pointer<ffi.Int8> arg1,
   int arg2,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_63>> arg3,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_51>> arg3,
 );
 
-typedef _typedefC_64 = ffi.Void Function(
+typedef _typedefC_52 = ffi.Void Function(
   ffi.Pointer<ffi.Void>,
 );
 
@@ -12538,7 +12538,7 @@
   ffi.Pointer<sqlite3_context> arg0,
   ffi.Pointer<ffi.Int8> arg1,
   ffi.Uint64 arg2,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_64>> arg3,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_52>> arg3,
   ffi.Uint8 encoding,
 );
 
@@ -12546,11 +12546,11 @@
   ffi.Pointer<sqlite3_context> arg0,
   ffi.Pointer<ffi.Int8> arg1,
   int arg2,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_64>> arg3,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_52>> arg3,
   int encoding,
 );
 
-typedef _typedefC_65 = ffi.Void Function(
+typedef _typedefC_53 = ffi.Void Function(
   ffi.Pointer<ffi.Void>,
 );
 
@@ -12558,17 +12558,17 @@
   ffi.Pointer<sqlite3_context> arg0,
   ffi.Pointer<ffi.Void> arg1,
   ffi.Int32 arg2,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_65>> arg3,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_53>> arg3,
 );
 
 typedef _dart_sqlite3_result_text16 = void Function(
   ffi.Pointer<sqlite3_context> arg0,
   ffi.Pointer<ffi.Void> arg1,
   int arg2,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_65>> arg3,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_53>> arg3,
 );
 
-typedef _typedefC_66 = ffi.Void Function(
+typedef _typedefC_54 = ffi.Void Function(
   ffi.Pointer<ffi.Void>,
 );
 
@@ -12576,17 +12576,17 @@
   ffi.Pointer<sqlite3_context> arg0,
   ffi.Pointer<ffi.Void> arg1,
   ffi.Int32 arg2,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_66>> arg3,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_54>> arg3,
 );
 
 typedef _dart_sqlite3_result_text16le = void Function(
   ffi.Pointer<sqlite3_context> arg0,
   ffi.Pointer<ffi.Void> arg1,
   int arg2,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_66>> arg3,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_54>> arg3,
 );
 
-typedef _typedefC_67 = ffi.Void Function(
+typedef _typedefC_55 = ffi.Void Function(
   ffi.Pointer<ffi.Void>,
 );
 
@@ -12594,14 +12594,14 @@
   ffi.Pointer<sqlite3_context> arg0,
   ffi.Pointer<ffi.Void> arg1,
   ffi.Int32 arg2,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_67>> arg3,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_55>> arg3,
 );
 
 typedef _dart_sqlite3_result_text16be = void Function(
   ffi.Pointer<sqlite3_context> arg0,
   ffi.Pointer<ffi.Void> arg1,
   int arg2,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_67>> arg3,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_55>> arg3,
 );
 
 typedef _c_sqlite3_result_value = ffi.Void Function(
@@ -12614,7 +12614,7 @@
   ffi.Pointer<sqlite3_value> arg1,
 );
 
-typedef _typedefC_68 = ffi.Void Function(
+typedef _typedefC_56 = ffi.Void Function(
   ffi.Pointer<ffi.Void>,
 );
 
@@ -12622,14 +12622,14 @@
   ffi.Pointer<sqlite3_context> arg0,
   ffi.Pointer<ffi.Void> arg1,
   ffi.Pointer<ffi.Int8> arg2,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_68>> arg3,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_56>> arg3,
 );
 
 typedef _dart_sqlite3_result_pointer = void Function(
   ffi.Pointer<sqlite3_context> arg0,
   ffi.Pointer<ffi.Void> arg1,
   ffi.Pointer<ffi.Int8> arg2,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_68>> arg3,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_56>> arg3,
 );
 
 typedef _c_sqlite3_result_zeroblob = ffi.Void Function(
@@ -12662,7 +12662,7 @@
   int arg1,
 );
 
-typedef _typedefC_69 = ffi.Int32 Function(
+typedef _typedefC_57 = ffi.Int32 Function(
   ffi.Pointer<ffi.Void>,
   ffi.Int32,
   ffi.Pointer<ffi.Void>,
@@ -12675,7 +12675,7 @@
   ffi.Pointer<ffi.Int8> zName,
   ffi.Int32 eTextRep,
   ffi.Pointer<ffi.Void> pArg,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_69>> xCompare,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_57>> xCompare,
 );
 
 typedef _dart_sqlite3_create_collation = int Function(
@@ -12683,10 +12683,10 @@
   ffi.Pointer<ffi.Int8> zName,
   int eTextRep,
   ffi.Pointer<ffi.Void> pArg,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_69>> xCompare,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_57>> xCompare,
 );
 
-typedef _typedefC_70 = ffi.Int32 Function(
+typedef _typedefC_58 = ffi.Int32 Function(
   ffi.Pointer<ffi.Void>,
   ffi.Int32,
   ffi.Pointer<ffi.Void>,
@@ -12694,7 +12694,7 @@
   ffi.Pointer<ffi.Void>,
 );
 
-typedef _typedefC_71 = ffi.Void Function(
+typedef _typedefC_59 = ffi.Void Function(
   ffi.Pointer<ffi.Void>,
 );
 
@@ -12703,8 +12703,8 @@
   ffi.Pointer<ffi.Int8> zName,
   ffi.Int32 eTextRep,
   ffi.Pointer<ffi.Void> pArg,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_70>> xCompare,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_71>> xDestroy,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_58>> xCompare,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_59>> xDestroy,
 );
 
 typedef _dart_sqlite3_create_collation_v2 = int Function(
@@ -12712,11 +12712,11 @@
   ffi.Pointer<ffi.Int8> zName,
   int eTextRep,
   ffi.Pointer<ffi.Void> pArg,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_70>> xCompare,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_71>> xDestroy,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_58>> xCompare,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_59>> xDestroy,
 );
 
-typedef _typedefC_72 = ffi.Int32 Function(
+typedef _typedefC_60 = ffi.Int32 Function(
   ffi.Pointer<ffi.Void>,
   ffi.Int32,
   ffi.Pointer<ffi.Void>,
@@ -12729,7 +12729,7 @@
   ffi.Pointer<ffi.Void> zName,
   ffi.Int32 eTextRep,
   ffi.Pointer<ffi.Void> pArg,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_72>> xCompare,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_60>> xCompare,
 );
 
 typedef _dart_sqlite3_create_collation16 = int Function(
@@ -12737,10 +12737,10 @@
   ffi.Pointer<ffi.Void> zName,
   int eTextRep,
   ffi.Pointer<ffi.Void> pArg,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_72>> xCompare,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_60>> xCompare,
 );
 
-typedef _typedefC_73 = ffi.Void Function(
+typedef _typedefC_61 = ffi.Void Function(
   ffi.Pointer<ffi.Void>,
   ffi.Pointer<sqlite3>,
   ffi.Int32,
@@ -12750,16 +12750,16 @@
 typedef _c_sqlite3_collation_needed = ffi.Int32 Function(
   ffi.Pointer<sqlite3> arg0,
   ffi.Pointer<ffi.Void> arg1,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_73>> arg2,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_61>> arg2,
 );
 
 typedef _dart_sqlite3_collation_needed = int Function(
   ffi.Pointer<sqlite3> arg0,
   ffi.Pointer<ffi.Void> arg1,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_73>> arg2,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_61>> arg2,
 );
 
-typedef _typedefC_74 = ffi.Void Function(
+typedef _typedefC_62 = ffi.Void Function(
   ffi.Pointer<ffi.Void>,
   ffi.Pointer<sqlite3>,
   ffi.Int32,
@@ -12769,13 +12769,13 @@
 typedef _c_sqlite3_collation_needed16 = ffi.Int32 Function(
   ffi.Pointer<sqlite3> arg0,
   ffi.Pointer<ffi.Void> arg1,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_74>> arg2,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_62>> arg2,
 );
 
 typedef _dart_sqlite3_collation_needed16 = int Function(
   ffi.Pointer<sqlite3> arg0,
   ffi.Pointer<ffi.Void> arg1,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_74>> arg2,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_62>> arg2,
 );
 
 typedef _c_sqlite3_sleep = ffi.Int32 Function(
@@ -12862,39 +12862,39 @@
   ffi.Pointer<sqlite3_stmt> pStmt,
 );
 
-typedef _typedefC_75 = ffi.Int32 Function(
+typedef _typedefC_63 = ffi.Int32 Function(
   ffi.Pointer<ffi.Void>,
 );
 
 typedef _c_sqlite3_commit_hook = ffi.Pointer<ffi.Void> Function(
   ffi.Pointer<sqlite3> arg0,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_75>> arg1,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_63>> arg1,
   ffi.Pointer<ffi.Void> arg2,
 );
 
 typedef _dart_sqlite3_commit_hook = ffi.Pointer<ffi.Void> Function(
   ffi.Pointer<sqlite3> arg0,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_75>> arg1,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_63>> arg1,
   ffi.Pointer<ffi.Void> arg2,
 );
 
-typedef _typedefC_76 = ffi.Void Function(
+typedef _typedefC_64 = ffi.Void Function(
   ffi.Pointer<ffi.Void>,
 );
 
 typedef _c_sqlite3_rollback_hook = ffi.Pointer<ffi.Void> Function(
   ffi.Pointer<sqlite3> arg0,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_76>> arg1,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_64>> arg1,
   ffi.Pointer<ffi.Void> arg2,
 );
 
 typedef _dart_sqlite3_rollback_hook = ffi.Pointer<ffi.Void> Function(
   ffi.Pointer<sqlite3> arg0,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_76>> arg1,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_64>> arg1,
   ffi.Pointer<ffi.Void> arg2,
 );
 
-typedef _typedefC_77 = ffi.Void Function(
+typedef _typedefC_65 = ffi.Void Function(
   ffi.Pointer<ffi.Void>,
   ffi.Int32,
   ffi.Pointer<ffi.Int8>,
@@ -12904,13 +12904,13 @@
 
 typedef _c_sqlite3_update_hook = ffi.Pointer<ffi.Void> Function(
   ffi.Pointer<sqlite3> arg0,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_77>> arg1,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_65>> arg1,
   ffi.Pointer<ffi.Void> arg2,
 );
 
 typedef _dart_sqlite3_update_hook = ffi.Pointer<ffi.Void> Function(
   ffi.Pointer<sqlite3> arg0,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_77>> arg1,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_65>> arg1,
   ffi.Pointer<ffi.Void> arg2,
 );
 
@@ -13010,24 +13010,24 @@
   int onoff,
 );
 
-typedef _typedefC_78 = ffi.Void Function();
+typedef _typedefC_66 = ffi.Void Function();
 
 typedef _c_sqlite3_auto_extension = ffi.Int32 Function(
-  ffi.Pointer<ffi.NativeFunction<_typedefC_78>> xEntryPoint,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_66>> xEntryPoint,
 );
 
 typedef _dart_sqlite3_auto_extension = int Function(
-  ffi.Pointer<ffi.NativeFunction<_typedefC_78>> xEntryPoint,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_66>> xEntryPoint,
 );
 
-typedef _typedefC_79 = ffi.Void Function();
+typedef _typedefC_67 = ffi.Void Function();
 
 typedef _c_sqlite3_cancel_auto_extension = ffi.Int32 Function(
-  ffi.Pointer<ffi.NativeFunction<_typedefC_79>> xEntryPoint,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_67>> xEntryPoint,
 );
 
 typedef _dart_sqlite3_cancel_auto_extension = int Function(
-  ffi.Pointer<ffi.NativeFunction<_typedefC_79>> xEntryPoint,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_67>> xEntryPoint,
 );
 
 typedef _c_sqlite3_reset_auto_extension = ffi.Void Function();
@@ -13048,7 +13048,7 @@
   ffi.Pointer<ffi.Void> pClientData,
 );
 
-typedef _typedefC_80 = ffi.Void Function(
+typedef _typedefC_68 = ffi.Void Function(
   ffi.Pointer<ffi.Void>,
 );
 
@@ -13057,7 +13057,7 @@
   ffi.Pointer<ffi.Int8> zName,
   ffi.Pointer<sqlite3_module> p,
   ffi.Pointer<ffi.Void> pClientData,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_80>> xDestroy,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_68>> xDestroy,
 );
 
 typedef _dart_sqlite3_create_module_v2 = int Function(
@@ -13065,7 +13065,7 @@
   ffi.Pointer<ffi.Int8> zName,
   ffi.Pointer<sqlite3_module> p,
   ffi.Pointer<ffi.Void> pClientData,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_80>> xDestroy,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_68>> xDestroy,
 );
 
 typedef _c_sqlite3_drop_modules = ffi.Int32 Function(
@@ -13508,20 +13508,20 @@
   ffi.Pointer<sqlite3_backup> p,
 );
 
-typedef _typedefC_81 = ffi.Void Function(
+typedef _typedefC_69 = ffi.Void Function(
   ffi.Pointer<ffi.Pointer<ffi.Void>>,
   ffi.Int32,
 );
 
 typedef _c_sqlite3_unlock_notify = ffi.Int32 Function(
   ffi.Pointer<sqlite3> pBlocked,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_81>> xNotify,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_69>> xNotify,
   ffi.Pointer<ffi.Void> pNotifyArg,
 );
 
 typedef _dart_sqlite3_unlock_notify = int Function(
   ffi.Pointer<sqlite3> pBlocked,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_81>> xNotify,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_69>> xNotify,
   ffi.Pointer<ffi.Void> pNotifyArg,
 );
 
@@ -13579,7 +13579,7 @@
   ffi.Pointer<ffi.Int8> zFormat,
 );
 
-typedef _typedefC_82 = ffi.Int32 Function(
+typedef _typedefC_70 = ffi.Int32 Function(
   ffi.Pointer<ffi.Void>,
   ffi.Pointer<sqlite3>,
   ffi.Pointer<ffi.Int8>,
@@ -13588,13 +13588,13 @@
 
 typedef _c_sqlite3_wal_hook = ffi.Pointer<ffi.Void> Function(
   ffi.Pointer<sqlite3> arg0,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_82>> arg1,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_70>> arg1,
   ffi.Pointer<ffi.Void> arg2,
 );
 
 typedef _dart_sqlite3_wal_hook = ffi.Pointer<ffi.Void> Function(
   ffi.Pointer<sqlite3> arg0,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_82>> arg1,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_70>> arg1,
   ffi.Pointer<ffi.Void> arg2,
 );
 
@@ -13792,7 +13792,7 @@
   int mFlags,
 );
 
-typedef _typedefC_83 = ffi.Int32 Function(
+typedef _typedefC_71 = ffi.Int32 Function(
   ffi.Pointer<sqlite3_rtree_geometry>,
   ffi.Int32,
   ffi.Pointer<ffi.Double>,
@@ -13802,104 +13802,104 @@
 typedef _c_sqlite3_rtree_geometry_callback = ffi.Int32 Function(
   ffi.Pointer<sqlite3> db,
   ffi.Pointer<ffi.Int8> zGeom,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_83>> xGeom,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_71>> xGeom,
   ffi.Pointer<ffi.Void> pContext,
 );
 
 typedef _dart_sqlite3_rtree_geometry_callback = int Function(
   ffi.Pointer<sqlite3> db,
   ffi.Pointer<ffi.Int8> zGeom,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_83>> xGeom,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_71>> xGeom,
   ffi.Pointer<ffi.Void> pContext,
 );
 
-typedef _typedefC_84 = ffi.Int32 Function(
+typedef _typedefC_72 = ffi.Int32 Function(
   ffi.Pointer<sqlite3_rtree_query_info>,
 );
 
-typedef _typedefC_85 = ffi.Void Function(
+typedef _typedefC_73 = ffi.Void Function(
   ffi.Pointer<ffi.Void>,
 );
 
 typedef _c_sqlite3_rtree_query_callback = ffi.Int32 Function(
   ffi.Pointer<sqlite3> db,
   ffi.Pointer<ffi.Int8> zQueryFunc,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_84>> xQueryFunc,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_72>> xQueryFunc,
   ffi.Pointer<ffi.Void> pContext,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_85>> xDestructor,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_73>> xDestructor,
 );
 
 typedef _dart_sqlite3_rtree_query_callback = int Function(
   ffi.Pointer<sqlite3> db,
   ffi.Pointer<ffi.Int8> zQueryFunc,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_84>> xQueryFunc,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_72>> xQueryFunc,
   ffi.Pointer<ffi.Void> pContext,
-  ffi.Pointer<ffi.NativeFunction<_typedefC_85>> xDestructor,
+  ffi.Pointer<ffi.NativeFunction<_typedefC_73>> xDestructor,
 );
 
-typedef _typedefC_14 = ffi.Int32 Function(
+typedef _typedefC_2 = ffi.Int32 Function(
   ffi.Pointer<sqlite3_file>,
 );
 
-typedef _typedefC_15 = ffi.Int32 Function(
+typedef _typedefC_3 = ffi.Int32 Function(
   ffi.Pointer<sqlite3_file>,
   ffi.Pointer<ffi.Void>,
   ffi.Int32,
   ffi.Int64,
 );
 
-typedef _typedefC_16 = ffi.Int32 Function(
+typedef _typedefC_4 = ffi.Int32 Function(
   ffi.Pointer<sqlite3_file>,
   ffi.Pointer<ffi.Void>,
   ffi.Int32,
   ffi.Int64,
 );
 
-typedef _typedefC_17 = ffi.Int32 Function(
+typedef _typedefC_5 = ffi.Int32 Function(
   ffi.Pointer<sqlite3_file>,
   ffi.Int64,
 );
 
-typedef _typedefC_18 = ffi.Int32 Function(
+typedef _typedefC_6 = ffi.Int32 Function(
   ffi.Pointer<sqlite3_file>,
   ffi.Int32,
 );
 
-typedef _typedefC_19 = ffi.Int32 Function(
+typedef _typedefC_7 = ffi.Int32 Function(
   ffi.Pointer<sqlite3_file>,
   ffi.Pointer<ffi.Int64>,
 );
 
-typedef _typedefC_20 = ffi.Int32 Function(
+typedef _typedefC_8 = ffi.Int32 Function(
   ffi.Pointer<sqlite3_file>,
   ffi.Int32,
 );
 
-typedef _typedefC_21 = ffi.Int32 Function(
+typedef _typedefC_9 = ffi.Int32 Function(
   ffi.Pointer<sqlite3_file>,
   ffi.Int32,
 );
 
-typedef _typedefC_22 = ffi.Int32 Function(
+typedef _typedefC_10 = ffi.Int32 Function(
   ffi.Pointer<sqlite3_file>,
   ffi.Pointer<ffi.Int32>,
 );
 
-typedef _typedefC_23 = ffi.Int32 Function(
+typedef _typedefC_11 = ffi.Int32 Function(
   ffi.Pointer<sqlite3_file>,
   ffi.Int32,
   ffi.Pointer<ffi.Void>,
 );
 
-typedef _typedefC_24 = ffi.Int32 Function(
+typedef _typedefC_12 = ffi.Int32 Function(
   ffi.Pointer<sqlite3_file>,
 );
 
-typedef _typedefC_25 = ffi.Int32 Function(
+typedef _typedefC_13 = ffi.Int32 Function(
   ffi.Pointer<sqlite3_file>,
 );
 
-typedef _typedefC_26 = ffi.Int32 Function(
+typedef _typedefC_14 = ffi.Int32 Function(
   ffi.Pointer<sqlite3_file>,
   ffi.Int32,
   ffi.Int32,
@@ -13907,30 +13907,30 @@
   ffi.Pointer<ffi.Pointer<ffi.Void>>,
 );
 
-typedef _typedefC_27 = ffi.Int32 Function(
+typedef _typedefC_15 = ffi.Int32 Function(
   ffi.Pointer<sqlite3_file>,
   ffi.Int32,
   ffi.Int32,
   ffi.Int32,
 );
 
-typedef _typedefC_28 = ffi.Void Function(
+typedef _typedefC_16 = ffi.Void Function(
   ffi.Pointer<sqlite3_file>,
 );
 
-typedef _typedefC_29 = ffi.Int32 Function(
+typedef _typedefC_17 = ffi.Int32 Function(
   ffi.Pointer<sqlite3_file>,
   ffi.Int32,
 );
 
-typedef _typedefC_30 = ffi.Int32 Function(
+typedef _typedefC_18 = ffi.Int32 Function(
   ffi.Pointer<sqlite3_file>,
   ffi.Int64,
   ffi.Int32,
   ffi.Pointer<ffi.Pointer<ffi.Void>>,
 );
 
-typedef _typedefC_31 = ffi.Int32 Function(
+typedef _typedefC_19 = ffi.Int32 Function(
   ffi.Pointer<sqlite3_file>,
   ffi.Int64,
   ffi.Pointer<ffi.Void>,
diff --git a/test/large_integration_tests/large_test.dart b/test/large_integration_tests/large_test.dart
index b18f52b..2815a1f 100644
--- a/test/large_integration_tests/large_test.dart
+++ b/test/large_integration_tests/large_test.dart
@@ -89,10 +89,9 @@
     - '**sqlite3.h'
 ${strings.functions}:
   ${strings.exclude}:
-    ${strings.names}:
-      - sqlite3_vmprintf
-      - sqlite3_vsnprintf
-      - sqlite3_str_vappendf
+    - sqlite3_vmprintf
+    - sqlite3_vsnprintf
+    - sqlite3_str_vappendf
       ''') as YamlMap);
       final library = parse(config);
 
diff --git a/test/prefix_tests/prefix_test.dart b/test/prefix_tests/prefix_test.dart
deleted file mode 100644
index 55ebc8a..0000000
--- a/test/prefix_tests/prefix_test.dart
+++ /dev/null
@@ -1,173 +0,0 @@
-// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'package:ffigen/src/code_generator.dart';
-import 'package:ffigen/src/header_parser.dart' as parser;
-import 'package:ffigen/src/config_provider.dart';
-import 'package:test/test.dart';
-import 'package:yaml/yaml.dart' as yaml;
-import 'package:ffigen/src/strings.dart' as strings;
-
-import '../test_utils.dart';
-
-Library actual, expected;
-final functionPrefix = 'fff';
-final structPrefix = 'sss';
-final enumPrefix = 'eee';
-final macroPrefix = 'mmm';
-
-final functionPrefixReplacedWith = 'rf';
-final structPrefixReplacedWith = 'rs';
-final enumPrefixReplacedWith = 're';
-final macroPrefixReplacedWith = 'rm';
-
-void main() {
-  group('prefix_test', () {
-    setUpAll(() {
-      logWarnings();
-      expected = expectedLibrary();
-      actual = parser.parse(Config.fromYaml(yaml.loadYaml('''
-${strings.name}: 'NativeLibrary'
-${strings.description}: 'Prefix Test'
-${strings.output}: 'unused'
-
-${strings.headers}:
-  ${strings.entryPoints}:
-    - 'test/prefix_tests/prefix.h'
-
-functions:
-  ${strings.prefix}: $functionPrefix
-  ${strings.prefix_replacement}:
-    'test_': '$functionPrefixReplacedWith'
-
-structs:
-  ${strings.prefix}: $structPrefix
-  ${strings.prefix_replacement}:
-    'Test_': '$structPrefixReplacedWith'
-
-enums:
-  ${strings.prefix}: $enumPrefix
-  ${strings.prefix_replacement}:
-    'Test_': '$enumPrefixReplacedWith'
-
-macros:
-  ${strings.prefix}: $macroPrefix
-  ${strings.prefix_replacement}:
-    'Test_': '$macroPrefixReplacedWith'
-    ''') as yaml.YamlMap));
-    });
-
-    test('Function prefix', () {
-      expect(actual.getBindingAsString('${functionPrefix}func1'),
-          expected.getBindingAsString('${functionPrefix}func1'));
-    });
-    test('Struct prefix', () {
-      expect(actual.getBindingAsString('${structPrefix}Struct1'),
-          expected.getBindingAsString('${structPrefix}Struct1'));
-    });
-    test('Enum prefix', () {
-      expect(actual.getBindingAsString('${enumPrefix}Enum1'),
-          expected.getBindingAsString('${enumPrefix}Enum1'));
-    });
-    test('Macro prefix', () {
-      expect(actual.getBindingAsString('${macroPrefix}Macro1'),
-          expected.getBindingAsString('${macroPrefix}Macro1'));
-    });
-    test('Function prefix-replacement', () {
-      expect(
-          actual.getBindingAsString(
-              '${functionPrefix}${functionPrefixReplacedWith}func2'),
-          expected.getBindingAsString(
-              '${functionPrefix}${functionPrefixReplacedWith}func2'));
-    });
-    test('Struct prefix-replacement', () {
-      expect(
-          actual.getBindingAsString(
-              '${structPrefix}${structPrefixReplacedWith}Struct2'),
-          expected.getBindingAsString(
-              '${structPrefix}${structPrefixReplacedWith}Struct2'));
-    });
-    test('Enum prefix-replacement', () {
-      expect(
-          actual.getBindingAsString(
-              '${enumPrefix}${enumPrefixReplacedWith}Enum2'),
-          expected.getBindingAsString(
-              '${enumPrefix}${enumPrefixReplacedWith}Enum2'));
-    });
-    test('Macro prefix-replacement', () {
-      expect(
-          actual.getBindingAsString(
-              '${macroPrefix}${macroPrefixReplacedWith}Macro2'),
-          expected.getBindingAsString(
-              '${macroPrefix}${macroPrefixReplacedWith}Macro2'));
-    });
-  });
-}
-
-Library expectedLibrary() {
-  final struc1 = Struc(name: '${structPrefix}Struct1');
-  final struc2 =
-      Struc(name: '${structPrefix}${structPrefixReplacedWith}Struct2');
-  return Library(
-    name: 'Bindings',
-    bindings: [
-      Func(
-        name: '${functionPrefix}func1',
-        originalName: 'func1',
-        returnType: Type.nativeType(
-          SupportedNativeType.Void,
-        ),
-        parameters: [
-          Parameter(
-            name: 's',
-            type: Type.pointer(Type.struct(struc1)),
-          ),
-        ],
-      ),
-      Func(
-        name: '${functionPrefix}${functionPrefixReplacedWith}func2',
-        originalName: 'test_func2',
-        returnType: Type.nativeType(
-          SupportedNativeType.Void,
-        ),
-        parameters: [
-          Parameter(
-            name: 's',
-            type: Type.pointer(Type.struct(struc2)),
-          ),
-        ],
-      ),
-      struc1,
-      struc2,
-      EnumClass(
-        name: '${enumPrefix}Enum1',
-        enumConstants: [
-          EnumConstant(name: 'a', value: 0),
-          EnumConstant(name: 'b', value: 1),
-          EnumConstant(name: 'c', value: 2),
-        ],
-      ),
-      EnumClass(
-        name: '${enumPrefix}${enumPrefixReplacedWith}Enum2',
-        enumConstants: [
-          EnumConstant(name: 'e', value: 0),
-          EnumConstant(name: 'f', value: 1),
-          EnumConstant(name: 'g', value: 2),
-        ],
-      ),
-      Constant(
-        originalName: 'Macro1',
-        name: '${macroPrefix}Macro1',
-        rawType: 'int',
-        rawValue: '1',
-      ),
-      Constant(
-        originalName: 'TestMacro2',
-        name: '${macroPrefix}${macroPrefixReplacedWith}Macro2',
-        rawType: 'int',
-        rawValue: '2',
-      ),
-    ],
-  );
-}
diff --git a/test/prefix_tests/prefix.h b/test/rename_tests/rename.h
similarity index 74%
rename from test/prefix_tests/prefix.h
rename to test/rename_tests/rename.h
index d63d92a..8ef04e8 100644
--- a/test/prefix_tests/prefix.h
+++ b/test/rename_tests/rename.h
@@ -4,6 +4,7 @@
 
 #define Macro1 1
 #define Test_Macro2 2
+#define FullMatchMacro3 3
 
 struct Struct1
 {
@@ -11,9 +12,13 @@
 struct Test_Struct2
 {
 };
+struct FullMatchStruct3
+{
+};
 
 void func1(struct Struct1 *s);
 void test_func2(struct Test_Struct2 *s);
+void fullMatch_func3(struct FullMatchStruct3 *s);
 
 enum Enum1
 {
@@ -27,3 +32,9 @@
     f = 1,
     g = 2
 };
+enum FullMatchEnum3
+{
+    i = 0,
+    j = 1,
+    k = 2
+};
diff --git a/test/rename_tests/rename_test.dart b/test/rename_tests/rename_test.dart
new file mode 100644
index 0000000..3461cb6
--- /dev/null
+++ b/test/rename_tests/rename_test.dart
@@ -0,0 +1,203 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:ffigen/src/code_generator.dart';
+import 'package:ffigen/src/header_parser.dart' as parser;
+import 'package:ffigen/src/config_provider.dart';
+import 'package:test/test.dart';
+import 'package:yaml/yaml.dart' as yaml;
+import 'package:ffigen/src/strings.dart' as strings;
+
+import '../test_utils.dart';
+
+Library actual, expected;
+final functionPrefix = 'fff';
+final structPrefix = 'sss';
+final enumPrefix = 'eee';
+final macroPrefix = 'mmm';
+
+void main() {
+  group('rename_test', () {
+    setUpAll(() {
+      logWarnings();
+      expected = expectedLibrary();
+      actual = parser.parse(Config.fromYaml(yaml.loadYaml('''
+${strings.name}: 'NativeLibrary'
+${strings.description}: 'Rename Test'
+${strings.output}: 'unused'
+
+${strings.headers}:
+  ${strings.entryPoints}:
+    - 'test/rename_tests/rename.h'
+
+functions:
+  ${strings.rename}:
+    'test_(.*)': '\$1'
+    '.*': '$functionPrefix\$0'
+    'fullMatch_func3': 'func3'
+
+
+structs:
+  ${strings.rename}:
+    'Test_(.*)': '\$1'
+    '.*': '$structPrefix\$0'
+    'FullMatchStruct3': 'Struct3'
+
+enums:
+  ${strings.rename}:
+    'Test_(.*)': '\$1'
+    '.*': '$enumPrefix\$0'
+    'FullMatchEnum3': 'Enum3'
+
+macros:
+  ${strings.rename}:
+    'Test_(.*)': '\$1'
+    '.*': '$macroPrefix\$0'
+    'FullMatchMacro3': 'Macro3'
+
+    ''') as yaml.YamlMap));
+    });
+
+    test('Function addPrefix', () {
+      expect(actual.getBindingAsString('${functionPrefix}func1'),
+          expected.getBindingAsString('${functionPrefix}func1'));
+    });
+    test('Struct addPrefix', () {
+      expect(actual.getBindingAsString('${structPrefix}Struct1'),
+          expected.getBindingAsString('${structPrefix}Struct1'));
+    });
+    test('Enum addPrefix', () {
+      expect(actual.getBindingAsString('${enumPrefix}Enum1'),
+          expected.getBindingAsString('${enumPrefix}Enum1'));
+    });
+    test('Macro addPrefix', () {
+      expect(actual.getBindingAsString('${macroPrefix}Macro1'),
+          expected.getBindingAsString('${macroPrefix}Macro1'));
+    });
+    test('Function rename with pattern', () {
+      expect(actual.getBindingAsString('func2'),
+          expected.getBindingAsString('func2'));
+    });
+    test('Struct rename with pattern', () {
+      expect(actual.getBindingAsString('Struct2'),
+          expected.getBindingAsString('Struct2'));
+    });
+    test('Enum rename with pattern', () {
+      expect(actual.getBindingAsString('Enum2'),
+          expected.getBindingAsString('Enum2'));
+    });
+    test('Macro rename with pattern', () {
+      expect(actual.getBindingAsString('Macro2'),
+          expected.getBindingAsString('Macro2'));
+    });
+    test('Function full match rename', () {
+      expect(actual.getBindingAsString('func3'),
+          expected.getBindingAsString('func3'));
+    });
+    test('Struct full match rename', () {
+      expect(actual.getBindingAsString('Struct3'),
+          expected.getBindingAsString('Struct3'));
+    });
+    test('Enum full match rename', () {
+      expect(actual.getBindingAsString('Enum3'),
+          expected.getBindingAsString('Enum3'));
+    });
+    test('Macro full match rename', () {
+      expect(actual.getBindingAsString('Macro3'),
+          expected.getBindingAsString('Macro3'));
+    });
+  });
+}
+
+Library expectedLibrary() {
+  final struc1 = Struc(name: '${structPrefix}Struct1');
+  final struc2 = Struc(name: 'Struct2');
+  final struc3 = Struc(name: 'Struct3');
+  return Library(
+    name: 'Bindings',
+    bindings: [
+      Func(
+        name: '${functionPrefix}func1',
+        originalName: 'func1',
+        returnType: Type.nativeType(
+          SupportedNativeType.Void,
+        ),
+        parameters: [
+          Parameter(
+            name: 's',
+            type: Type.pointer(Type.struct(struc1)),
+          ),
+        ],
+      ),
+      Func(
+        name: 'func2',
+        originalName: 'test_func2',
+        returnType: Type.nativeType(
+          SupportedNativeType.Void,
+        ),
+        parameters: [
+          Parameter(
+            name: 's',
+            type: Type.pointer(Type.struct(struc2)),
+          ),
+        ],
+      ),
+      Func(
+        name: 'func3',
+        originalName: 'fullMatch_func3',
+        returnType: Type.nativeType(
+          SupportedNativeType.Void,
+        ),
+        parameters: [
+          Parameter(
+            name: 's',
+            type: Type.pointer(Type.struct(struc3)),
+          ),
+        ],
+      ),
+      struc1,
+      struc2,
+      struc3,
+      EnumClass(
+        name: '${enumPrefix}Enum1',
+        enumConstants: [
+          EnumConstant(name: 'a', value: 0),
+          EnumConstant(name: 'b', value: 1),
+          EnumConstant(name: 'c', value: 2),
+        ],
+      ),
+      EnumClass(
+        name: 'Enum2',
+        enumConstants: [
+          EnumConstant(name: 'e', value: 0),
+          EnumConstant(name: 'f', value: 1),
+          EnumConstant(name: 'g', value: 2),
+        ],
+      ),
+      EnumClass(
+        name: 'Enum3',
+        enumConstants: [
+          EnumConstant(name: 'i', value: 0),
+          EnumConstant(name: 'j', value: 1),
+          EnumConstant(name: 'k', value: 2),
+        ],
+      ),
+      Constant(
+        name: '${macroPrefix}Macro1',
+        rawType: 'int',
+        rawValue: '1',
+      ),
+      Constant(
+        name: 'Macro2',
+        rawType: 'int',
+        rawValue: '2',
+      ),
+      Constant(
+        name: 'Macro3',
+        rawType: 'int',
+        rawValue: '3',
+      ),
+    ],
+  );
+}
diff --git a/tool/libclang_config.yaml b/tool/libclang_config.yaml
index 8526317..a6db376 100644
--- a/tool/libclang_config.yaml
+++ b/tool/libclang_config.yaml
@@ -26,74 +26,71 @@
 
 enums:
   include:
-    names:
-      - CXChildVisitResult
-      - CXCursorKind
-      - CXTypeKind
-      - CXDiagnosticDisplayOptions
-      - CXTranslationUnit_Flags
-      - CXEvalResultKind
+    - CXChildVisitResult
+    - CXCursorKind
+    - CXTypeKind
+    - CXDiagnosticDisplayOptions
+    - CXTranslationUnit_Flags
+    - CXEvalResultKind
 
 structs:
   include:
-    names:
-      - CXCursor
-      - CXType
-      - CXSourceLocation
-      - CXString
-      - CXTranslationUnitImpl
-      - CXUnsavedFile
-      - CXSourceRange
+    - CXCursor
+    - CXType
+    - CXSourceLocation
+    - CXString
+    - CXTranslationUnitImpl
+    - CXUnsavedFile
+    - CXSourceRange
 
 functions:
   include:
-    names:
-      - clang_createIndex
-      - clang_disposeIndex
-      - clang_getNumDiagnostics
-      - clang_getDiagnostic
-      - clang_disposeDiagnostic
-      - clang_parseTranslationUnit
-      - clang_disposeTranslationUnit
-      - clang_EvalResult_getKind
-      - clang_EvalResult_getAsInt
-      - clang_EvalResult_getAsLongLong
-      - clang_EvalResult_getAsDouble
-      - clang_EvalResult_getAsStr
-      - clang_EvalResult_dispose
-      - clang_getCString_wrap
-      - clang_disposeString_wrap
-      - clang_getCursorKind_wrap
-      - clang_getCursorKindSpelling_wrap
-      - clang_getCursorType_wrap
-      - clang_getTypeSpelling_wrap
-      - clang_getTypeKindSpelling_wrap
-      - clang_getResultType_wrap
-      - clang_getPointeeType_wrap
-      - clang_getCanonicalType_wrap
-      - clang_Type_getNamedType_wrap
-      - clang_getTypeDeclaration_wrap
-      - clang_getTypedefDeclUnderlyingType_wrap
-      - clang_getCursorSpelling_wrap
-      - clang_getTranslationUnitCursor_wrap
-      - clang_formatDiagnostic_wrap
-      - clang_visitChildren_wrap
-      - clang_Cursor_getNumArguments_wrap
-      - clang_Cursor_getArgument_wrap
-      - clang_getNumArgTypes_wrap
-      - clang_getArgType_wrap
-      - clang_getEnumConstantDeclValue_wrap
-      - clang_equalRanges_wrap
-      - clang_Cursor_getCommentRange_wrap
-      - clang_Cursor_getRawCommentText_wrap
-      - clang_Cursor_getBriefCommentText_wrap
-      - clang_getCursorLocation_wrap
-      - clang_getFileLocation_wrap
-      - clang_getFileName_wrap
-      - clang_getNumElements_wrap
-      - clang_getArrayElementType_wrap
-      - clang_Cursor_isMacroFunctionLike_wrap
-      - clang_Cursor_isMacroBuiltin_wrap
-      - clang_Cursor_Evaluate_wrap
-      - clang_Cursor_isAnonymous_wrap
-      - clang_Cursor_isAnonymousRecordDecl_wrap
+    - clang_createIndex
+    - clang_disposeIndex
+    - clang_getNumDiagnostics
+    - clang_getDiagnostic
+    - clang_disposeDiagnostic
+    - clang_parseTranslationUnit
+    - clang_disposeTranslationUnit
+    - clang_EvalResult_getKind
+    - clang_EvalResult_getAsInt
+    - clang_EvalResult_getAsLongLong
+    - clang_EvalResult_getAsDouble
+    - clang_EvalResult_getAsStr
+    - clang_EvalResult_dispose
+    - clang_getCString_wrap
+    - clang_disposeString_wrap
+    - clang_getCursorKind_wrap
+    - clang_getCursorKindSpelling_wrap
+    - clang_getCursorType_wrap
+    - clang_getTypeSpelling_wrap
+    - clang_getTypeKindSpelling_wrap
+    - clang_getResultType_wrap
+    - clang_getPointeeType_wrap
+    - clang_getCanonicalType_wrap
+    - clang_Type_getNamedType_wrap
+    - clang_getTypeDeclaration_wrap
+    - clang_getTypedefDeclUnderlyingType_wrap
+    - clang_getCursorSpelling_wrap
+    - clang_getTranslationUnitCursor_wrap
+    - clang_formatDiagnostic_wrap
+    - clang_visitChildren_wrap
+    - clang_Cursor_getNumArguments_wrap
+    - clang_Cursor_getArgument_wrap
+    - clang_getNumArgTypes_wrap
+    - clang_getArgType_wrap
+    - clang_getEnumConstantDeclValue_wrap
+    - clang_equalRanges_wrap
+    - clang_Cursor_getCommentRange_wrap
+    - clang_Cursor_getRawCommentText_wrap
+    - clang_Cursor_getBriefCommentText_wrap
+    - clang_getCursorLocation_wrap
+    - clang_getFileLocation_wrap
+    - clang_getFileName_wrap
+    - clang_getNumElements_wrap
+    - clang_getArrayElementType_wrap
+    - clang_Cursor_isMacroFunctionLike_wrap
+    - clang_Cursor_isMacroBuiltin_wrap
+    - clang_Cursor_Evaluate_wrap
+    - clang_Cursor_isAnonymous_wrap
+    - clang_Cursor_isAnonymousRecordDecl_wrap
