Simpler include/exclude, regexp based renaming for declarations (#62)

* Removes names/matches from include/exclude. Updated examples. Removed typedef incremental renaming.

* restored incremental typedef naming using IncrementalNamer, (this improves UniqueNamer's performance because there are less clashes

* added declaration renaming

* minor changes

* updated readme, changelog

* readme fix

* added to changelog

* simplified declaration using includer and renamer

* Includer: replaced firstMatch and end comparision with quiver.matchesFull
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