Null safety migration (#122)

* Migrated code to pass the null safe syntax.
* Generating null safe code.
diff --git a/.github/workflows/test-package.yml b/.github/workflows/test-package.yml
index c4f98d2..1026834 100644
--- a/.github/workflows/test-package.yml
+++ b/.github/workflows/test-package.yml
@@ -20,7 +20,7 @@
     strategy:
       fail-fast: false
       matrix:
-        sdk: [stable]
+        sdk: [beta] # TODO(127):Revert to stable when null safety reaches stable branch.
     steps:
       - uses: actions/checkout@v2
       - uses: dart-lang/setup-dart@v0.1
@@ -33,30 +33,30 @@
         run: dart format --output=none --set-exit-if-changed .
         if: always() && steps.install.outcome == 'success'
       - name: Analyze code
-        run: dart analyze --fatal-infos
+        run: dart analyze # --fatal-infos # Removed till we stop using legacy libraries.
         if: always() && steps.install.outcome == 'success'
 
   test:
     needs: analyze
     # This job requires clang-10 which is the default on 20.04
-    runs-on: ubuntu-20.04 
+    runs-on: ubuntu-20.04
     steps:
       - uses: actions/checkout@v2
       - uses: dart-lang/setup-dart@v0.1
         with:
-          channel: stable
+          channel: beta # TODO(127):Revert to stable when null safety reaches stable branch.
       - name: Install dependencies
-        run: dart pub get  
+        run: dart pub get
       - name: Install libclang-10-dev
         run: sudo apt-get install libclang-10-dev
       - name: Setup ffigen
-        run: dart pub run ffigen:setup
+        run: dart --no-sound-null-safety run ffigen:setup
       - name: Build test dylib
         run: cd test/native_test && dart build_test_dylib.dart && cd ../..
       - name: Run VM tests
-        run: dart test --platform vm
+        run: dart --no-sound-null-safety test --platform vm
       - name: Collect coverage
-        run: ./tool/travis.sh
+        run: ./tool/coverage.sh
       - name: Upload coverage
         uses: coverallsapp/github-action@v1.1.2
         with:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a919a1a..2697d97 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,6 @@
+# 2.0.0-nullsafety.0
+- Migrated to (unsound) null safety.
+
 # 1.2.0
 - Added support for `Dart_Handle` from `dart_api.h`.
 
diff --git a/README.md b/README.md
index 625acd2..3b56033 100644
--- a/README.md
+++ b/README.md
@@ -5,6 +5,9 @@
 Experimental binding generator for [FFI](https://dart.dev/guides/libraries/c-interop)
 bindings.
 
+<!-- TODO: Remove this when package can run with sound null safety -->
+> Due to a few unmigrated dependencies, ffigen currently runs in unsound null safety, run using `dart --no-sound-null-safety run ffigen`.
+
 ## Example
 
 For some header file _example.h_:
@@ -27,19 +30,19 @@
   NativeLibrary(DynamicLibrary dynamicLibrary) : _dylib = dynamicLibrary;
 
   int sum(int a, int b) {
-    _sum ??= _dylib.lookupFunction<_c_sum, _dart_sum>('sum');
-    return _sum(a, b);
+    return (_sum ??= _dylib.lookupFunction<_c_sum, _dart_sum>('sum'))(a, b);
   }
-  _dart_sum _sum;;
+
+  _dart_sum? _sum;
 }
-typedef _c_sum = ffi.Int32 Function(Int32 a, Int32 b);
-typedef _dart_sum = int Function(int a,int b);
+typedef _c_sum = Int32 Function(Int32 a, Int32 b);
+typedef _dart_sum = int Function(int a, int b);
 ```
 ## Using this package
 - Add `ffigen` under `dev_dependencies` in your `pubspec.yaml`.
 - Setup for use (see [Setup](#Setup)).
 - Configurations must be provided in `pubspec.yaml` or in a custom YAML file (see [configurations](#configurations)).
-- Run the tool- `pub run ffigen`.
+- Run the tool- `dart run ffigen`.
 
 Jump to [FAQ](#faq).
 
@@ -312,11 +315,11 @@
 ```dart
 class CXFileUniqueID extends ffi.Struct {
   @ffi.Uint64()
-  int _unique_data_item_0;
+  external int _unique_data_item_0;
   @ffi.Uint64()
-  int _unique_data_item_1;
+  external int _unique_data_item_1;
   @ffi.Uint64()
-  int _unique_data_item_2;
+  external int _unique_data_item_2;
 
   /// Helper for array `data`.
   ArrayHelper_CXFileUniqueID_data_level0 get data =>
diff --git a/bin/ffigen.dart b/bin/ffigen.dart
index a49040d..82abac5 100644
--- a/bin/ffigen.dart
+++ b/bin/ffigen.dart
@@ -56,8 +56,8 @@
   // Generate file for the parsed bindings.
   final gen = File(config.output);
   library.generateFile(gen);
-  _logger.info(
-      successPen('Finished, Bindings generated in ${gen?.absolute?.path}'));
+  _logger
+      .info(successPen('Finished, Bindings generated in ${gen.absolute.path}'));
 }
 
 Config getConfig(ArgResults result) {
@@ -87,7 +87,7 @@
 
   // Throws a [YamlException] if it's unable to parse the Yaml.
   final bindingsConfigMap =
-      yaml.loadYaml(pubspecFile.readAsStringSync())[configKey] as yaml.YamlMap;
+      yaml.loadYaml(pubspecFile.readAsStringSync())[configKey] as yaml.YamlMap?;
 
   if (bindingsConfigMap == null) {
     _logger.severe("Couldn't find an entry for '$configKey' in $pubspecName.");
@@ -161,7 +161,7 @@
 /// Sets up the logging level and printing.
 void setupLogger(ArgResults result) {
   if (result.wasParsed('verbose')) {
-    switch (result['verbose'] as String) {
+    switch (result['verbose'] as String?) {
       case 'all':
         // Logs everything, the entire AST touched by our parser.
         Logger.root.level = Level.ALL;
diff --git a/bin/setup.dart b/bin/setup.dart
index 4c7517d..edc79e2 100644
--- a/bin/setup.dart
+++ b/bin/setup.dart
@@ -26,53 +26,46 @@
 
 import 'dart:io';
 import 'package:args/args.dart';
-import 'package:meta/meta.dart';
 import 'package:ffigen/src/find_resource.dart';
 import 'package:ffigen/src/strings.dart' as strings;
 import 'package:path/path.dart' as path;
 
-const _macOS = 'macos';
-const _windows = 'windows';
-const _linux = 'linux';
-
 /// Default platform options.
-Map<String, _Options> _platformOptions = {
-  _linux: _Options(
-    sharedFlag: '-shared',
-    inputHeader: _getWrapperPath('wrapper.c'),
-    fPIC: '-fpic',
-    ldLibFlag: '-lclang',
-    headerIncludes: [
-      '-I/usr/lib/llvm-9/include/',
-      '-I/usr/lib/llvm-10/include/',
-    ],
-  ),
-  _windows: _Options(
-    sharedFlag: '-shared',
-    inputHeader: _getWrapperPath('wrapper.c'),
-    moduleDefPath: '-Wl,/DEF:${_getWrapperPath("wrapper.def")}',
-    ldLibFlag: '-llibclang',
-    headerIncludes: [
-      r'-IC:\Progra~1\LLVM\include',
-    ],
-    libIncludes: [
-      r'-LC:\Progra~1\LLVM\lib',
-    ],
-  ),
-  _macOS: _Options(
-    sharedFlag: '-shared',
-    inputHeader: _getWrapperPath('wrapper.c'),
-    fPIC: '-fpic',
-    ldLibFlag: '-lclang',
-    headerIncludes: [
-      '-I/usr/local/opt/llvm/include/',
-      '-I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/',
-    ],
-    libIncludes: [
-      '-L/usr/local/opt/llvm/lib/',
-    ],
-  ),
-};
+final _linuxOpts = _Options(
+  sharedFlag: '-shared',
+  inputHeader: _getWrapperPath('wrapper.c'),
+  fPIC: '-fpic',
+  ldLibFlag: '-lclang',
+  headerIncludes: [
+    '-I/usr/lib/llvm-9/include/',
+    '-I/usr/lib/llvm-10/include/',
+  ],
+);
+final _windowsOpts = _Options(
+  sharedFlag: '-shared',
+  inputHeader: _getWrapperPath('wrapper.c'),
+  moduleDefPath: '-Wl,/DEF:${_getWrapperPath("wrapper.def")}',
+  ldLibFlag: '-llibclang',
+  headerIncludes: [
+    r'-IC:\Progra~1\LLVM\include',
+  ],
+  libIncludes: [
+    r'-LC:\Progra~1\LLVM\lib',
+  ],
+);
+final _macOSOpts = _Options(
+  sharedFlag: '-shared',
+  inputHeader: _getWrapperPath('wrapper.c'),
+  fPIC: '-fpic',
+  ldLibFlag: '-lclang',
+  headerIncludes: [
+    '-I/usr/local/opt/llvm/include/',
+    '-I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/',
+  ],
+  libIncludes: [
+    '-L/usr/local/opt/llvm/lib/',
+  ],
+);
 
 /// If main is called directly we always re-create the dynamic library.
 void main(List<String> arguments) {
@@ -140,7 +133,7 @@
 ///
 /// Throws error if not found.
 String _getWrapperPath(String wrapperName) {
-  final file = File.fromUri(findWrapper(wrapperName));
+  final file = File.fromUri(findWrapper(wrapperName)!);
   if (file.existsSync()) {
     return file.absolute.path;
   } else {
@@ -237,11 +230,11 @@
 /// Get options based on current platform.
 _Options _getPlatformOptions() {
   if (Platform.isMacOS) {
-    return _platformOptions[_macOS];
+    return _macOSOpts;
   } else if (Platform.isWindows) {
-    return _platformOptions[_windows];
+    return _windowsOpts;
   } else if (Platform.isLinux) {
-    return _platformOptions[_linux];
+    return _linuxOpts;
   } else {
     throw Exception('Unknown Platform.');
   }
@@ -271,9 +264,9 @@
   final String ldLibFlag;
 
   _Options({
-    @required this.sharedFlag,
-    @required this.inputHeader,
-    @required this.ldLibFlag,
+    required this.sharedFlag,
+    required this.inputHeader,
+    required this.ldLibFlag,
     this.headerIncludes = const [],
     this.libIncludes = const [],
     this.fPIC = '',
diff --git a/example/c_json/cjson_generated_bindings.dart b/example/c_json/cjson_generated_bindings.dart
index ada20c0..f71f586 100644
--- a/example/c_json/cjson_generated_bindings.dart
+++ b/example/c_json/cjson_generated_bindings.dart
@@ -32,93 +32,90 @@
   CJson(ffi.DynamicLibrary dynamicLibrary) : _dylib = dynamicLibrary;
 
   ffi.Pointer<ffi.Int8> cJSON_Version() {
-    _cJSON_Version ??= _dylib
-        .lookupFunction<_c_cJSON_Version, _dart_cJSON_Version>('cJSON_Version');
-    return _cJSON_Version();
+    return (_cJSON_Version ??=
+        _dylib.lookupFunction<_c_cJSON_Version, _dart_cJSON_Version>(
+            'cJSON_Version'))();
   }
 
-  _dart_cJSON_Version _cJSON_Version;
+  _dart_cJSON_Version? _cJSON_Version;
 
   void cJSON_InitHooks(
     ffi.Pointer<cJSON_Hooks> hooks,
   ) {
-    _cJSON_InitHooks ??=
+    return (_cJSON_InitHooks ??=
         _dylib.lookupFunction<_c_cJSON_InitHooks, _dart_cJSON_InitHooks>(
-            'cJSON_InitHooks');
-    return _cJSON_InitHooks(
+            'cJSON_InitHooks'))(
       hooks,
     );
   }
 
-  _dart_cJSON_InitHooks _cJSON_InitHooks;
+  _dart_cJSON_InitHooks? _cJSON_InitHooks;
 
   ffi.Pointer<cJSON> cJSON_Parse(
     ffi.Pointer<ffi.Int8> value,
   ) {
-    _cJSON_Parse ??=
-        _dylib.lookupFunction<_c_cJSON_Parse, _dart_cJSON_Parse>('cJSON_Parse');
-    return _cJSON_Parse(
+    return (_cJSON_Parse ??= _dylib
+        .lookupFunction<_c_cJSON_Parse, _dart_cJSON_Parse>('cJSON_Parse'))(
       value,
     );
   }
 
-  _dart_cJSON_Parse _cJSON_Parse;
+  _dart_cJSON_Parse? _cJSON_Parse;
 
   ffi.Pointer<cJSON> cJSON_ParseWithOpts(
     ffi.Pointer<ffi.Int8> value,
     ffi.Pointer<ffi.Pointer<ffi.Int8>> return_parse_end,
     int require_null_terminated,
   ) {
-    _cJSON_ParseWithOpts ??= _dylib.lookupFunction<_c_cJSON_ParseWithOpts,
-        _dart_cJSON_ParseWithOpts>('cJSON_ParseWithOpts');
-    return _cJSON_ParseWithOpts(
+    return (_cJSON_ParseWithOpts ??= _dylib.lookupFunction<
+        _c_cJSON_ParseWithOpts,
+        _dart_cJSON_ParseWithOpts>('cJSON_ParseWithOpts'))(
       value,
       return_parse_end,
       require_null_terminated,
     );
   }
 
-  _dart_cJSON_ParseWithOpts _cJSON_ParseWithOpts;
+  _dart_cJSON_ParseWithOpts? _cJSON_ParseWithOpts;
 
   ffi.Pointer<ffi.Int8> cJSON_Print(
     ffi.Pointer<cJSON> item,
   ) {
-    _cJSON_Print ??=
-        _dylib.lookupFunction<_c_cJSON_Print, _dart_cJSON_Print>('cJSON_Print');
-    return _cJSON_Print(
+    return (_cJSON_Print ??= _dylib
+        .lookupFunction<_c_cJSON_Print, _dart_cJSON_Print>('cJSON_Print'))(
       item,
     );
   }
 
-  _dart_cJSON_Print _cJSON_Print;
+  _dart_cJSON_Print? _cJSON_Print;
 
   ffi.Pointer<ffi.Int8> cJSON_PrintUnformatted(
     ffi.Pointer<cJSON> item,
   ) {
-    _cJSON_PrintUnformatted ??= _dylib.lookupFunction<_c_cJSON_PrintUnformatted,
-        _dart_cJSON_PrintUnformatted>('cJSON_PrintUnformatted');
-    return _cJSON_PrintUnformatted(
+    return (_cJSON_PrintUnformatted ??= _dylib.lookupFunction<
+        _c_cJSON_PrintUnformatted,
+        _dart_cJSON_PrintUnformatted>('cJSON_PrintUnformatted'))(
       item,
     );
   }
 
-  _dart_cJSON_PrintUnformatted _cJSON_PrintUnformatted;
+  _dart_cJSON_PrintUnformatted? _cJSON_PrintUnformatted;
 
   ffi.Pointer<ffi.Int8> cJSON_PrintBuffered(
     ffi.Pointer<cJSON> item,
     int prebuffer,
     int fmt,
   ) {
-    _cJSON_PrintBuffered ??= _dylib.lookupFunction<_c_cJSON_PrintBuffered,
-        _dart_cJSON_PrintBuffered>('cJSON_PrintBuffered');
-    return _cJSON_PrintBuffered(
+    return (_cJSON_PrintBuffered ??= _dylib.lookupFunction<
+        _c_cJSON_PrintBuffered,
+        _dart_cJSON_PrintBuffered>('cJSON_PrintBuffered'))(
       item,
       prebuffer,
       fmt,
     );
   }
 
-  _dart_cJSON_PrintBuffered _cJSON_PrintBuffered;
+  _dart_cJSON_PrintBuffered? _cJSON_PrintBuffered;
 
   int cJSON_PrintPreallocated(
     ffi.Pointer<cJSON> item,
@@ -126,10 +123,9 @@
     int length,
     int format,
   ) {
-    _cJSON_PrintPreallocated ??= _dylib.lookupFunction<
+    return (_cJSON_PrintPreallocated ??= _dylib.lookupFunction<
         _c_cJSON_PrintPreallocated,
-        _dart_cJSON_PrintPreallocated>('cJSON_PrintPreallocated');
-    return _cJSON_PrintPreallocated(
+        _dart_cJSON_PrintPreallocated>('cJSON_PrintPreallocated'))(
       item,
       buffer,
       length,
@@ -137,617 +133,581 @@
     );
   }
 
-  _dart_cJSON_PrintPreallocated _cJSON_PrintPreallocated;
+  _dart_cJSON_PrintPreallocated? _cJSON_PrintPreallocated;
 
   void cJSON_Delete(
     ffi.Pointer<cJSON> item,
   ) {
-    _cJSON_Delete ??= _dylib
-        .lookupFunction<_c_cJSON_Delete, _dart_cJSON_Delete>('cJSON_Delete');
-    return _cJSON_Delete(
+    return (_cJSON_Delete ??= _dylib
+        .lookupFunction<_c_cJSON_Delete, _dart_cJSON_Delete>('cJSON_Delete'))(
       item,
     );
   }
 
-  _dart_cJSON_Delete _cJSON_Delete;
+  _dart_cJSON_Delete? _cJSON_Delete;
 
   int cJSON_GetArraySize(
     ffi.Pointer<cJSON> array,
   ) {
-    _cJSON_GetArraySize ??=
+    return (_cJSON_GetArraySize ??=
         _dylib.lookupFunction<_c_cJSON_GetArraySize, _dart_cJSON_GetArraySize>(
-            'cJSON_GetArraySize');
-    return _cJSON_GetArraySize(
+            'cJSON_GetArraySize'))(
       array,
     );
   }
 
-  _dart_cJSON_GetArraySize _cJSON_GetArraySize;
+  _dart_cJSON_GetArraySize? _cJSON_GetArraySize;
 
   ffi.Pointer<cJSON> cJSON_GetArrayItem(
     ffi.Pointer<cJSON> array,
     int index,
   ) {
-    _cJSON_GetArrayItem ??=
+    return (_cJSON_GetArrayItem ??=
         _dylib.lookupFunction<_c_cJSON_GetArrayItem, _dart_cJSON_GetArrayItem>(
-            'cJSON_GetArrayItem');
-    return _cJSON_GetArrayItem(
+            'cJSON_GetArrayItem'))(
       array,
       index,
     );
   }
 
-  _dart_cJSON_GetArrayItem _cJSON_GetArrayItem;
+  _dart_cJSON_GetArrayItem? _cJSON_GetArrayItem;
 
   ffi.Pointer<cJSON> cJSON_GetObjectItem(
     ffi.Pointer<cJSON> object,
     ffi.Pointer<ffi.Int8> string,
   ) {
-    _cJSON_GetObjectItem ??= _dylib.lookupFunction<_c_cJSON_GetObjectItem,
-        _dart_cJSON_GetObjectItem>('cJSON_GetObjectItem');
-    return _cJSON_GetObjectItem(
+    return (_cJSON_GetObjectItem ??= _dylib.lookupFunction<
+        _c_cJSON_GetObjectItem,
+        _dart_cJSON_GetObjectItem>('cJSON_GetObjectItem'))(
       object,
       string,
     );
   }
 
-  _dart_cJSON_GetObjectItem _cJSON_GetObjectItem;
+  _dart_cJSON_GetObjectItem? _cJSON_GetObjectItem;
 
   ffi.Pointer<cJSON> cJSON_GetObjectItemCaseSensitive(
     ffi.Pointer<cJSON> object,
     ffi.Pointer<ffi.Int8> string,
   ) {
-    _cJSON_GetObjectItemCaseSensitive ??= _dylib.lookupFunction<
+    return (_cJSON_GetObjectItemCaseSensitive ??= _dylib.lookupFunction<
             _c_cJSON_GetObjectItemCaseSensitive,
             _dart_cJSON_GetObjectItemCaseSensitive>(
-        'cJSON_GetObjectItemCaseSensitive');
-    return _cJSON_GetObjectItemCaseSensitive(
+        'cJSON_GetObjectItemCaseSensitive'))(
       object,
       string,
     );
   }
 
-  _dart_cJSON_GetObjectItemCaseSensitive _cJSON_GetObjectItemCaseSensitive;
+  _dart_cJSON_GetObjectItemCaseSensitive? _cJSON_GetObjectItemCaseSensitive;
 
   int cJSON_HasObjectItem(
     ffi.Pointer<cJSON> object,
     ffi.Pointer<ffi.Int8> string,
   ) {
-    _cJSON_HasObjectItem ??= _dylib.lookupFunction<_c_cJSON_HasObjectItem,
-        _dart_cJSON_HasObjectItem>('cJSON_HasObjectItem');
-    return _cJSON_HasObjectItem(
+    return (_cJSON_HasObjectItem ??= _dylib.lookupFunction<
+        _c_cJSON_HasObjectItem,
+        _dart_cJSON_HasObjectItem>('cJSON_HasObjectItem'))(
       object,
       string,
     );
   }
 
-  _dart_cJSON_HasObjectItem _cJSON_HasObjectItem;
+  _dart_cJSON_HasObjectItem? _cJSON_HasObjectItem;
 
   ffi.Pointer<ffi.Int8> cJSON_GetErrorPtr() {
-    _cJSON_GetErrorPtr ??=
+    return (_cJSON_GetErrorPtr ??=
         _dylib.lookupFunction<_c_cJSON_GetErrorPtr, _dart_cJSON_GetErrorPtr>(
-            'cJSON_GetErrorPtr');
-    return _cJSON_GetErrorPtr();
+            'cJSON_GetErrorPtr'))();
   }
 
-  _dart_cJSON_GetErrorPtr _cJSON_GetErrorPtr;
+  _dart_cJSON_GetErrorPtr? _cJSON_GetErrorPtr;
 
   ffi.Pointer<ffi.Int8> cJSON_GetStringValue(
     ffi.Pointer<cJSON> item,
   ) {
-    _cJSON_GetStringValue ??= _dylib.lookupFunction<_c_cJSON_GetStringValue,
-        _dart_cJSON_GetStringValue>('cJSON_GetStringValue');
-    return _cJSON_GetStringValue(
+    return (_cJSON_GetStringValue ??= _dylib.lookupFunction<
+        _c_cJSON_GetStringValue,
+        _dart_cJSON_GetStringValue>('cJSON_GetStringValue'))(
       item,
     );
   }
 
-  _dart_cJSON_GetStringValue _cJSON_GetStringValue;
+  _dart_cJSON_GetStringValue? _cJSON_GetStringValue;
 
   int cJSON_IsInvalid(
     ffi.Pointer<cJSON> item,
   ) {
-    _cJSON_IsInvalid ??=
+    return (_cJSON_IsInvalid ??=
         _dylib.lookupFunction<_c_cJSON_IsInvalid, _dart_cJSON_IsInvalid>(
-            'cJSON_IsInvalid');
-    return _cJSON_IsInvalid(
+            'cJSON_IsInvalid'))(
       item,
     );
   }
 
-  _dart_cJSON_IsInvalid _cJSON_IsInvalid;
+  _dart_cJSON_IsInvalid? _cJSON_IsInvalid;
 
   int cJSON_IsFalse(
     ffi.Pointer<cJSON> item,
   ) {
-    _cJSON_IsFalse ??= _dylib
-        .lookupFunction<_c_cJSON_IsFalse, _dart_cJSON_IsFalse>('cJSON_IsFalse');
-    return _cJSON_IsFalse(
+    return (_cJSON_IsFalse ??=
+        _dylib.lookupFunction<_c_cJSON_IsFalse, _dart_cJSON_IsFalse>(
+            'cJSON_IsFalse'))(
       item,
     );
   }
 
-  _dart_cJSON_IsFalse _cJSON_IsFalse;
+  _dart_cJSON_IsFalse? _cJSON_IsFalse;
 
   int cJSON_IsTrue(
     ffi.Pointer<cJSON> item,
   ) {
-    _cJSON_IsTrue ??= _dylib
-        .lookupFunction<_c_cJSON_IsTrue, _dart_cJSON_IsTrue>('cJSON_IsTrue');
-    return _cJSON_IsTrue(
+    return (_cJSON_IsTrue ??= _dylib
+        .lookupFunction<_c_cJSON_IsTrue, _dart_cJSON_IsTrue>('cJSON_IsTrue'))(
       item,
     );
   }
 
-  _dart_cJSON_IsTrue _cJSON_IsTrue;
+  _dart_cJSON_IsTrue? _cJSON_IsTrue;
 
   int cJSON_IsBool(
     ffi.Pointer<cJSON> item,
   ) {
-    _cJSON_IsBool ??= _dylib
-        .lookupFunction<_c_cJSON_IsBool, _dart_cJSON_IsBool>('cJSON_IsBool');
-    return _cJSON_IsBool(
+    return (_cJSON_IsBool ??= _dylib
+        .lookupFunction<_c_cJSON_IsBool, _dart_cJSON_IsBool>('cJSON_IsBool'))(
       item,
     );
   }
 
-  _dart_cJSON_IsBool _cJSON_IsBool;
+  _dart_cJSON_IsBool? _cJSON_IsBool;
 
   int cJSON_IsNull(
     ffi.Pointer<cJSON> item,
   ) {
-    _cJSON_IsNull ??= _dylib
-        .lookupFunction<_c_cJSON_IsNull, _dart_cJSON_IsNull>('cJSON_IsNull');
-    return _cJSON_IsNull(
+    return (_cJSON_IsNull ??= _dylib
+        .lookupFunction<_c_cJSON_IsNull, _dart_cJSON_IsNull>('cJSON_IsNull'))(
       item,
     );
   }
 
-  _dart_cJSON_IsNull _cJSON_IsNull;
+  _dart_cJSON_IsNull? _cJSON_IsNull;
 
   int cJSON_IsNumber(
     ffi.Pointer<cJSON> item,
   ) {
-    _cJSON_IsNumber ??=
+    return (_cJSON_IsNumber ??=
         _dylib.lookupFunction<_c_cJSON_IsNumber, _dart_cJSON_IsNumber>(
-            'cJSON_IsNumber');
-    return _cJSON_IsNumber(
+            'cJSON_IsNumber'))(
       item,
     );
   }
 
-  _dart_cJSON_IsNumber _cJSON_IsNumber;
+  _dart_cJSON_IsNumber? _cJSON_IsNumber;
 
   int cJSON_IsString(
     ffi.Pointer<cJSON> item,
   ) {
-    _cJSON_IsString ??=
+    return (_cJSON_IsString ??=
         _dylib.lookupFunction<_c_cJSON_IsString, _dart_cJSON_IsString>(
-            'cJSON_IsString');
-    return _cJSON_IsString(
+            'cJSON_IsString'))(
       item,
     );
   }
 
-  _dart_cJSON_IsString _cJSON_IsString;
+  _dart_cJSON_IsString? _cJSON_IsString;
 
   int cJSON_IsArray(
     ffi.Pointer<cJSON> item,
   ) {
-    _cJSON_IsArray ??= _dylib
-        .lookupFunction<_c_cJSON_IsArray, _dart_cJSON_IsArray>('cJSON_IsArray');
-    return _cJSON_IsArray(
+    return (_cJSON_IsArray ??=
+        _dylib.lookupFunction<_c_cJSON_IsArray, _dart_cJSON_IsArray>(
+            'cJSON_IsArray'))(
       item,
     );
   }
 
-  _dart_cJSON_IsArray _cJSON_IsArray;
+  _dart_cJSON_IsArray? _cJSON_IsArray;
 
   int cJSON_IsObject(
     ffi.Pointer<cJSON> item,
   ) {
-    _cJSON_IsObject ??=
+    return (_cJSON_IsObject ??=
         _dylib.lookupFunction<_c_cJSON_IsObject, _dart_cJSON_IsObject>(
-            'cJSON_IsObject');
-    return _cJSON_IsObject(
+            'cJSON_IsObject'))(
       item,
     );
   }
 
-  _dart_cJSON_IsObject _cJSON_IsObject;
+  _dart_cJSON_IsObject? _cJSON_IsObject;
 
   int cJSON_IsRaw(
     ffi.Pointer<cJSON> item,
   ) {
-    _cJSON_IsRaw ??=
-        _dylib.lookupFunction<_c_cJSON_IsRaw, _dart_cJSON_IsRaw>('cJSON_IsRaw');
-    return _cJSON_IsRaw(
+    return (_cJSON_IsRaw ??= _dylib
+        .lookupFunction<_c_cJSON_IsRaw, _dart_cJSON_IsRaw>('cJSON_IsRaw'))(
       item,
     );
   }
 
-  _dart_cJSON_IsRaw _cJSON_IsRaw;
+  _dart_cJSON_IsRaw? _cJSON_IsRaw;
 
   ffi.Pointer<cJSON> cJSON_CreateNull() {
-    _cJSON_CreateNull ??=
+    return (_cJSON_CreateNull ??=
         _dylib.lookupFunction<_c_cJSON_CreateNull, _dart_cJSON_CreateNull>(
-            'cJSON_CreateNull');
-    return _cJSON_CreateNull();
+            'cJSON_CreateNull'))();
   }
 
-  _dart_cJSON_CreateNull _cJSON_CreateNull;
+  _dart_cJSON_CreateNull? _cJSON_CreateNull;
 
   ffi.Pointer<cJSON> cJSON_CreateTrue() {
-    _cJSON_CreateTrue ??=
+    return (_cJSON_CreateTrue ??=
         _dylib.lookupFunction<_c_cJSON_CreateTrue, _dart_cJSON_CreateTrue>(
-            'cJSON_CreateTrue');
-    return _cJSON_CreateTrue();
+            'cJSON_CreateTrue'))();
   }
 
-  _dart_cJSON_CreateTrue _cJSON_CreateTrue;
+  _dart_cJSON_CreateTrue? _cJSON_CreateTrue;
 
   ffi.Pointer<cJSON> cJSON_CreateFalse() {
-    _cJSON_CreateFalse ??=
+    return (_cJSON_CreateFalse ??=
         _dylib.lookupFunction<_c_cJSON_CreateFalse, _dart_cJSON_CreateFalse>(
-            'cJSON_CreateFalse');
-    return _cJSON_CreateFalse();
+            'cJSON_CreateFalse'))();
   }
 
-  _dart_cJSON_CreateFalse _cJSON_CreateFalse;
+  _dart_cJSON_CreateFalse? _cJSON_CreateFalse;
 
   ffi.Pointer<cJSON> cJSON_CreateBool(
     int boolean,
   ) {
-    _cJSON_CreateBool ??=
+    return (_cJSON_CreateBool ??=
         _dylib.lookupFunction<_c_cJSON_CreateBool, _dart_cJSON_CreateBool>(
-            'cJSON_CreateBool');
-    return _cJSON_CreateBool(
+            'cJSON_CreateBool'))(
       boolean,
     );
   }
 
-  _dart_cJSON_CreateBool _cJSON_CreateBool;
+  _dart_cJSON_CreateBool? _cJSON_CreateBool;
 
   ffi.Pointer<cJSON> cJSON_CreateNumber(
     double num,
   ) {
-    _cJSON_CreateNumber ??=
+    return (_cJSON_CreateNumber ??=
         _dylib.lookupFunction<_c_cJSON_CreateNumber, _dart_cJSON_CreateNumber>(
-            'cJSON_CreateNumber');
-    return _cJSON_CreateNumber(
+            'cJSON_CreateNumber'))(
       num,
     );
   }
 
-  _dart_cJSON_CreateNumber _cJSON_CreateNumber;
+  _dart_cJSON_CreateNumber? _cJSON_CreateNumber;
 
   ffi.Pointer<cJSON> cJSON_CreateString(
     ffi.Pointer<ffi.Int8> string,
   ) {
-    _cJSON_CreateString ??=
+    return (_cJSON_CreateString ??=
         _dylib.lookupFunction<_c_cJSON_CreateString, _dart_cJSON_CreateString>(
-            'cJSON_CreateString');
-    return _cJSON_CreateString(
+            'cJSON_CreateString'))(
       string,
     );
   }
 
-  _dart_cJSON_CreateString _cJSON_CreateString;
+  _dart_cJSON_CreateString? _cJSON_CreateString;
 
   ffi.Pointer<cJSON> cJSON_CreateRaw(
     ffi.Pointer<ffi.Int8> raw,
   ) {
-    _cJSON_CreateRaw ??=
+    return (_cJSON_CreateRaw ??=
         _dylib.lookupFunction<_c_cJSON_CreateRaw, _dart_cJSON_CreateRaw>(
-            'cJSON_CreateRaw');
-    return _cJSON_CreateRaw(
+            'cJSON_CreateRaw'))(
       raw,
     );
   }
 
-  _dart_cJSON_CreateRaw _cJSON_CreateRaw;
+  _dart_cJSON_CreateRaw? _cJSON_CreateRaw;
 
   ffi.Pointer<cJSON> cJSON_CreateArray() {
-    _cJSON_CreateArray ??=
+    return (_cJSON_CreateArray ??=
         _dylib.lookupFunction<_c_cJSON_CreateArray, _dart_cJSON_CreateArray>(
-            'cJSON_CreateArray');
-    return _cJSON_CreateArray();
+            'cJSON_CreateArray'))();
   }
 
-  _dart_cJSON_CreateArray _cJSON_CreateArray;
+  _dart_cJSON_CreateArray? _cJSON_CreateArray;
 
   ffi.Pointer<cJSON> cJSON_CreateObject() {
-    _cJSON_CreateObject ??=
+    return (_cJSON_CreateObject ??=
         _dylib.lookupFunction<_c_cJSON_CreateObject, _dart_cJSON_CreateObject>(
-            'cJSON_CreateObject');
-    return _cJSON_CreateObject();
+            'cJSON_CreateObject'))();
   }
 
-  _dart_cJSON_CreateObject _cJSON_CreateObject;
+  _dart_cJSON_CreateObject? _cJSON_CreateObject;
 
   ffi.Pointer<cJSON> cJSON_CreateStringReference(
     ffi.Pointer<ffi.Int8> string,
   ) {
-    _cJSON_CreateStringReference ??= _dylib.lookupFunction<
+    return (_cJSON_CreateStringReference ??= _dylib.lookupFunction<
         _c_cJSON_CreateStringReference,
-        _dart_cJSON_CreateStringReference>('cJSON_CreateStringReference');
-    return _cJSON_CreateStringReference(
+        _dart_cJSON_CreateStringReference>('cJSON_CreateStringReference'))(
       string,
     );
   }
 
-  _dart_cJSON_CreateStringReference _cJSON_CreateStringReference;
+  _dart_cJSON_CreateStringReference? _cJSON_CreateStringReference;
 
   ffi.Pointer<cJSON> cJSON_CreateObjectReference(
     ffi.Pointer<cJSON> child,
   ) {
-    _cJSON_CreateObjectReference ??= _dylib.lookupFunction<
+    return (_cJSON_CreateObjectReference ??= _dylib.lookupFunction<
         _c_cJSON_CreateObjectReference,
-        _dart_cJSON_CreateObjectReference>('cJSON_CreateObjectReference');
-    return _cJSON_CreateObjectReference(
+        _dart_cJSON_CreateObjectReference>('cJSON_CreateObjectReference'))(
       child,
     );
   }
 
-  _dart_cJSON_CreateObjectReference _cJSON_CreateObjectReference;
+  _dart_cJSON_CreateObjectReference? _cJSON_CreateObjectReference;
 
   ffi.Pointer<cJSON> cJSON_CreateArrayReference(
     ffi.Pointer<cJSON> child,
   ) {
-    _cJSON_CreateArrayReference ??= _dylib.lookupFunction<
+    return (_cJSON_CreateArrayReference ??= _dylib.lookupFunction<
         _c_cJSON_CreateArrayReference,
-        _dart_cJSON_CreateArrayReference>('cJSON_CreateArrayReference');
-    return _cJSON_CreateArrayReference(
+        _dart_cJSON_CreateArrayReference>('cJSON_CreateArrayReference'))(
       child,
     );
   }
 
-  _dart_cJSON_CreateArrayReference _cJSON_CreateArrayReference;
+  _dart_cJSON_CreateArrayReference? _cJSON_CreateArrayReference;
 
   ffi.Pointer<cJSON> cJSON_CreateIntArray(
     ffi.Pointer<ffi.Int32> numbers,
     int count,
   ) {
-    _cJSON_CreateIntArray ??= _dylib.lookupFunction<_c_cJSON_CreateIntArray,
-        _dart_cJSON_CreateIntArray>('cJSON_CreateIntArray');
-    return _cJSON_CreateIntArray(
+    return (_cJSON_CreateIntArray ??= _dylib.lookupFunction<
+        _c_cJSON_CreateIntArray,
+        _dart_cJSON_CreateIntArray>('cJSON_CreateIntArray'))(
       numbers,
       count,
     );
   }
 
-  _dart_cJSON_CreateIntArray _cJSON_CreateIntArray;
+  _dart_cJSON_CreateIntArray? _cJSON_CreateIntArray;
 
   ffi.Pointer<cJSON> cJSON_CreateFloatArray(
     ffi.Pointer<ffi.Float> numbers,
     int count,
   ) {
-    _cJSON_CreateFloatArray ??= _dylib.lookupFunction<_c_cJSON_CreateFloatArray,
-        _dart_cJSON_CreateFloatArray>('cJSON_CreateFloatArray');
-    return _cJSON_CreateFloatArray(
+    return (_cJSON_CreateFloatArray ??= _dylib.lookupFunction<
+        _c_cJSON_CreateFloatArray,
+        _dart_cJSON_CreateFloatArray>('cJSON_CreateFloatArray'))(
       numbers,
       count,
     );
   }
 
-  _dart_cJSON_CreateFloatArray _cJSON_CreateFloatArray;
+  _dart_cJSON_CreateFloatArray? _cJSON_CreateFloatArray;
 
   ffi.Pointer<cJSON> cJSON_CreateDoubleArray(
     ffi.Pointer<ffi.Double> numbers,
     int count,
   ) {
-    _cJSON_CreateDoubleArray ??= _dylib.lookupFunction<
+    return (_cJSON_CreateDoubleArray ??= _dylib.lookupFunction<
         _c_cJSON_CreateDoubleArray,
-        _dart_cJSON_CreateDoubleArray>('cJSON_CreateDoubleArray');
-    return _cJSON_CreateDoubleArray(
+        _dart_cJSON_CreateDoubleArray>('cJSON_CreateDoubleArray'))(
       numbers,
       count,
     );
   }
 
-  _dart_cJSON_CreateDoubleArray _cJSON_CreateDoubleArray;
+  _dart_cJSON_CreateDoubleArray? _cJSON_CreateDoubleArray;
 
   ffi.Pointer<cJSON> cJSON_CreateStringArray(
     ffi.Pointer<ffi.Pointer<ffi.Int8>> strings,
     int count,
   ) {
-    _cJSON_CreateStringArray ??= _dylib.lookupFunction<
+    return (_cJSON_CreateStringArray ??= _dylib.lookupFunction<
         _c_cJSON_CreateStringArray,
-        _dart_cJSON_CreateStringArray>('cJSON_CreateStringArray');
-    return _cJSON_CreateStringArray(
+        _dart_cJSON_CreateStringArray>('cJSON_CreateStringArray'))(
       strings,
       count,
     );
   }
 
-  _dart_cJSON_CreateStringArray _cJSON_CreateStringArray;
+  _dart_cJSON_CreateStringArray? _cJSON_CreateStringArray;
 
   void cJSON_AddItemToArray(
     ffi.Pointer<cJSON> array,
     ffi.Pointer<cJSON> item,
   ) {
-    _cJSON_AddItemToArray ??= _dylib.lookupFunction<_c_cJSON_AddItemToArray,
-        _dart_cJSON_AddItemToArray>('cJSON_AddItemToArray');
-    return _cJSON_AddItemToArray(
+    return (_cJSON_AddItemToArray ??= _dylib.lookupFunction<
+        _c_cJSON_AddItemToArray,
+        _dart_cJSON_AddItemToArray>('cJSON_AddItemToArray'))(
       array,
       item,
     );
   }
 
-  _dart_cJSON_AddItemToArray _cJSON_AddItemToArray;
+  _dart_cJSON_AddItemToArray? _cJSON_AddItemToArray;
 
   void cJSON_AddItemToObject(
     ffi.Pointer<cJSON> object,
     ffi.Pointer<ffi.Int8> string,
     ffi.Pointer<cJSON> item,
   ) {
-    _cJSON_AddItemToObject ??= _dylib.lookupFunction<_c_cJSON_AddItemToObject,
-        _dart_cJSON_AddItemToObject>('cJSON_AddItemToObject');
-    return _cJSON_AddItemToObject(
+    return (_cJSON_AddItemToObject ??= _dylib.lookupFunction<
+        _c_cJSON_AddItemToObject,
+        _dart_cJSON_AddItemToObject>('cJSON_AddItemToObject'))(
       object,
       string,
       item,
     );
   }
 
-  _dart_cJSON_AddItemToObject _cJSON_AddItemToObject;
+  _dart_cJSON_AddItemToObject? _cJSON_AddItemToObject;
 
   void cJSON_AddItemToObjectCS(
     ffi.Pointer<cJSON> object,
     ffi.Pointer<ffi.Int8> string,
     ffi.Pointer<cJSON> item,
   ) {
-    _cJSON_AddItemToObjectCS ??= _dylib.lookupFunction<
+    return (_cJSON_AddItemToObjectCS ??= _dylib.lookupFunction<
         _c_cJSON_AddItemToObjectCS,
-        _dart_cJSON_AddItemToObjectCS>('cJSON_AddItemToObjectCS');
-    return _cJSON_AddItemToObjectCS(
+        _dart_cJSON_AddItemToObjectCS>('cJSON_AddItemToObjectCS'))(
       object,
       string,
       item,
     );
   }
 
-  _dart_cJSON_AddItemToObjectCS _cJSON_AddItemToObjectCS;
+  _dart_cJSON_AddItemToObjectCS? _cJSON_AddItemToObjectCS;
 
   void cJSON_AddItemReferenceToArray(
     ffi.Pointer<cJSON> array,
     ffi.Pointer<cJSON> item,
   ) {
-    _cJSON_AddItemReferenceToArray ??= _dylib.lookupFunction<
+    return (_cJSON_AddItemReferenceToArray ??= _dylib.lookupFunction<
         _c_cJSON_AddItemReferenceToArray,
-        _dart_cJSON_AddItemReferenceToArray>('cJSON_AddItemReferenceToArray');
-    return _cJSON_AddItemReferenceToArray(
+        _dart_cJSON_AddItemReferenceToArray>('cJSON_AddItemReferenceToArray'))(
       array,
       item,
     );
   }
 
-  _dart_cJSON_AddItemReferenceToArray _cJSON_AddItemReferenceToArray;
+  _dart_cJSON_AddItemReferenceToArray? _cJSON_AddItemReferenceToArray;
 
   void cJSON_AddItemReferenceToObject(
     ffi.Pointer<cJSON> object,
     ffi.Pointer<ffi.Int8> string,
     ffi.Pointer<cJSON> item,
   ) {
-    _cJSON_AddItemReferenceToObject ??= _dylib.lookupFunction<
-        _c_cJSON_AddItemReferenceToObject,
-        _dart_cJSON_AddItemReferenceToObject>('cJSON_AddItemReferenceToObject');
-    return _cJSON_AddItemReferenceToObject(
+    return (_cJSON_AddItemReferenceToObject ??= _dylib.lookupFunction<
+            _c_cJSON_AddItemReferenceToObject,
+            _dart_cJSON_AddItemReferenceToObject>(
+        'cJSON_AddItemReferenceToObject'))(
       object,
       string,
       item,
     );
   }
 
-  _dart_cJSON_AddItemReferenceToObject _cJSON_AddItemReferenceToObject;
+  _dart_cJSON_AddItemReferenceToObject? _cJSON_AddItemReferenceToObject;
 
   ffi.Pointer<cJSON> cJSON_DetachItemViaPointer(
     ffi.Pointer<cJSON> parent,
     ffi.Pointer<cJSON> item,
   ) {
-    _cJSON_DetachItemViaPointer ??= _dylib.lookupFunction<
+    return (_cJSON_DetachItemViaPointer ??= _dylib.lookupFunction<
         _c_cJSON_DetachItemViaPointer,
-        _dart_cJSON_DetachItemViaPointer>('cJSON_DetachItemViaPointer');
-    return _cJSON_DetachItemViaPointer(
+        _dart_cJSON_DetachItemViaPointer>('cJSON_DetachItemViaPointer'))(
       parent,
       item,
     );
   }
 
-  _dart_cJSON_DetachItemViaPointer _cJSON_DetachItemViaPointer;
+  _dart_cJSON_DetachItemViaPointer? _cJSON_DetachItemViaPointer;
 
   ffi.Pointer<cJSON> cJSON_DetachItemFromArray(
     ffi.Pointer<cJSON> array,
     int which,
   ) {
-    _cJSON_DetachItemFromArray ??= _dylib.lookupFunction<
+    return (_cJSON_DetachItemFromArray ??= _dylib.lookupFunction<
         _c_cJSON_DetachItemFromArray,
-        _dart_cJSON_DetachItemFromArray>('cJSON_DetachItemFromArray');
-    return _cJSON_DetachItemFromArray(
+        _dart_cJSON_DetachItemFromArray>('cJSON_DetachItemFromArray'))(
       array,
       which,
     );
   }
 
-  _dart_cJSON_DetachItemFromArray _cJSON_DetachItemFromArray;
+  _dart_cJSON_DetachItemFromArray? _cJSON_DetachItemFromArray;
 
   void cJSON_DeleteItemFromArray(
     ffi.Pointer<cJSON> array,
     int which,
   ) {
-    _cJSON_DeleteItemFromArray ??= _dylib.lookupFunction<
+    return (_cJSON_DeleteItemFromArray ??= _dylib.lookupFunction<
         _c_cJSON_DeleteItemFromArray,
-        _dart_cJSON_DeleteItemFromArray>('cJSON_DeleteItemFromArray');
-    return _cJSON_DeleteItemFromArray(
+        _dart_cJSON_DeleteItemFromArray>('cJSON_DeleteItemFromArray'))(
       array,
       which,
     );
   }
 
-  _dart_cJSON_DeleteItemFromArray _cJSON_DeleteItemFromArray;
+  _dart_cJSON_DeleteItemFromArray? _cJSON_DeleteItemFromArray;
 
   ffi.Pointer<cJSON> cJSON_DetachItemFromObject(
     ffi.Pointer<cJSON> object,
     ffi.Pointer<ffi.Int8> string,
   ) {
-    _cJSON_DetachItemFromObject ??= _dylib.lookupFunction<
+    return (_cJSON_DetachItemFromObject ??= _dylib.lookupFunction<
         _c_cJSON_DetachItemFromObject,
-        _dart_cJSON_DetachItemFromObject>('cJSON_DetachItemFromObject');
-    return _cJSON_DetachItemFromObject(
+        _dart_cJSON_DetachItemFromObject>('cJSON_DetachItemFromObject'))(
       object,
       string,
     );
   }
 
-  _dart_cJSON_DetachItemFromObject _cJSON_DetachItemFromObject;
+  _dart_cJSON_DetachItemFromObject? _cJSON_DetachItemFromObject;
 
   ffi.Pointer<cJSON> cJSON_DetachItemFromObjectCaseSensitive(
     ffi.Pointer<cJSON> object,
     ffi.Pointer<ffi.Int8> string,
   ) {
-    _cJSON_DetachItemFromObjectCaseSensitive ??= _dylib.lookupFunction<
+    return (_cJSON_DetachItemFromObjectCaseSensitive ??= _dylib.lookupFunction<
             _c_cJSON_DetachItemFromObjectCaseSensitive,
             _dart_cJSON_DetachItemFromObjectCaseSensitive>(
-        'cJSON_DetachItemFromObjectCaseSensitive');
-    return _cJSON_DetachItemFromObjectCaseSensitive(
+        'cJSON_DetachItemFromObjectCaseSensitive'))(
       object,
       string,
     );
   }
 
-  _dart_cJSON_DetachItemFromObjectCaseSensitive
+  _dart_cJSON_DetachItemFromObjectCaseSensitive?
       _cJSON_DetachItemFromObjectCaseSensitive;
 
   void cJSON_DeleteItemFromObject(
     ffi.Pointer<cJSON> object,
     ffi.Pointer<ffi.Int8> string,
   ) {
-    _cJSON_DeleteItemFromObject ??= _dylib.lookupFunction<
+    return (_cJSON_DeleteItemFromObject ??= _dylib.lookupFunction<
         _c_cJSON_DeleteItemFromObject,
-        _dart_cJSON_DeleteItemFromObject>('cJSON_DeleteItemFromObject');
-    return _cJSON_DeleteItemFromObject(
+        _dart_cJSON_DeleteItemFromObject>('cJSON_DeleteItemFromObject'))(
       object,
       string,
     );
   }
 
-  _dart_cJSON_DeleteItemFromObject _cJSON_DeleteItemFromObject;
+  _dart_cJSON_DeleteItemFromObject? _cJSON_DeleteItemFromObject;
 
   void cJSON_DeleteItemFromObjectCaseSensitive(
     ffi.Pointer<cJSON> object,
     ffi.Pointer<ffi.Int8> string,
   ) {
-    _cJSON_DeleteItemFromObjectCaseSensitive ??= _dylib.lookupFunction<
+    return (_cJSON_DeleteItemFromObjectCaseSensitive ??= _dylib.lookupFunction<
             _c_cJSON_DeleteItemFromObjectCaseSensitive,
             _dart_cJSON_DeleteItemFromObjectCaseSensitive>(
-        'cJSON_DeleteItemFromObjectCaseSensitive');
-    return _cJSON_DeleteItemFromObjectCaseSensitive(
+        'cJSON_DeleteItemFromObjectCaseSensitive'))(
       object,
       string,
     );
   }
 
-  _dart_cJSON_DeleteItemFromObjectCaseSensitive
+  _dart_cJSON_DeleteItemFromObjectCaseSensitive?
       _cJSON_DeleteItemFromObjectCaseSensitive;
 
   void cJSON_InsertItemInArray(
@@ -755,332 +715,320 @@
     int which,
     ffi.Pointer<cJSON> newitem,
   ) {
-    _cJSON_InsertItemInArray ??= _dylib.lookupFunction<
+    return (_cJSON_InsertItemInArray ??= _dylib.lookupFunction<
         _c_cJSON_InsertItemInArray,
-        _dart_cJSON_InsertItemInArray>('cJSON_InsertItemInArray');
-    return _cJSON_InsertItemInArray(
+        _dart_cJSON_InsertItemInArray>('cJSON_InsertItemInArray'))(
       array,
       which,
       newitem,
     );
   }
 
-  _dart_cJSON_InsertItemInArray _cJSON_InsertItemInArray;
+  _dart_cJSON_InsertItemInArray? _cJSON_InsertItemInArray;
 
   int cJSON_ReplaceItemViaPointer(
     ffi.Pointer<cJSON> parent,
     ffi.Pointer<cJSON> item,
     ffi.Pointer<cJSON> replacement,
   ) {
-    _cJSON_ReplaceItemViaPointer ??= _dylib.lookupFunction<
+    return (_cJSON_ReplaceItemViaPointer ??= _dylib.lookupFunction<
         _c_cJSON_ReplaceItemViaPointer,
-        _dart_cJSON_ReplaceItemViaPointer>('cJSON_ReplaceItemViaPointer');
-    return _cJSON_ReplaceItemViaPointer(
+        _dart_cJSON_ReplaceItemViaPointer>('cJSON_ReplaceItemViaPointer'))(
       parent,
       item,
       replacement,
     );
   }
 
-  _dart_cJSON_ReplaceItemViaPointer _cJSON_ReplaceItemViaPointer;
+  _dart_cJSON_ReplaceItemViaPointer? _cJSON_ReplaceItemViaPointer;
 
   void cJSON_ReplaceItemInArray(
     ffi.Pointer<cJSON> array,
     int which,
     ffi.Pointer<cJSON> newitem,
   ) {
-    _cJSON_ReplaceItemInArray ??= _dylib.lookupFunction<
+    return (_cJSON_ReplaceItemInArray ??= _dylib.lookupFunction<
         _c_cJSON_ReplaceItemInArray,
-        _dart_cJSON_ReplaceItemInArray>('cJSON_ReplaceItemInArray');
-    return _cJSON_ReplaceItemInArray(
+        _dart_cJSON_ReplaceItemInArray>('cJSON_ReplaceItemInArray'))(
       array,
       which,
       newitem,
     );
   }
 
-  _dart_cJSON_ReplaceItemInArray _cJSON_ReplaceItemInArray;
+  _dart_cJSON_ReplaceItemInArray? _cJSON_ReplaceItemInArray;
 
   void cJSON_ReplaceItemInObject(
     ffi.Pointer<cJSON> object,
     ffi.Pointer<ffi.Int8> string,
     ffi.Pointer<cJSON> newitem,
   ) {
-    _cJSON_ReplaceItemInObject ??= _dylib.lookupFunction<
+    return (_cJSON_ReplaceItemInObject ??= _dylib.lookupFunction<
         _c_cJSON_ReplaceItemInObject,
-        _dart_cJSON_ReplaceItemInObject>('cJSON_ReplaceItemInObject');
-    return _cJSON_ReplaceItemInObject(
+        _dart_cJSON_ReplaceItemInObject>('cJSON_ReplaceItemInObject'))(
       object,
       string,
       newitem,
     );
   }
 
-  _dart_cJSON_ReplaceItemInObject _cJSON_ReplaceItemInObject;
+  _dart_cJSON_ReplaceItemInObject? _cJSON_ReplaceItemInObject;
 
   void cJSON_ReplaceItemInObjectCaseSensitive(
     ffi.Pointer<cJSON> object,
     ffi.Pointer<ffi.Int8> string,
     ffi.Pointer<cJSON> newitem,
   ) {
-    _cJSON_ReplaceItemInObjectCaseSensitive ??= _dylib.lookupFunction<
+    return (_cJSON_ReplaceItemInObjectCaseSensitive ??= _dylib.lookupFunction<
             _c_cJSON_ReplaceItemInObjectCaseSensitive,
             _dart_cJSON_ReplaceItemInObjectCaseSensitive>(
-        'cJSON_ReplaceItemInObjectCaseSensitive');
-    return _cJSON_ReplaceItemInObjectCaseSensitive(
+        'cJSON_ReplaceItemInObjectCaseSensitive'))(
       object,
       string,
       newitem,
     );
   }
 
-  _dart_cJSON_ReplaceItemInObjectCaseSensitive
+  _dart_cJSON_ReplaceItemInObjectCaseSensitive?
       _cJSON_ReplaceItemInObjectCaseSensitive;
 
   ffi.Pointer<cJSON> cJSON_Duplicate(
     ffi.Pointer<cJSON> item,
     int recurse,
   ) {
-    _cJSON_Duplicate ??=
+    return (_cJSON_Duplicate ??=
         _dylib.lookupFunction<_c_cJSON_Duplicate, _dart_cJSON_Duplicate>(
-            'cJSON_Duplicate');
-    return _cJSON_Duplicate(
+            'cJSON_Duplicate'))(
       item,
       recurse,
     );
   }
 
-  _dart_cJSON_Duplicate _cJSON_Duplicate;
+  _dart_cJSON_Duplicate? _cJSON_Duplicate;
 
   int cJSON_Compare(
     ffi.Pointer<cJSON> a,
     ffi.Pointer<cJSON> b,
     int case_sensitive,
   ) {
-    _cJSON_Compare ??= _dylib
-        .lookupFunction<_c_cJSON_Compare, _dart_cJSON_Compare>('cJSON_Compare');
-    return _cJSON_Compare(
+    return (_cJSON_Compare ??=
+        _dylib.lookupFunction<_c_cJSON_Compare, _dart_cJSON_Compare>(
+            'cJSON_Compare'))(
       a,
       b,
       case_sensitive,
     );
   }
 
-  _dart_cJSON_Compare _cJSON_Compare;
+  _dart_cJSON_Compare? _cJSON_Compare;
 
   void cJSON_Minify(
     ffi.Pointer<ffi.Int8> json,
   ) {
-    _cJSON_Minify ??= _dylib
-        .lookupFunction<_c_cJSON_Minify, _dart_cJSON_Minify>('cJSON_Minify');
-    return _cJSON_Minify(
+    return (_cJSON_Minify ??= _dylib
+        .lookupFunction<_c_cJSON_Minify, _dart_cJSON_Minify>('cJSON_Minify'))(
       json,
     );
   }
 
-  _dart_cJSON_Minify _cJSON_Minify;
+  _dart_cJSON_Minify? _cJSON_Minify;
 
   ffi.Pointer<cJSON> cJSON_AddNullToObject(
     ffi.Pointer<cJSON> object,
     ffi.Pointer<ffi.Int8> name,
   ) {
-    _cJSON_AddNullToObject ??= _dylib.lookupFunction<_c_cJSON_AddNullToObject,
-        _dart_cJSON_AddNullToObject>('cJSON_AddNullToObject');
-    return _cJSON_AddNullToObject(
+    return (_cJSON_AddNullToObject ??= _dylib.lookupFunction<
+        _c_cJSON_AddNullToObject,
+        _dart_cJSON_AddNullToObject>('cJSON_AddNullToObject'))(
       object,
       name,
     );
   }
 
-  _dart_cJSON_AddNullToObject _cJSON_AddNullToObject;
+  _dart_cJSON_AddNullToObject? _cJSON_AddNullToObject;
 
   ffi.Pointer<cJSON> cJSON_AddTrueToObject(
     ffi.Pointer<cJSON> object,
     ffi.Pointer<ffi.Int8> name,
   ) {
-    _cJSON_AddTrueToObject ??= _dylib.lookupFunction<_c_cJSON_AddTrueToObject,
-        _dart_cJSON_AddTrueToObject>('cJSON_AddTrueToObject');
-    return _cJSON_AddTrueToObject(
+    return (_cJSON_AddTrueToObject ??= _dylib.lookupFunction<
+        _c_cJSON_AddTrueToObject,
+        _dart_cJSON_AddTrueToObject>('cJSON_AddTrueToObject'))(
       object,
       name,
     );
   }
 
-  _dart_cJSON_AddTrueToObject _cJSON_AddTrueToObject;
+  _dart_cJSON_AddTrueToObject? _cJSON_AddTrueToObject;
 
   ffi.Pointer<cJSON> cJSON_AddFalseToObject(
     ffi.Pointer<cJSON> object,
     ffi.Pointer<ffi.Int8> name,
   ) {
-    _cJSON_AddFalseToObject ??= _dylib.lookupFunction<_c_cJSON_AddFalseToObject,
-        _dart_cJSON_AddFalseToObject>('cJSON_AddFalseToObject');
-    return _cJSON_AddFalseToObject(
+    return (_cJSON_AddFalseToObject ??= _dylib.lookupFunction<
+        _c_cJSON_AddFalseToObject,
+        _dart_cJSON_AddFalseToObject>('cJSON_AddFalseToObject'))(
       object,
       name,
     );
   }
 
-  _dart_cJSON_AddFalseToObject _cJSON_AddFalseToObject;
+  _dart_cJSON_AddFalseToObject? _cJSON_AddFalseToObject;
 
   ffi.Pointer<cJSON> cJSON_AddBoolToObject(
     ffi.Pointer<cJSON> object,
     ffi.Pointer<ffi.Int8> name,
     int boolean,
   ) {
-    _cJSON_AddBoolToObject ??= _dylib.lookupFunction<_c_cJSON_AddBoolToObject,
-        _dart_cJSON_AddBoolToObject>('cJSON_AddBoolToObject');
-    return _cJSON_AddBoolToObject(
+    return (_cJSON_AddBoolToObject ??= _dylib.lookupFunction<
+        _c_cJSON_AddBoolToObject,
+        _dart_cJSON_AddBoolToObject>('cJSON_AddBoolToObject'))(
       object,
       name,
       boolean,
     );
   }
 
-  _dart_cJSON_AddBoolToObject _cJSON_AddBoolToObject;
+  _dart_cJSON_AddBoolToObject? _cJSON_AddBoolToObject;
 
   ffi.Pointer<cJSON> cJSON_AddNumberToObject(
     ffi.Pointer<cJSON> object,
     ffi.Pointer<ffi.Int8> name,
     double number,
   ) {
-    _cJSON_AddNumberToObject ??= _dylib.lookupFunction<
+    return (_cJSON_AddNumberToObject ??= _dylib.lookupFunction<
         _c_cJSON_AddNumberToObject,
-        _dart_cJSON_AddNumberToObject>('cJSON_AddNumberToObject');
-    return _cJSON_AddNumberToObject(
+        _dart_cJSON_AddNumberToObject>('cJSON_AddNumberToObject'))(
       object,
       name,
       number,
     );
   }
 
-  _dart_cJSON_AddNumberToObject _cJSON_AddNumberToObject;
+  _dart_cJSON_AddNumberToObject? _cJSON_AddNumberToObject;
 
   ffi.Pointer<cJSON> cJSON_AddStringToObject(
     ffi.Pointer<cJSON> object,
     ffi.Pointer<ffi.Int8> name,
     ffi.Pointer<ffi.Int8> string,
   ) {
-    _cJSON_AddStringToObject ??= _dylib.lookupFunction<
+    return (_cJSON_AddStringToObject ??= _dylib.lookupFunction<
         _c_cJSON_AddStringToObject,
-        _dart_cJSON_AddStringToObject>('cJSON_AddStringToObject');
-    return _cJSON_AddStringToObject(
+        _dart_cJSON_AddStringToObject>('cJSON_AddStringToObject'))(
       object,
       name,
       string,
     );
   }
 
-  _dart_cJSON_AddStringToObject _cJSON_AddStringToObject;
+  _dart_cJSON_AddStringToObject? _cJSON_AddStringToObject;
 
   ffi.Pointer<cJSON> cJSON_AddRawToObject(
     ffi.Pointer<cJSON> object,
     ffi.Pointer<ffi.Int8> name,
     ffi.Pointer<ffi.Int8> raw,
   ) {
-    _cJSON_AddRawToObject ??= _dylib.lookupFunction<_c_cJSON_AddRawToObject,
-        _dart_cJSON_AddRawToObject>('cJSON_AddRawToObject');
-    return _cJSON_AddRawToObject(
+    return (_cJSON_AddRawToObject ??= _dylib.lookupFunction<
+        _c_cJSON_AddRawToObject,
+        _dart_cJSON_AddRawToObject>('cJSON_AddRawToObject'))(
       object,
       name,
       raw,
     );
   }
 
-  _dart_cJSON_AddRawToObject _cJSON_AddRawToObject;
+  _dart_cJSON_AddRawToObject? _cJSON_AddRawToObject;
 
   ffi.Pointer<cJSON> cJSON_AddObjectToObject(
     ffi.Pointer<cJSON> object,
     ffi.Pointer<ffi.Int8> name,
   ) {
-    _cJSON_AddObjectToObject ??= _dylib.lookupFunction<
+    return (_cJSON_AddObjectToObject ??= _dylib.lookupFunction<
         _c_cJSON_AddObjectToObject,
-        _dart_cJSON_AddObjectToObject>('cJSON_AddObjectToObject');
-    return _cJSON_AddObjectToObject(
+        _dart_cJSON_AddObjectToObject>('cJSON_AddObjectToObject'))(
       object,
       name,
     );
   }
 
-  _dart_cJSON_AddObjectToObject _cJSON_AddObjectToObject;
+  _dart_cJSON_AddObjectToObject? _cJSON_AddObjectToObject;
 
   ffi.Pointer<cJSON> cJSON_AddArrayToObject(
     ffi.Pointer<cJSON> object,
     ffi.Pointer<ffi.Int8> name,
   ) {
-    _cJSON_AddArrayToObject ??= _dylib.lookupFunction<_c_cJSON_AddArrayToObject,
-        _dart_cJSON_AddArrayToObject>('cJSON_AddArrayToObject');
-    return _cJSON_AddArrayToObject(
+    return (_cJSON_AddArrayToObject ??= _dylib.lookupFunction<
+        _c_cJSON_AddArrayToObject,
+        _dart_cJSON_AddArrayToObject>('cJSON_AddArrayToObject'))(
       object,
       name,
     );
   }
 
-  _dart_cJSON_AddArrayToObject _cJSON_AddArrayToObject;
+  _dart_cJSON_AddArrayToObject? _cJSON_AddArrayToObject;
 
   double cJSON_SetNumberHelper(
     ffi.Pointer<cJSON> object,
     double number,
   ) {
-    _cJSON_SetNumberHelper ??= _dylib.lookupFunction<_c_cJSON_SetNumberHelper,
-        _dart_cJSON_SetNumberHelper>('cJSON_SetNumberHelper');
-    return _cJSON_SetNumberHelper(
+    return (_cJSON_SetNumberHelper ??= _dylib.lookupFunction<
+        _c_cJSON_SetNumberHelper,
+        _dart_cJSON_SetNumberHelper>('cJSON_SetNumberHelper'))(
       object,
       number,
     );
   }
 
-  _dart_cJSON_SetNumberHelper _cJSON_SetNumberHelper;
+  _dart_cJSON_SetNumberHelper? _cJSON_SetNumberHelper;
 
   ffi.Pointer<ffi.Void> cJSON_malloc(
     int size,
   ) {
-    _cJSON_malloc ??= _dylib
-        .lookupFunction<_c_cJSON_malloc, _dart_cJSON_malloc>('cJSON_malloc');
-    return _cJSON_malloc(
+    return (_cJSON_malloc ??= _dylib
+        .lookupFunction<_c_cJSON_malloc, _dart_cJSON_malloc>('cJSON_malloc'))(
       size,
     );
   }
 
-  _dart_cJSON_malloc _cJSON_malloc;
+  _dart_cJSON_malloc? _cJSON_malloc;
 
   void cJSON_free(
     ffi.Pointer<ffi.Void> object,
   ) {
-    _cJSON_free ??=
-        _dylib.lookupFunction<_c_cJSON_free, _dart_cJSON_free>('cJSON_free');
-    return _cJSON_free(
+    return (_cJSON_free ??=
+        _dylib.lookupFunction<_c_cJSON_free, _dart_cJSON_free>('cJSON_free'))(
       object,
     );
   }
 
-  _dart_cJSON_free _cJSON_free;
+  _dart_cJSON_free? _cJSON_free;
 }
 
 class cJSON extends ffi.Struct {
-  ffi.Pointer<cJSON> next;
+  external ffi.Pointer<cJSON> next;
 
-  ffi.Pointer<cJSON> prev;
+  external ffi.Pointer<cJSON> prev;
 
-  ffi.Pointer<cJSON> child;
+  external ffi.Pointer<cJSON> child;
 
   @ffi.Int32()
-  int type;
+  external int type;
 
-  ffi.Pointer<ffi.Int8> valuestring;
+  external ffi.Pointer<ffi.Int8> valuestring;
 
   @ffi.Int32()
-  int valueint;
+  external int valueint;
 
   @ffi.Double()
-  double valuedouble;
+  external double valuedouble;
 
-  ffi.Pointer<ffi.Int8> string;
+  external ffi.Pointer<ffi.Int8> string;
 }
 
 class cJSON_Hooks extends ffi.Struct {
-  ffi.Pointer<ffi.NativeFunction<_typedefC_1>> malloc_fn;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_1>> malloc_fn;
 
-  ffi.Pointer<ffi.NativeFunction<_typedefC_2>> free_fn;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_2>> free_fn;
 }
 
 const int CJSON_VERSION_MAJOR = 1;
diff --git a/example/c_json/main.dart b/example/c_json/main.dart
index fa4bbbc..fbd6f69 100644
--- a/example/c_json/main.dart
+++ b/example/c_json/main.dart
@@ -60,20 +60,20 @@
   if (cjson.cJSON_IsObject(parsedcjson.cast()) == 1) {
     obj = <String, dynamic>{};
 
-    Pointer<cj.cJSON> ptr;
+    Pointer<cj.cJSON>? ptr;
     ptr = parsedcjson.ref.child;
     while (ptr != nullptr) {
-      final dynamic o = convertCJsonToDartObj(ptr);
+      final dynamic o = convertCJsonToDartObj(ptr!);
       _addToObj(obj, o, ptr.ref.string.cast());
       ptr = ptr.ref.next;
     }
   } else if (cjson.cJSON_IsArray(parsedcjson.cast()) == 1) {
     obj = <dynamic>[];
 
-    Pointer<cj.cJSON> ptr;
+    Pointer<cj.cJSON>? ptr;
     ptr = parsedcjson.ref.child;
     while (ptr != nullptr) {
-      final dynamic o = convertCJsonToDartObj(ptr);
+      final dynamic o = convertCJsonToDartObj(ptr!);
       _addToObj(obj, o);
       ptr = ptr.ref.next;
     }
@@ -88,9 +88,9 @@
   return obj;
 }
 
-void _addToObj(dynamic obj, dynamic o, [Pointer<Utf8> name]) {
+void _addToObj(dynamic obj, dynamic o, [Pointer<Utf8>? name]) {
   if (obj is Map<String, dynamic>) {
-    obj[Utf8.fromUtf8(name)] = o;
+    obj[Utf8.fromUtf8(name!)] = o;
   } else if (obj is List<dynamic>) {
     obj.add(o);
   }
diff --git a/example/c_json/pubspec.yaml b/example/c_json/pubspec.yaml
index 1b53211..dd99e63 100644
--- a/example/c_json/pubspec.yaml
+++ b/example/c_json/pubspec.yaml
@@ -5,10 +5,10 @@
 name: c_json_example
 
 environment:
-  sdk: '>=2.8.1 <3.0.0'
+  sdk: '>=2.12.0-29.10.beta <3.0.0'
 
 dependencies:
-  ffi: ^0.1.3
+  ffi: ^0.2.0-nullsafety.1
 
 dev_dependencies:
   ffigen:
diff --git a/example/libclang-example/generated_bindings.dart b/example/libclang-example/generated_bindings.dart
index 3b2fc26..d694962 100644
--- a/example/libclang-example/generated_bindings.dart
+++ b/example/libclang-example/generated_bindings.dart
@@ -20,14 +20,14 @@
   void clang_disposeStringSet(
     ffi.Pointer<CXStringSet> set_1,
   ) {
-    _clang_disposeStringSet ??= _dylib.lookupFunction<_c_clang_disposeStringSet,
-        _dart_clang_disposeStringSet>('clang_disposeStringSet');
-    return _clang_disposeStringSet(
+    return (_clang_disposeStringSet ??= _dylib.lookupFunction<
+        _c_clang_disposeStringSet,
+        _dart_clang_disposeStringSet>('clang_disposeStringSet'))(
       set_1,
     );
   }
 
-  _dart_clang_disposeStringSet _clang_disposeStringSet;
+  _dart_clang_disposeStringSet? _clang_disposeStringSet;
 
   /// Provides a shared context for creating translation units.
   ///
@@ -71,16 +71,15 @@
     int excludeDeclarationsFromPCH,
     int displayDiagnostics,
   ) {
-    _clang_createIndex ??=
+    return (_clang_createIndex ??=
         _dylib.lookupFunction<_c_clang_createIndex, _dart_clang_createIndex>(
-            'clang_createIndex');
-    return _clang_createIndex(
+            'clang_createIndex'))(
       excludeDeclarationsFromPCH,
       displayDiagnostics,
     );
   }
 
-  _dart_clang_createIndex _clang_createIndex;
+  _dart_clang_createIndex? _clang_createIndex;
 
   /// Destroy the given index.
   ///
@@ -89,15 +88,14 @@
   void clang_disposeIndex(
     ffi.Pointer<ffi.Void> index,
   ) {
-    _clang_disposeIndex ??=
+    return (_clang_disposeIndex ??=
         _dylib.lookupFunction<_c_clang_disposeIndex, _dart_clang_disposeIndex>(
-            'clang_disposeIndex');
-    return _clang_disposeIndex(
+            'clang_disposeIndex'))(
       index,
     );
   }
 
-  _dart_clang_disposeIndex _clang_disposeIndex;
+  _dart_clang_disposeIndex? _clang_disposeIndex;
 
   /// Sets general options associated with a CXIndex.
   ///
@@ -114,16 +112,16 @@
     ffi.Pointer<ffi.Void> arg0,
     int options,
   ) {
-    _clang_CXIndex_setGlobalOptions ??= _dylib.lookupFunction<
-        _c_clang_CXIndex_setGlobalOptions,
-        _dart_clang_CXIndex_setGlobalOptions>('clang_CXIndex_setGlobalOptions');
-    return _clang_CXIndex_setGlobalOptions(
+    return (_clang_CXIndex_setGlobalOptions ??= _dylib.lookupFunction<
+            _c_clang_CXIndex_setGlobalOptions,
+            _dart_clang_CXIndex_setGlobalOptions>(
+        'clang_CXIndex_setGlobalOptions'))(
       arg0,
       options,
     );
   }
 
-  _dart_clang_CXIndex_setGlobalOptions _clang_CXIndex_setGlobalOptions;
+  _dart_clang_CXIndex_setGlobalOptions? _clang_CXIndex_setGlobalOptions;
 
   /// Gets the general options associated with a CXIndex.
   ///
@@ -132,15 +130,15 @@
   int clang_CXIndex_getGlobalOptions(
     ffi.Pointer<ffi.Void> arg0,
   ) {
-    _clang_CXIndex_getGlobalOptions ??= _dylib.lookupFunction<
-        _c_clang_CXIndex_getGlobalOptions,
-        _dart_clang_CXIndex_getGlobalOptions>('clang_CXIndex_getGlobalOptions');
-    return _clang_CXIndex_getGlobalOptions(
+    return (_clang_CXIndex_getGlobalOptions ??= _dylib.lookupFunction<
+            _c_clang_CXIndex_getGlobalOptions,
+            _dart_clang_CXIndex_getGlobalOptions>(
+        'clang_CXIndex_getGlobalOptions'))(
       arg0,
     );
   }
 
-  _dart_clang_CXIndex_getGlobalOptions _clang_CXIndex_getGlobalOptions;
+  _dart_clang_CXIndex_getGlobalOptions? _clang_CXIndex_getGlobalOptions;
 
   /// Sets the invocation emission path option in a CXIndex.
   ///
@@ -151,32 +149,30 @@
     ffi.Pointer<ffi.Void> arg0,
     ffi.Pointer<ffi.Int8> Path,
   ) {
-    _clang_CXIndex_setInvocationEmissionPathOption ??= _dylib.lookupFunction<
-            _c_clang_CXIndex_setInvocationEmissionPathOption,
-            _dart_clang_CXIndex_setInvocationEmissionPathOption>(
-        'clang_CXIndex_setInvocationEmissionPathOption');
-    return _clang_CXIndex_setInvocationEmissionPathOption(
+    return (_clang_CXIndex_setInvocationEmissionPathOption ??=
+        _dylib.lookupFunction<_c_clang_CXIndex_setInvocationEmissionPathOption,
+                _dart_clang_CXIndex_setInvocationEmissionPathOption>(
+            'clang_CXIndex_setInvocationEmissionPathOption'))(
       arg0,
       Path,
     );
   }
 
-  _dart_clang_CXIndex_setInvocationEmissionPathOption
+  _dart_clang_CXIndex_setInvocationEmissionPathOption?
       _clang_CXIndex_setInvocationEmissionPathOption;
 
   /// Retrieve the last modification time of the given file.
   int clang_getFileTime(
     ffi.Pointer<ffi.Void> SFile,
   ) {
-    _clang_getFileTime ??=
+    return (_clang_getFileTime ??=
         _dylib.lookupFunction<_c_clang_getFileTime, _dart_clang_getFileTime>(
-            'clang_getFileTime');
-    return _clang_getFileTime(
+            'clang_getFileTime'))(
       SFile,
     );
   }
 
-  _dart_clang_getFileTime _clang_getFileTime;
+  _dart_clang_getFileTime? _clang_getFileTime;
 
   /// Retrieve the unique ID for the given \c file.
   ///
@@ -188,15 +184,15 @@
     ffi.Pointer<ffi.Void> file,
     ffi.Pointer<CXFileUniqueID> outID,
   ) {
-    _clang_getFileUniqueID ??= _dylib.lookupFunction<_c_clang_getFileUniqueID,
-        _dart_clang_getFileUniqueID>('clang_getFileUniqueID');
-    return _clang_getFileUniqueID(
+    return (_clang_getFileUniqueID ??= _dylib.lookupFunction<
+        _c_clang_getFileUniqueID,
+        _dart_clang_getFileUniqueID>('clang_getFileUniqueID'))(
       file,
       outID,
     );
   }
 
-  _dart_clang_getFileUniqueID _clang_getFileUniqueID;
+  _dart_clang_getFileUniqueID? _clang_getFileUniqueID;
 
   /// Determine whether the given header is guarded against
   /// multiple inclusions, either with the conventional
@@ -205,17 +201,16 @@
     ffi.Pointer<CXTranslationUnitImpl> tu,
     ffi.Pointer<ffi.Void> file,
   ) {
-    _clang_isFileMultipleIncludeGuarded ??= _dylib.lookupFunction<
+    return (_clang_isFileMultipleIncludeGuarded ??= _dylib.lookupFunction<
             _c_clang_isFileMultipleIncludeGuarded,
             _dart_clang_isFileMultipleIncludeGuarded>(
-        'clang_isFileMultipleIncludeGuarded');
-    return _clang_isFileMultipleIncludeGuarded(
+        'clang_isFileMultipleIncludeGuarded'))(
       tu,
       file,
     );
   }
 
-  _dart_clang_isFileMultipleIncludeGuarded _clang_isFileMultipleIncludeGuarded;
+  _dart_clang_isFileMultipleIncludeGuarded? _clang_isFileMultipleIncludeGuarded;
 
   /// Retrieve a file handle within the given translation unit.
   ///
@@ -229,15 +224,15 @@
     ffi.Pointer<CXTranslationUnitImpl> tu,
     ffi.Pointer<ffi.Int8> file_name,
   ) {
-    _clang_getFile ??= _dylib
-        .lookupFunction<_c_clang_getFile, _dart_clang_getFile>('clang_getFile');
-    return _clang_getFile(
+    return (_clang_getFile ??=
+        _dylib.lookupFunction<_c_clang_getFile, _dart_clang_getFile>(
+            'clang_getFile'))(
       tu,
       file_name,
     );
   }
 
-  _dart_clang_getFile _clang_getFile;
+  _dart_clang_getFile? _clang_getFile;
 
   /// Retrieve the buffer associated with the given file.
   ///
@@ -254,16 +249,16 @@
     ffi.Pointer<ffi.Void> file,
     ffi.Pointer<ffi.Uint64> size,
   ) {
-    _clang_getFileContents ??= _dylib.lookupFunction<_c_clang_getFileContents,
-        _dart_clang_getFileContents>('clang_getFileContents');
-    return _clang_getFileContents(
+    return (_clang_getFileContents ??= _dylib.lookupFunction<
+        _c_clang_getFileContents,
+        _dart_clang_getFileContents>('clang_getFileContents'))(
       tu,
       file,
       size,
     );
   }
 
-  _dart_clang_getFileContents _clang_getFileContents;
+  _dart_clang_getFileContents? _clang_getFileContents;
 
   /// Returns non-zero if the \c file1 and \c file2 point to the same file,
   /// or they are both NULL.
@@ -271,16 +266,15 @@
     ffi.Pointer<ffi.Void> file1,
     ffi.Pointer<ffi.Void> file2,
   ) {
-    _clang_File_isEqual ??=
+    return (_clang_File_isEqual ??=
         _dylib.lookupFunction<_c_clang_File_isEqual, _dart_clang_File_isEqual>(
-            'clang_File_isEqual');
-    return _clang_File_isEqual(
+            'clang_File_isEqual'))(
       file1,
       file2,
     );
   }
 
-  _dart_clang_File_isEqual _clang_File_isEqual;
+  _dart_clang_File_isEqual? _clang_File_isEqual;
 
   /// Retrieve all ranges that were skipped by the preprocessor.
   ///
@@ -290,15 +284,15 @@
     ffi.Pointer<CXTranslationUnitImpl> tu,
     ffi.Pointer<ffi.Void> file,
   ) {
-    _clang_getSkippedRanges ??= _dylib.lookupFunction<_c_clang_getSkippedRanges,
-        _dart_clang_getSkippedRanges>('clang_getSkippedRanges');
-    return _clang_getSkippedRanges(
+    return (_clang_getSkippedRanges ??= _dylib.lookupFunction<
+        _c_clang_getSkippedRanges,
+        _dart_clang_getSkippedRanges>('clang_getSkippedRanges'))(
       tu,
       file,
     );
   }
 
-  _dart_clang_getSkippedRanges _clang_getSkippedRanges;
+  _dart_clang_getSkippedRanges? _clang_getSkippedRanges;
 
   /// Retrieve all ranges from all files that were skipped by the
   /// preprocessor.
@@ -308,43 +302,40 @@
   ffi.Pointer<CXSourceRangeList> clang_getAllSkippedRanges(
     ffi.Pointer<CXTranslationUnitImpl> tu,
   ) {
-    _clang_getAllSkippedRanges ??= _dylib.lookupFunction<
+    return (_clang_getAllSkippedRanges ??= _dylib.lookupFunction<
         _c_clang_getAllSkippedRanges,
-        _dart_clang_getAllSkippedRanges>('clang_getAllSkippedRanges');
-    return _clang_getAllSkippedRanges(
+        _dart_clang_getAllSkippedRanges>('clang_getAllSkippedRanges'))(
       tu,
     );
   }
 
-  _dart_clang_getAllSkippedRanges _clang_getAllSkippedRanges;
+  _dart_clang_getAllSkippedRanges? _clang_getAllSkippedRanges;
 
   /// Destroy the given \c CXSourceRangeList.
   void clang_disposeSourceRangeList(
     ffi.Pointer<CXSourceRangeList> ranges,
   ) {
-    _clang_disposeSourceRangeList ??= _dylib.lookupFunction<
+    return (_clang_disposeSourceRangeList ??= _dylib.lookupFunction<
         _c_clang_disposeSourceRangeList,
-        _dart_clang_disposeSourceRangeList>('clang_disposeSourceRangeList');
-    return _clang_disposeSourceRangeList(
+        _dart_clang_disposeSourceRangeList>('clang_disposeSourceRangeList'))(
       ranges,
     );
   }
 
-  _dart_clang_disposeSourceRangeList _clang_disposeSourceRangeList;
+  _dart_clang_disposeSourceRangeList? _clang_disposeSourceRangeList;
 
   /// Determine the number of diagnostics in a CXDiagnosticSet.
   int clang_getNumDiagnosticsInSet(
     ffi.Pointer<ffi.Void> Diags,
   ) {
-    _clang_getNumDiagnosticsInSet ??= _dylib.lookupFunction<
+    return (_clang_getNumDiagnosticsInSet ??= _dylib.lookupFunction<
         _c_clang_getNumDiagnosticsInSet,
-        _dart_clang_getNumDiagnosticsInSet>('clang_getNumDiagnosticsInSet');
-    return _clang_getNumDiagnosticsInSet(
+        _dart_clang_getNumDiagnosticsInSet>('clang_getNumDiagnosticsInSet'))(
       Diags,
     );
   }
 
-  _dart_clang_getNumDiagnosticsInSet _clang_getNumDiagnosticsInSet;
+  _dart_clang_getNumDiagnosticsInSet? _clang_getNumDiagnosticsInSet;
 
   /// Retrieve a diagnostic associated with the given CXDiagnosticSet.
   ///
@@ -357,16 +348,15 @@
     ffi.Pointer<ffi.Void> Diags,
     int Index,
   ) {
-    _clang_getDiagnosticInSet ??= _dylib.lookupFunction<
+    return (_clang_getDiagnosticInSet ??= _dylib.lookupFunction<
         _c_clang_getDiagnosticInSet,
-        _dart_clang_getDiagnosticInSet>('clang_getDiagnosticInSet');
-    return _clang_getDiagnosticInSet(
+        _dart_clang_getDiagnosticInSet>('clang_getDiagnosticInSet'))(
       Diags,
       Index,
     );
   }
 
-  _dart_clang_getDiagnosticInSet _clang_getDiagnosticInSet;
+  _dart_clang_getDiagnosticInSet? _clang_getDiagnosticInSet;
 
   /// Deserialize a set of diagnostics from a Clang diagnostics bitcode
   /// file.
@@ -384,30 +374,29 @@
     ffi.Pointer<ffi.Int32> error,
     ffi.Pointer<CXString> errorString,
   ) {
-    _clang_loadDiagnostics ??= _dylib.lookupFunction<_c_clang_loadDiagnostics,
-        _dart_clang_loadDiagnostics>('clang_loadDiagnostics');
-    return _clang_loadDiagnostics(
+    return (_clang_loadDiagnostics ??= _dylib.lookupFunction<
+        _c_clang_loadDiagnostics,
+        _dart_clang_loadDiagnostics>('clang_loadDiagnostics'))(
       file,
       error,
       errorString,
     );
   }
 
-  _dart_clang_loadDiagnostics _clang_loadDiagnostics;
+  _dart_clang_loadDiagnostics? _clang_loadDiagnostics;
 
   /// Release a CXDiagnosticSet and all of its contained diagnostics.
   void clang_disposeDiagnosticSet(
     ffi.Pointer<ffi.Void> Diags,
   ) {
-    _clang_disposeDiagnosticSet ??= _dylib.lookupFunction<
+    return (_clang_disposeDiagnosticSet ??= _dylib.lookupFunction<
         _c_clang_disposeDiagnosticSet,
-        _dart_clang_disposeDiagnosticSet>('clang_disposeDiagnosticSet');
-    return _clang_disposeDiagnosticSet(
+        _dart_clang_disposeDiagnosticSet>('clang_disposeDiagnosticSet'))(
       Diags,
     );
   }
 
-  _dart_clang_disposeDiagnosticSet _clang_disposeDiagnosticSet;
+  _dart_clang_disposeDiagnosticSet? _clang_disposeDiagnosticSet;
 
   /// Retrieve the child diagnostics of a CXDiagnostic.
   ///
@@ -416,30 +405,28 @@
   ffi.Pointer<ffi.Void> clang_getChildDiagnostics(
     ffi.Pointer<ffi.Void> D,
   ) {
-    _clang_getChildDiagnostics ??= _dylib.lookupFunction<
+    return (_clang_getChildDiagnostics ??= _dylib.lookupFunction<
         _c_clang_getChildDiagnostics,
-        _dart_clang_getChildDiagnostics>('clang_getChildDiagnostics');
-    return _clang_getChildDiagnostics(
+        _dart_clang_getChildDiagnostics>('clang_getChildDiagnostics'))(
       D,
     );
   }
 
-  _dart_clang_getChildDiagnostics _clang_getChildDiagnostics;
+  _dart_clang_getChildDiagnostics? _clang_getChildDiagnostics;
 
   /// Determine the number of diagnostics produced for the given
   /// translation unit.
   int clang_getNumDiagnostics(
     ffi.Pointer<CXTranslationUnitImpl> Unit,
   ) {
-    _clang_getNumDiagnostics ??= _dylib.lookupFunction<
+    return (_clang_getNumDiagnostics ??= _dylib.lookupFunction<
         _c_clang_getNumDiagnostics,
-        _dart_clang_getNumDiagnostics>('clang_getNumDiagnostics');
-    return _clang_getNumDiagnostics(
+        _dart_clang_getNumDiagnostics>('clang_getNumDiagnostics'))(
       Unit,
     );
   }
 
-  _dart_clang_getNumDiagnostics _clang_getNumDiagnostics;
+  _dart_clang_getNumDiagnostics? _clang_getNumDiagnostics;
 
   /// Retrieve a diagnostic associated with the given translation unit.
   ///
@@ -452,15 +439,15 @@
     ffi.Pointer<CXTranslationUnitImpl> Unit,
     int Index,
   ) {
-    _clang_getDiagnostic ??= _dylib.lookupFunction<_c_clang_getDiagnostic,
-        _dart_clang_getDiagnostic>('clang_getDiagnostic');
-    return _clang_getDiagnostic(
+    return (_clang_getDiagnostic ??= _dylib.lookupFunction<
+        _c_clang_getDiagnostic,
+        _dart_clang_getDiagnostic>('clang_getDiagnostic'))(
       Unit,
       Index,
     );
   }
 
-  _dart_clang_getDiagnostic _clang_getDiagnostic;
+  _dart_clang_getDiagnostic? _clang_getDiagnostic;
 
   /// Retrieve the complete set of diagnostics associated with a
   /// translation unit.
@@ -469,29 +456,27 @@
   ffi.Pointer<ffi.Void> clang_getDiagnosticSetFromTU(
     ffi.Pointer<CXTranslationUnitImpl> Unit,
   ) {
-    _clang_getDiagnosticSetFromTU ??= _dylib.lookupFunction<
+    return (_clang_getDiagnosticSetFromTU ??= _dylib.lookupFunction<
         _c_clang_getDiagnosticSetFromTU,
-        _dart_clang_getDiagnosticSetFromTU>('clang_getDiagnosticSetFromTU');
-    return _clang_getDiagnosticSetFromTU(
+        _dart_clang_getDiagnosticSetFromTU>('clang_getDiagnosticSetFromTU'))(
       Unit,
     );
   }
 
-  _dart_clang_getDiagnosticSetFromTU _clang_getDiagnosticSetFromTU;
+  _dart_clang_getDiagnosticSetFromTU? _clang_getDiagnosticSetFromTU;
 
   /// Destroy a diagnostic.
   void clang_disposeDiagnostic(
     ffi.Pointer<ffi.Void> Diagnostic,
   ) {
-    _clang_disposeDiagnostic ??= _dylib.lookupFunction<
+    return (_clang_disposeDiagnostic ??= _dylib.lookupFunction<
         _c_clang_disposeDiagnostic,
-        _dart_clang_disposeDiagnostic>('clang_disposeDiagnostic');
-    return _clang_disposeDiagnostic(
+        _dart_clang_disposeDiagnostic>('clang_disposeDiagnostic'))(
       Diagnostic,
     );
   }
 
-  _dart_clang_disposeDiagnostic _clang_disposeDiagnostic;
+  _dart_clang_disposeDiagnostic? _clang_disposeDiagnostic;
 
   /// Retrieve the set of display options most similar to the
   /// default behavior of the clang compiler.
@@ -499,29 +484,27 @@
   /// \returns A set of display options suitable for use with \c
   /// clang_formatDiagnostic().
   int clang_defaultDiagnosticDisplayOptions() {
-    _clang_defaultDiagnosticDisplayOptions ??= _dylib.lookupFunction<
+    return (_clang_defaultDiagnosticDisplayOptions ??= _dylib.lookupFunction<
             _c_clang_defaultDiagnosticDisplayOptions,
             _dart_clang_defaultDiagnosticDisplayOptions>(
-        'clang_defaultDiagnosticDisplayOptions');
-    return _clang_defaultDiagnosticDisplayOptions();
+        'clang_defaultDiagnosticDisplayOptions'))();
   }
 
-  _dart_clang_defaultDiagnosticDisplayOptions
+  _dart_clang_defaultDiagnosticDisplayOptions?
       _clang_defaultDiagnosticDisplayOptions;
 
   /// Determine the severity of the given diagnostic.
   int clang_getDiagnosticSeverity(
     ffi.Pointer<ffi.Void> arg0,
   ) {
-    _clang_getDiagnosticSeverity ??= _dylib.lookupFunction<
+    return (_clang_getDiagnosticSeverity ??= _dylib.lookupFunction<
         _c_clang_getDiagnosticSeverity,
-        _dart_clang_getDiagnosticSeverity>('clang_getDiagnosticSeverity');
-    return _clang_getDiagnosticSeverity(
+        _dart_clang_getDiagnosticSeverity>('clang_getDiagnosticSeverity'))(
       arg0,
     );
   }
 
-  _dart_clang_getDiagnosticSeverity _clang_getDiagnosticSeverity;
+  _dart_clang_getDiagnosticSeverity? _clang_getDiagnosticSeverity;
 
   /// Retrieve the category number for this diagnostic.
   ///
@@ -534,45 +517,42 @@
   int clang_getDiagnosticCategory(
     ffi.Pointer<ffi.Void> arg0,
   ) {
-    _clang_getDiagnosticCategory ??= _dylib.lookupFunction<
+    return (_clang_getDiagnosticCategory ??= _dylib.lookupFunction<
         _c_clang_getDiagnosticCategory,
-        _dart_clang_getDiagnosticCategory>('clang_getDiagnosticCategory');
-    return _clang_getDiagnosticCategory(
+        _dart_clang_getDiagnosticCategory>('clang_getDiagnosticCategory'))(
       arg0,
     );
   }
 
-  _dart_clang_getDiagnosticCategory _clang_getDiagnosticCategory;
+  _dart_clang_getDiagnosticCategory? _clang_getDiagnosticCategory;
 
   /// Determine the number of source ranges associated with the given
   /// diagnostic.
   int clang_getDiagnosticNumRanges(
     ffi.Pointer<ffi.Void> arg0,
   ) {
-    _clang_getDiagnosticNumRanges ??= _dylib.lookupFunction<
+    return (_clang_getDiagnosticNumRanges ??= _dylib.lookupFunction<
         _c_clang_getDiagnosticNumRanges,
-        _dart_clang_getDiagnosticNumRanges>('clang_getDiagnosticNumRanges');
-    return _clang_getDiagnosticNumRanges(
+        _dart_clang_getDiagnosticNumRanges>('clang_getDiagnosticNumRanges'))(
       arg0,
     );
   }
 
-  _dart_clang_getDiagnosticNumRanges _clang_getDiagnosticNumRanges;
+  _dart_clang_getDiagnosticNumRanges? _clang_getDiagnosticNumRanges;
 
   /// Determine the number of fix-it hints associated with the
   /// given diagnostic.
   int clang_getDiagnosticNumFixIts(
     ffi.Pointer<ffi.Void> Diagnostic,
   ) {
-    _clang_getDiagnosticNumFixIts ??= _dylib.lookupFunction<
+    return (_clang_getDiagnosticNumFixIts ??= _dylib.lookupFunction<
         _c_clang_getDiagnosticNumFixIts,
-        _dart_clang_getDiagnosticNumFixIts>('clang_getDiagnosticNumFixIts');
-    return _clang_getDiagnosticNumFixIts(
+        _dart_clang_getDiagnosticNumFixIts>('clang_getDiagnosticNumFixIts'))(
       Diagnostic,
     );
   }
 
-  _dart_clang_getDiagnosticNumFixIts _clang_getDiagnosticNumFixIts;
+  _dart_clang_getDiagnosticNumFixIts? _clang_getDiagnosticNumFixIts;
 
   /// Return the CXTranslationUnit for a given source file and the provided
   /// command line arguments one would pass to the compiler.
@@ -620,11 +600,10 @@
     int num_unsaved_files,
     ffi.Pointer<CXUnsavedFile> unsaved_files,
   ) {
-    _clang_createTranslationUnitFromSourceFile ??= _dylib.lookupFunction<
-            _c_clang_createTranslationUnitFromSourceFile,
-            _dart_clang_createTranslationUnitFromSourceFile>(
-        'clang_createTranslationUnitFromSourceFile');
-    return _clang_createTranslationUnitFromSourceFile(
+    return (_clang_createTranslationUnitFromSourceFile ??=
+        _dylib.lookupFunction<_c_clang_createTranslationUnitFromSourceFile,
+                _dart_clang_createTranslationUnitFromSourceFile>(
+            'clang_createTranslationUnitFromSourceFile'))(
       CIdx,
       source_filename,
       num_clang_command_line_args,
@@ -634,7 +613,7 @@
     );
   }
 
-  _dart_clang_createTranslationUnitFromSourceFile
+  _dart_clang_createTranslationUnitFromSourceFile?
       _clang_createTranslationUnitFromSourceFile;
 
   /// Same as \c clang_createTranslationUnit2, but returns
@@ -645,16 +624,15 @@
     ffi.Pointer<ffi.Void> CIdx,
     ffi.Pointer<ffi.Int8> ast_filename,
   ) {
-    _clang_createTranslationUnit ??= _dylib.lookupFunction<
+    return (_clang_createTranslationUnit ??= _dylib.lookupFunction<
         _c_clang_createTranslationUnit,
-        _dart_clang_createTranslationUnit>('clang_createTranslationUnit');
-    return _clang_createTranslationUnit(
+        _dart_clang_createTranslationUnit>('clang_createTranslationUnit'))(
       CIdx,
       ast_filename,
     );
   }
 
-  _dart_clang_createTranslationUnit _clang_createTranslationUnit;
+  _dart_clang_createTranslationUnit? _clang_createTranslationUnit;
 
   /// Create a translation unit from an AST file (\c -emit-ast).
   ///
@@ -667,17 +645,16 @@
     ffi.Pointer<ffi.Int8> ast_filename,
     ffi.Pointer<ffi.Pointer<CXTranslationUnitImpl>> out_TU,
   ) {
-    _clang_createTranslationUnit2 ??= _dylib.lookupFunction<
+    return (_clang_createTranslationUnit2 ??= _dylib.lookupFunction<
         _c_clang_createTranslationUnit2,
-        _dart_clang_createTranslationUnit2>('clang_createTranslationUnit2');
-    return _clang_createTranslationUnit2(
+        _dart_clang_createTranslationUnit2>('clang_createTranslationUnit2'))(
       CIdx,
       ast_filename,
       out_TU,
     );
   }
 
-  _dart_clang_createTranslationUnit2 _clang_createTranslationUnit2;
+  _dart_clang_createTranslationUnit2? _clang_createTranslationUnit2;
 
   /// Returns the set of flags that is suitable for parsing a translation
   /// unit that is being edited.
@@ -690,14 +667,13 @@
   /// preamble) geared toward improving the performance of these routines. The
   /// set of optimizations enabled may change from one version to the next.
   int clang_defaultEditingTranslationUnitOptions() {
-    _clang_defaultEditingTranslationUnitOptions ??= _dylib.lookupFunction<
-            _c_clang_defaultEditingTranslationUnitOptions,
-            _dart_clang_defaultEditingTranslationUnitOptions>(
-        'clang_defaultEditingTranslationUnitOptions');
-    return _clang_defaultEditingTranslationUnitOptions();
+    return (_clang_defaultEditingTranslationUnitOptions ??=
+        _dylib.lookupFunction<_c_clang_defaultEditingTranslationUnitOptions,
+                _dart_clang_defaultEditingTranslationUnitOptions>(
+            'clang_defaultEditingTranslationUnitOptions'))();
   }
 
-  _dart_clang_defaultEditingTranslationUnitOptions
+  _dart_clang_defaultEditingTranslationUnitOptions?
       _clang_defaultEditingTranslationUnitOptions;
 
   /// Same as \c clang_parseTranslationUnit2, but returns
@@ -713,10 +689,9 @@
     int num_unsaved_files,
     int options,
   ) {
-    _clang_parseTranslationUnit ??= _dylib.lookupFunction<
+    return (_clang_parseTranslationUnit ??= _dylib.lookupFunction<
         _c_clang_parseTranslationUnit,
-        _dart_clang_parseTranslationUnit>('clang_parseTranslationUnit');
-    return _clang_parseTranslationUnit(
+        _dart_clang_parseTranslationUnit>('clang_parseTranslationUnit'))(
       CIdx,
       source_filename,
       command_line_args,
@@ -727,7 +702,7 @@
     );
   }
 
-  _dart_clang_parseTranslationUnit _clang_parseTranslationUnit;
+  _dart_clang_parseTranslationUnit? _clang_parseTranslationUnit;
 
   /// Parse the given source file and the translation unit corresponding
   /// to that file.
@@ -781,10 +756,9 @@
     int options,
     ffi.Pointer<ffi.Pointer<CXTranslationUnitImpl>> out_TU,
   ) {
-    _clang_parseTranslationUnit2 ??= _dylib.lookupFunction<
+    return (_clang_parseTranslationUnit2 ??= _dylib.lookupFunction<
         _c_clang_parseTranslationUnit2,
-        _dart_clang_parseTranslationUnit2>('clang_parseTranslationUnit2');
-    return _clang_parseTranslationUnit2(
+        _dart_clang_parseTranslationUnit2>('clang_parseTranslationUnit2'))(
       CIdx,
       source_filename,
       command_line_args,
@@ -796,7 +770,7 @@
     );
   }
 
-  _dart_clang_parseTranslationUnit2 _clang_parseTranslationUnit2;
+  _dart_clang_parseTranslationUnit2? _clang_parseTranslationUnit2;
 
   /// Same as clang_parseTranslationUnit2 but requires a full command line
   /// for \c command_line_args including argv[0]. This is useful if the standard
@@ -811,11 +785,10 @@
     int options,
     ffi.Pointer<ffi.Pointer<CXTranslationUnitImpl>> out_TU,
   ) {
-    _clang_parseTranslationUnit2FullArgv ??= _dylib.lookupFunction<
+    return (_clang_parseTranslationUnit2FullArgv ??= _dylib.lookupFunction<
             _c_clang_parseTranslationUnit2FullArgv,
             _dart_clang_parseTranslationUnit2FullArgv>(
-        'clang_parseTranslationUnit2FullArgv');
-    return _clang_parseTranslationUnit2FullArgv(
+        'clang_parseTranslationUnit2FullArgv'))(
       CIdx,
       source_filename,
       command_line_args,
@@ -827,7 +800,7 @@
     );
   }
 
-  _dart_clang_parseTranslationUnit2FullArgv
+  _dart_clang_parseTranslationUnit2FullArgv?
       _clang_parseTranslationUnit2FullArgv;
 
   /// Returns the set of flags that is suitable for saving a translation
@@ -840,15 +813,14 @@
   int clang_defaultSaveOptions(
     ffi.Pointer<CXTranslationUnitImpl> TU,
   ) {
-    _clang_defaultSaveOptions ??= _dylib.lookupFunction<
+    return (_clang_defaultSaveOptions ??= _dylib.lookupFunction<
         _c_clang_defaultSaveOptions,
-        _dart_clang_defaultSaveOptions>('clang_defaultSaveOptions');
-    return _clang_defaultSaveOptions(
+        _dart_clang_defaultSaveOptions>('clang_defaultSaveOptions'))(
       TU,
     );
   }
 
-  _dart_clang_defaultSaveOptions _clang_defaultSaveOptions;
+  _dart_clang_defaultSaveOptions? _clang_defaultSaveOptions;
 
   /// Saves a translation unit into a serialized representation of
   /// that translation unit on disk.
@@ -876,17 +848,16 @@
     ffi.Pointer<ffi.Int8> FileName,
     int options,
   ) {
-    _clang_saveTranslationUnit ??= _dylib.lookupFunction<
+    return (_clang_saveTranslationUnit ??= _dylib.lookupFunction<
         _c_clang_saveTranslationUnit,
-        _dart_clang_saveTranslationUnit>('clang_saveTranslationUnit');
-    return _clang_saveTranslationUnit(
+        _dart_clang_saveTranslationUnit>('clang_saveTranslationUnit'))(
       TU,
       FileName,
       options,
     );
   }
 
-  _dart_clang_saveTranslationUnit _clang_saveTranslationUnit;
+  _dart_clang_saveTranslationUnit? _clang_saveTranslationUnit;
 
   /// Suspend a translation unit in order to free memory associated with it.
   ///
@@ -896,29 +867,27 @@
   int clang_suspendTranslationUnit(
     ffi.Pointer<CXTranslationUnitImpl> arg0,
   ) {
-    _clang_suspendTranslationUnit ??= _dylib.lookupFunction<
+    return (_clang_suspendTranslationUnit ??= _dylib.lookupFunction<
         _c_clang_suspendTranslationUnit,
-        _dart_clang_suspendTranslationUnit>('clang_suspendTranslationUnit');
-    return _clang_suspendTranslationUnit(
+        _dart_clang_suspendTranslationUnit>('clang_suspendTranslationUnit'))(
       arg0,
     );
   }
 
-  _dart_clang_suspendTranslationUnit _clang_suspendTranslationUnit;
+  _dart_clang_suspendTranslationUnit? _clang_suspendTranslationUnit;
 
   /// Destroy the specified CXTranslationUnit object.
   void clang_disposeTranslationUnit(
     ffi.Pointer<CXTranslationUnitImpl> arg0,
   ) {
-    _clang_disposeTranslationUnit ??= _dylib.lookupFunction<
+    return (_clang_disposeTranslationUnit ??= _dylib.lookupFunction<
         _c_clang_disposeTranslationUnit,
-        _dart_clang_disposeTranslationUnit>('clang_disposeTranslationUnit');
-    return _clang_disposeTranslationUnit(
+        _dart_clang_disposeTranslationUnit>('clang_disposeTranslationUnit'))(
       arg0,
     );
   }
 
-  _dart_clang_disposeTranslationUnit _clang_disposeTranslationUnit;
+  _dart_clang_disposeTranslationUnit? _clang_disposeTranslationUnit;
 
   /// Returns the set of flags that is suitable for reparsing a translation
   /// unit.
@@ -931,15 +900,14 @@
   int clang_defaultReparseOptions(
     ffi.Pointer<CXTranslationUnitImpl> TU,
   ) {
-    _clang_defaultReparseOptions ??= _dylib.lookupFunction<
+    return (_clang_defaultReparseOptions ??= _dylib.lookupFunction<
         _c_clang_defaultReparseOptions,
-        _dart_clang_defaultReparseOptions>('clang_defaultReparseOptions');
-    return _clang_defaultReparseOptions(
+        _dart_clang_defaultReparseOptions>('clang_defaultReparseOptions'))(
       TU,
     );
   }
 
-  _dart_clang_defaultReparseOptions _clang_defaultReparseOptions;
+  _dart_clang_defaultReparseOptions? _clang_defaultReparseOptions;
 
   /// Reparse the source files that produced this translation unit.
   ///
@@ -984,10 +952,9 @@
     ffi.Pointer<CXUnsavedFile> unsaved_files,
     int options,
   ) {
-    _clang_reparseTranslationUnit ??= _dylib.lookupFunction<
+    return (_clang_reparseTranslationUnit ??= _dylib.lookupFunction<
         _c_clang_reparseTranslationUnit,
-        _dart_clang_reparseTranslationUnit>('clang_reparseTranslationUnit');
-    return _clang_reparseTranslationUnit(
+        _dart_clang_reparseTranslationUnit>('clang_reparseTranslationUnit'))(
       TU,
       num_unsaved_files,
       unsaved_files,
@@ -995,22 +962,21 @@
     );
   }
 
-  _dart_clang_reparseTranslationUnit _clang_reparseTranslationUnit;
+  _dart_clang_reparseTranslationUnit? _clang_reparseTranslationUnit;
 
   /// Returns the human-readable null-terminated C string that represents
   /// the name of the memory category.  This string should never be freed.
   ffi.Pointer<ffi.Int8> clang_getTUResourceUsageName(
     int kind,
   ) {
-    _clang_getTUResourceUsageName ??= _dylib.lookupFunction<
+    return (_clang_getTUResourceUsageName ??= _dylib.lookupFunction<
         _c_clang_getTUResourceUsageName,
-        _dart_clang_getTUResourceUsageName>('clang_getTUResourceUsageName');
-    return _clang_getTUResourceUsageName(
+        _dart_clang_getTUResourceUsageName>('clang_getTUResourceUsageName'))(
       kind,
     );
   }
 
-  _dart_clang_getTUResourceUsageName _clang_getTUResourceUsageName;
+  _dart_clang_getTUResourceUsageName? _clang_getTUResourceUsageName;
 
   /// Get target information for this translation unit.
   ///
@@ -1018,30 +984,28 @@
   ffi.Pointer<CXTargetInfoImpl> clang_getTranslationUnitTargetInfo(
     ffi.Pointer<CXTranslationUnitImpl> CTUnit,
   ) {
-    _clang_getTranslationUnitTargetInfo ??= _dylib.lookupFunction<
+    return (_clang_getTranslationUnitTargetInfo ??= _dylib.lookupFunction<
             _c_clang_getTranslationUnitTargetInfo,
             _dart_clang_getTranslationUnitTargetInfo>(
-        'clang_getTranslationUnitTargetInfo');
-    return _clang_getTranslationUnitTargetInfo(
+        'clang_getTranslationUnitTargetInfo'))(
       CTUnit,
     );
   }
 
-  _dart_clang_getTranslationUnitTargetInfo _clang_getTranslationUnitTargetInfo;
+  _dart_clang_getTranslationUnitTargetInfo? _clang_getTranslationUnitTargetInfo;
 
   /// Destroy the CXTargetInfo object.
   void clang_TargetInfo_dispose(
     ffi.Pointer<CXTargetInfoImpl> Info,
   ) {
-    _clang_TargetInfo_dispose ??= _dylib.lookupFunction<
+    return (_clang_TargetInfo_dispose ??= _dylib.lookupFunction<
         _c_clang_TargetInfo_dispose,
-        _dart_clang_TargetInfo_dispose>('clang_TargetInfo_dispose');
-    return _clang_TargetInfo_dispose(
+        _dart_clang_TargetInfo_dispose>('clang_TargetInfo_dispose'))(
       Info,
     );
   }
 
-  _dart_clang_TargetInfo_dispose _clang_TargetInfo_dispose;
+  _dart_clang_TargetInfo_dispose? _clang_TargetInfo_dispose;
 
   /// Get the pointer width of the target in bits.
   ///
@@ -1049,29 +1013,28 @@
   int clang_TargetInfo_getPointerWidth(
     ffi.Pointer<CXTargetInfoImpl> Info,
   ) {
-    _clang_TargetInfo_getPointerWidth ??= _dylib.lookupFunction<
+    return (_clang_TargetInfo_getPointerWidth ??= _dylib.lookupFunction<
             _c_clang_TargetInfo_getPointerWidth,
             _dart_clang_TargetInfo_getPointerWidth>(
-        'clang_TargetInfo_getPointerWidth');
-    return _clang_TargetInfo_getPointerWidth(
+        'clang_TargetInfo_getPointerWidth'))(
       Info,
     );
   }
 
-  _dart_clang_TargetInfo_getPointerWidth _clang_TargetInfo_getPointerWidth;
+  _dart_clang_TargetInfo_getPointerWidth? _clang_TargetInfo_getPointerWidth;
 
   /// Determine whether the given cursor kind represents a declaration.
   int clang_isDeclaration(
     int arg0,
   ) {
-    _clang_isDeclaration ??= _dylib.lookupFunction<_c_clang_isDeclaration,
-        _dart_clang_isDeclaration>('clang_isDeclaration');
-    return _clang_isDeclaration(
+    return (_clang_isDeclaration ??= _dylib.lookupFunction<
+        _c_clang_isDeclaration,
+        _dart_clang_isDeclaration>('clang_isDeclaration'))(
       arg0,
     );
   }
 
-  _dart_clang_isDeclaration _clang_isDeclaration;
+  _dart_clang_isDeclaration? _clang_isDeclaration;
 
   /// Determine whether the given cursor kind represents a simple
   /// reference.
@@ -1082,188 +1045,177 @@
   int clang_isReference(
     int arg0,
   ) {
-    _clang_isReference ??=
+    return (_clang_isReference ??=
         _dylib.lookupFunction<_c_clang_isReference, _dart_clang_isReference>(
-            'clang_isReference');
-    return _clang_isReference(
+            'clang_isReference'))(
       arg0,
     );
   }
 
-  _dart_clang_isReference _clang_isReference;
+  _dart_clang_isReference? _clang_isReference;
 
   /// Determine whether the given cursor kind represents an expression.
   int clang_isExpression(
     int arg0,
   ) {
-    _clang_isExpression ??=
+    return (_clang_isExpression ??=
         _dylib.lookupFunction<_c_clang_isExpression, _dart_clang_isExpression>(
-            'clang_isExpression');
-    return _clang_isExpression(
+            'clang_isExpression'))(
       arg0,
     );
   }
 
-  _dart_clang_isExpression _clang_isExpression;
+  _dart_clang_isExpression? _clang_isExpression;
 
   /// Determine whether the given cursor kind represents a statement.
   int clang_isStatement(
     int arg0,
   ) {
-    _clang_isStatement ??=
+    return (_clang_isStatement ??=
         _dylib.lookupFunction<_c_clang_isStatement, _dart_clang_isStatement>(
-            'clang_isStatement');
-    return _clang_isStatement(
+            'clang_isStatement'))(
       arg0,
     );
   }
 
-  _dart_clang_isStatement _clang_isStatement;
+  _dart_clang_isStatement? _clang_isStatement;
 
   /// Determine whether the given cursor kind represents an attribute.
   int clang_isAttribute(
     int arg0,
   ) {
-    _clang_isAttribute ??=
+    return (_clang_isAttribute ??=
         _dylib.lookupFunction<_c_clang_isAttribute, _dart_clang_isAttribute>(
-            'clang_isAttribute');
-    return _clang_isAttribute(
+            'clang_isAttribute'))(
       arg0,
     );
   }
 
-  _dart_clang_isAttribute _clang_isAttribute;
+  _dart_clang_isAttribute? _clang_isAttribute;
 
   /// Determine whether the given cursor kind represents an invalid
   /// cursor.
   int clang_isInvalid(
     int arg0,
   ) {
-    _clang_isInvalid ??=
+    return (_clang_isInvalid ??=
         _dylib.lookupFunction<_c_clang_isInvalid, _dart_clang_isInvalid>(
-            'clang_isInvalid');
-    return _clang_isInvalid(
+            'clang_isInvalid'))(
       arg0,
     );
   }
 
-  _dart_clang_isInvalid _clang_isInvalid;
+  _dart_clang_isInvalid? _clang_isInvalid;
 
   /// Determine whether the given cursor kind represents a translation
   /// unit.
   int clang_isTranslationUnit(
     int arg0,
   ) {
-    _clang_isTranslationUnit ??= _dylib.lookupFunction<
+    return (_clang_isTranslationUnit ??= _dylib.lookupFunction<
         _c_clang_isTranslationUnit,
-        _dart_clang_isTranslationUnit>('clang_isTranslationUnit');
-    return _clang_isTranslationUnit(
+        _dart_clang_isTranslationUnit>('clang_isTranslationUnit'))(
       arg0,
     );
   }
 
-  _dart_clang_isTranslationUnit _clang_isTranslationUnit;
+  _dart_clang_isTranslationUnit? _clang_isTranslationUnit;
 
   /// Determine whether the given cursor represents a preprocessing
   /// element, such as a preprocessor directive or macro instantiation.
   int clang_isPreprocessing(
     int arg0,
   ) {
-    _clang_isPreprocessing ??= _dylib.lookupFunction<_c_clang_isPreprocessing,
-        _dart_clang_isPreprocessing>('clang_isPreprocessing');
-    return _clang_isPreprocessing(
+    return (_clang_isPreprocessing ??= _dylib.lookupFunction<
+        _c_clang_isPreprocessing,
+        _dart_clang_isPreprocessing>('clang_isPreprocessing'))(
       arg0,
     );
   }
 
-  _dart_clang_isPreprocessing _clang_isPreprocessing;
+  _dart_clang_isPreprocessing? _clang_isPreprocessing;
 
   /// Determine whether the given cursor represents a currently
   /// unexposed piece of the AST (e.g., CXCursor_UnexposedStmt).
   int clang_isUnexposed(
     int arg0,
   ) {
-    _clang_isUnexposed ??=
+    return (_clang_isUnexposed ??=
         _dylib.lookupFunction<_c_clang_isUnexposed, _dart_clang_isUnexposed>(
-            'clang_isUnexposed');
-    return _clang_isUnexposed(
+            'clang_isUnexposed'))(
       arg0,
     );
   }
 
-  _dart_clang_isUnexposed _clang_isUnexposed;
+  _dart_clang_isUnexposed? _clang_isUnexposed;
 
   /// Free the memory associated with a \c CXPlatformAvailability structure.
   void clang_disposeCXPlatformAvailability(
     ffi.Pointer<CXPlatformAvailability> availability,
   ) {
-    _clang_disposeCXPlatformAvailability ??= _dylib.lookupFunction<
+    return (_clang_disposeCXPlatformAvailability ??= _dylib.lookupFunction<
             _c_clang_disposeCXPlatformAvailability,
             _dart_clang_disposeCXPlatformAvailability>(
-        'clang_disposeCXPlatformAvailability');
-    return _clang_disposeCXPlatformAvailability(
+        'clang_disposeCXPlatformAvailability'))(
       availability,
     );
   }
 
-  _dart_clang_disposeCXPlatformAvailability
+  _dart_clang_disposeCXPlatformAvailability?
       _clang_disposeCXPlatformAvailability;
 
   /// Creates an empty CXCursorSet.
   ffi.Pointer<CXCursorSetImpl> clang_createCXCursorSet() {
-    _clang_createCXCursorSet ??= _dylib.lookupFunction<
+    return (_clang_createCXCursorSet ??= _dylib.lookupFunction<
         _c_clang_createCXCursorSet,
-        _dart_clang_createCXCursorSet>('clang_createCXCursorSet');
-    return _clang_createCXCursorSet();
+        _dart_clang_createCXCursorSet>('clang_createCXCursorSet'))();
   }
 
-  _dart_clang_createCXCursorSet _clang_createCXCursorSet;
+  _dart_clang_createCXCursorSet? _clang_createCXCursorSet;
 
   /// Disposes a CXCursorSet and releases its associated memory.
   void clang_disposeCXCursorSet(
     ffi.Pointer<CXCursorSetImpl> cset,
   ) {
-    _clang_disposeCXCursorSet ??= _dylib.lookupFunction<
+    return (_clang_disposeCXCursorSet ??= _dylib.lookupFunction<
         _c_clang_disposeCXCursorSet,
-        _dart_clang_disposeCXCursorSet>('clang_disposeCXCursorSet');
-    return _clang_disposeCXCursorSet(
+        _dart_clang_disposeCXCursorSet>('clang_disposeCXCursorSet'))(
       cset,
     );
   }
 
-  _dart_clang_disposeCXCursorSet _clang_disposeCXCursorSet;
+  _dart_clang_disposeCXCursorSet? _clang_disposeCXCursorSet;
 
   /// Free the set of overridden cursors returned by \c
   /// clang_getOverriddenCursors().
   void clang_disposeOverriddenCursors(
     ffi.Pointer<CXCursor> overridden,
   ) {
-    _clang_disposeOverriddenCursors ??= _dylib.lookupFunction<
-        _c_clang_disposeOverriddenCursors,
-        _dart_clang_disposeOverriddenCursors>('clang_disposeOverriddenCursors');
-    return _clang_disposeOverriddenCursors(
+    return (_clang_disposeOverriddenCursors ??= _dylib.lookupFunction<
+            _c_clang_disposeOverriddenCursors,
+            _dart_clang_disposeOverriddenCursors>(
+        'clang_disposeOverriddenCursors'))(
       overridden,
     );
   }
 
-  _dart_clang_disposeOverriddenCursors _clang_disposeOverriddenCursors;
+  _dart_clang_disposeOverriddenCursors? _clang_disposeOverriddenCursors;
 
   /// Get a property value for the given printing policy.
   int clang_PrintingPolicy_getProperty(
     ffi.Pointer<ffi.Void> Policy,
     int Property,
   ) {
-    _clang_PrintingPolicy_getProperty ??= _dylib.lookupFunction<
+    return (_clang_PrintingPolicy_getProperty ??= _dylib.lookupFunction<
             _c_clang_PrintingPolicy_getProperty,
             _dart_clang_PrintingPolicy_getProperty>(
-        'clang_PrintingPolicy_getProperty');
-    return _clang_PrintingPolicy_getProperty(
+        'clang_PrintingPolicy_getProperty'))(
       Policy,
       Property,
     );
   }
 
-  _dart_clang_PrintingPolicy_getProperty _clang_PrintingPolicy_getProperty;
+  _dart_clang_PrintingPolicy_getProperty? _clang_PrintingPolicy_getProperty;
 
   /// Set a property value for the given printing policy.
   void clang_PrintingPolicy_setProperty(
@@ -1271,32 +1223,30 @@
     int Property,
     int Value,
   ) {
-    _clang_PrintingPolicy_setProperty ??= _dylib.lookupFunction<
+    return (_clang_PrintingPolicy_setProperty ??= _dylib.lookupFunction<
             _c_clang_PrintingPolicy_setProperty,
             _dart_clang_PrintingPolicy_setProperty>(
-        'clang_PrintingPolicy_setProperty');
-    return _clang_PrintingPolicy_setProperty(
+        'clang_PrintingPolicy_setProperty'))(
       Policy,
       Property,
       Value,
     );
   }
 
-  _dart_clang_PrintingPolicy_setProperty _clang_PrintingPolicy_setProperty;
+  _dart_clang_PrintingPolicy_setProperty? _clang_PrintingPolicy_setProperty;
 
   /// Release a printing policy.
   void clang_PrintingPolicy_dispose(
     ffi.Pointer<ffi.Void> Policy,
   ) {
-    _clang_PrintingPolicy_dispose ??= _dylib.lookupFunction<
+    return (_clang_PrintingPolicy_dispose ??= _dylib.lookupFunction<
         _c_clang_PrintingPolicy_dispose,
-        _dart_clang_PrintingPolicy_dispose>('clang_PrintingPolicy_dispose');
-    return _clang_PrintingPolicy_dispose(
+        _dart_clang_PrintingPolicy_dispose>('clang_PrintingPolicy_dispose'))(
       Policy,
     );
   }
 
-  _dart_clang_PrintingPolicy_dispose _clang_PrintingPolicy_dispose;
+  _dart_clang_PrintingPolicy_dispose? _clang_PrintingPolicy_dispose;
 
   /// Given a CXFile header file, return the module that contains it, if one
   /// exists.
@@ -1304,15 +1254,15 @@
     ffi.Pointer<CXTranslationUnitImpl> arg0,
     ffi.Pointer<ffi.Void> arg1,
   ) {
-    _clang_getModuleForFile ??= _dylib.lookupFunction<_c_clang_getModuleForFile,
-        _dart_clang_getModuleForFile>('clang_getModuleForFile');
-    return _clang_getModuleForFile(
+    return (_clang_getModuleForFile ??= _dylib.lookupFunction<
+        _c_clang_getModuleForFile,
+        _dart_clang_getModuleForFile>('clang_getModuleForFile'))(
       arg0,
       arg1,
     );
   }
 
-  _dart_clang_getModuleForFile _clang_getModuleForFile;
+  _dart_clang_getModuleForFile? _clang_getModuleForFile;
 
   /// \param Module a module object.
   ///
@@ -1320,15 +1270,14 @@
   ffi.Pointer<ffi.Void> clang_Module_getASTFile(
     ffi.Pointer<ffi.Void> Module,
   ) {
-    _clang_Module_getASTFile ??= _dylib.lookupFunction<
+    return (_clang_Module_getASTFile ??= _dylib.lookupFunction<
         _c_clang_Module_getASTFile,
-        _dart_clang_Module_getASTFile>('clang_Module_getASTFile');
-    return _clang_Module_getASTFile(
+        _dart_clang_Module_getASTFile>('clang_Module_getASTFile'))(
       Module,
     );
   }
 
-  _dart_clang_Module_getASTFile _clang_Module_getASTFile;
+  _dart_clang_Module_getASTFile? _clang_Module_getASTFile;
 
   /// \param Module a module object.
   ///
@@ -1337,14 +1286,14 @@
   ffi.Pointer<ffi.Void> clang_Module_getParent(
     ffi.Pointer<ffi.Void> Module,
   ) {
-    _clang_Module_getParent ??= _dylib.lookupFunction<_c_clang_Module_getParent,
-        _dart_clang_Module_getParent>('clang_Module_getParent');
-    return _clang_Module_getParent(
+    return (_clang_Module_getParent ??= _dylib.lookupFunction<
+        _c_clang_Module_getParent,
+        _dart_clang_Module_getParent>('clang_Module_getParent'))(
       Module,
     );
   }
 
-  _dart_clang_Module_getParent _clang_Module_getParent;
+  _dart_clang_Module_getParent? _clang_Module_getParent;
 
   /// \param Module a module object.
   ///
@@ -1352,14 +1301,14 @@
   int clang_Module_isSystem(
     ffi.Pointer<ffi.Void> Module,
   ) {
-    _clang_Module_isSystem ??= _dylib.lookupFunction<_c_clang_Module_isSystem,
-        _dart_clang_Module_isSystem>('clang_Module_isSystem');
-    return _clang_Module_isSystem(
+    return (_clang_Module_isSystem ??= _dylib.lookupFunction<
+        _c_clang_Module_isSystem,
+        _dart_clang_Module_isSystem>('clang_Module_isSystem'))(
       Module,
     );
   }
 
-  _dart_clang_Module_isSystem _clang_Module_isSystem;
+  _dart_clang_Module_isSystem? _clang_Module_isSystem;
 
   /// \param Module a module object.
   ///
@@ -1368,17 +1317,16 @@
     ffi.Pointer<CXTranslationUnitImpl> arg0,
     ffi.Pointer<ffi.Void> Module,
   ) {
-    _clang_Module_getNumTopLevelHeaders ??= _dylib.lookupFunction<
+    return (_clang_Module_getNumTopLevelHeaders ??= _dylib.lookupFunction<
             _c_clang_Module_getNumTopLevelHeaders,
             _dart_clang_Module_getNumTopLevelHeaders>(
-        'clang_Module_getNumTopLevelHeaders');
-    return _clang_Module_getNumTopLevelHeaders(
+        'clang_Module_getNumTopLevelHeaders'))(
       arg0,
       Module,
     );
   }
 
-  _dart_clang_Module_getNumTopLevelHeaders _clang_Module_getNumTopLevelHeaders;
+  _dart_clang_Module_getNumTopLevelHeaders? _clang_Module_getNumTopLevelHeaders;
 
   /// \param Module a module object.
   ///
@@ -1390,17 +1338,17 @@
     ffi.Pointer<ffi.Void> Module,
     int Index,
   ) {
-    _clang_Module_getTopLevelHeader ??= _dylib.lookupFunction<
-        _c_clang_Module_getTopLevelHeader,
-        _dart_clang_Module_getTopLevelHeader>('clang_Module_getTopLevelHeader');
-    return _clang_Module_getTopLevelHeader(
+    return (_clang_Module_getTopLevelHeader ??= _dylib.lookupFunction<
+            _c_clang_Module_getTopLevelHeader,
+            _dart_clang_Module_getTopLevelHeader>(
+        'clang_Module_getTopLevelHeader'))(
       arg0,
       Module,
       Index,
     );
   }
 
-  _dart_clang_Module_getTopLevelHeader _clang_Module_getTopLevelHeader;
+  _dart_clang_Module_getTopLevelHeader? _clang_Module_getTopLevelHeader;
 
   /// Annotate the given set of tokens by providing cursors for each token
   /// that can be mapped to a specific entity within the abstract syntax tree.
@@ -1436,9 +1384,9 @@
     int NumTokens,
     ffi.Pointer<CXCursor> Cursors,
   ) {
-    _clang_annotateTokens ??= _dylib.lookupFunction<_c_clang_annotateTokens,
-        _dart_clang_annotateTokens>('clang_annotateTokens');
-    return _clang_annotateTokens(
+    return (_clang_annotateTokens ??= _dylib.lookupFunction<
+        _c_clang_annotateTokens,
+        _dart_clang_annotateTokens>('clang_annotateTokens'))(
       TU,
       Tokens,
       NumTokens,
@@ -1446,7 +1394,7 @@
     );
   }
 
-  _dart_clang_annotateTokens _clang_annotateTokens;
+  _dart_clang_annotateTokens? _clang_annotateTokens;
 
   /// Free the given set of tokens.
   void clang_disposeTokens(
@@ -1454,41 +1402,40 @@
     ffi.Pointer<CXToken> Tokens,
     int NumTokens,
   ) {
-    _clang_disposeTokens ??= _dylib.lookupFunction<_c_clang_disposeTokens,
-        _dart_clang_disposeTokens>('clang_disposeTokens');
-    return _clang_disposeTokens(
+    return (_clang_disposeTokens ??= _dylib.lookupFunction<
+        _c_clang_disposeTokens,
+        _dart_clang_disposeTokens>('clang_disposeTokens'))(
       TU,
       Tokens,
       NumTokens,
     );
   }
 
-  _dart_clang_disposeTokens _clang_disposeTokens;
+  _dart_clang_disposeTokens? _clang_disposeTokens;
 
   void clang_enableStackTraces() {
-    _clang_enableStackTraces ??= _dylib.lookupFunction<
+    return (_clang_enableStackTraces ??= _dylib.lookupFunction<
         _c_clang_enableStackTraces,
-        _dart_clang_enableStackTraces>('clang_enableStackTraces');
-    return _clang_enableStackTraces();
+        _dart_clang_enableStackTraces>('clang_enableStackTraces'))();
   }
 
-  _dart_clang_enableStackTraces _clang_enableStackTraces;
+  _dart_clang_enableStackTraces? _clang_enableStackTraces;
 
   void clang_executeOnThread(
     ffi.Pointer<ffi.NativeFunction<_typedefC_1>> fn,
     ffi.Pointer<ffi.Void> user_data,
     int stack_size,
   ) {
-    _clang_executeOnThread ??= _dylib.lookupFunction<_c_clang_executeOnThread,
-        _dart_clang_executeOnThread>('clang_executeOnThread');
-    return _clang_executeOnThread(
+    return (_clang_executeOnThread ??= _dylib.lookupFunction<
+        _c_clang_executeOnThread,
+        _dart_clang_executeOnThread>('clang_executeOnThread'))(
       fn,
       user_data,
       stack_size,
     );
   }
 
-  _dart_clang_executeOnThread _clang_executeOnThread;
+  _dart_clang_executeOnThread? _clang_executeOnThread;
 
   /// Determine the kind of a particular chunk within a completion string.
   ///
@@ -1501,16 +1448,15 @@
     ffi.Pointer<ffi.Void> completion_string,
     int chunk_number,
   ) {
-    _clang_getCompletionChunkKind ??= _dylib.lookupFunction<
+    return (_clang_getCompletionChunkKind ??= _dylib.lookupFunction<
         _c_clang_getCompletionChunkKind,
-        _dart_clang_getCompletionChunkKind>('clang_getCompletionChunkKind');
-    return _clang_getCompletionChunkKind(
+        _dart_clang_getCompletionChunkKind>('clang_getCompletionChunkKind'))(
       completion_string,
       chunk_number,
     );
   }
 
-  _dart_clang_getCompletionChunkKind _clang_getCompletionChunkKind;
+  _dart_clang_getCompletionChunkKind? _clang_getCompletionChunkKind;
 
   /// Retrieve the completion string associated with a particular chunk
   /// within a completion string.
@@ -1525,32 +1471,30 @@
     ffi.Pointer<ffi.Void> completion_string,
     int chunk_number,
   ) {
-    _clang_getCompletionChunkCompletionString ??= _dylib.lookupFunction<
+    return (_clang_getCompletionChunkCompletionString ??= _dylib.lookupFunction<
             _c_clang_getCompletionChunkCompletionString,
             _dart_clang_getCompletionChunkCompletionString>(
-        'clang_getCompletionChunkCompletionString');
-    return _clang_getCompletionChunkCompletionString(
+        'clang_getCompletionChunkCompletionString'))(
       completion_string,
       chunk_number,
     );
   }
 
-  _dart_clang_getCompletionChunkCompletionString
+  _dart_clang_getCompletionChunkCompletionString?
       _clang_getCompletionChunkCompletionString;
 
   /// Retrieve the number of chunks in the given code-completion string.
   int clang_getNumCompletionChunks(
     ffi.Pointer<ffi.Void> completion_string,
   ) {
-    _clang_getNumCompletionChunks ??= _dylib.lookupFunction<
+    return (_clang_getNumCompletionChunks ??= _dylib.lookupFunction<
         _c_clang_getNumCompletionChunks,
-        _dart_clang_getNumCompletionChunks>('clang_getNumCompletionChunks');
-    return _clang_getNumCompletionChunks(
+        _dart_clang_getNumCompletionChunks>('clang_getNumCompletionChunks'))(
       completion_string,
     );
   }
 
-  _dart_clang_getNumCompletionChunks _clang_getNumCompletionChunks;
+  _dart_clang_getNumCompletionChunks? _clang_getNumCompletionChunks;
 
   /// Determine the priority of this code completion.
   ///
@@ -1565,15 +1509,14 @@
   int clang_getCompletionPriority(
     ffi.Pointer<ffi.Void> completion_string,
   ) {
-    _clang_getCompletionPriority ??= _dylib.lookupFunction<
+    return (_clang_getCompletionPriority ??= _dylib.lookupFunction<
         _c_clang_getCompletionPriority,
-        _dart_clang_getCompletionPriority>('clang_getCompletionPriority');
-    return _clang_getCompletionPriority(
+        _dart_clang_getCompletionPriority>('clang_getCompletionPriority'))(
       completion_string,
     );
   }
 
-  _dart_clang_getCompletionPriority _clang_getCompletionPriority;
+  _dart_clang_getCompletionPriority? _clang_getCompletionPriority;
 
   /// Determine the availability of the entity that this code-completion
   /// string refers to.
@@ -1584,16 +1527,15 @@
   int clang_getCompletionAvailability(
     ffi.Pointer<ffi.Void> completion_string,
   ) {
-    _clang_getCompletionAvailability ??= _dylib.lookupFunction<
+    return (_clang_getCompletionAvailability ??= _dylib.lookupFunction<
             _c_clang_getCompletionAvailability,
             _dart_clang_getCompletionAvailability>(
-        'clang_getCompletionAvailability');
-    return _clang_getCompletionAvailability(
+        'clang_getCompletionAvailability'))(
       completion_string,
     );
   }
 
-  _dart_clang_getCompletionAvailability _clang_getCompletionAvailability;
+  _dart_clang_getCompletionAvailability? _clang_getCompletionAvailability;
 
   /// Retrieve the number of annotations associated with the given
   /// completion string.
@@ -1605,16 +1547,15 @@
   int clang_getCompletionNumAnnotations(
     ffi.Pointer<ffi.Void> completion_string,
   ) {
-    _clang_getCompletionNumAnnotations ??= _dylib.lookupFunction<
+    return (_clang_getCompletionNumAnnotations ??= _dylib.lookupFunction<
             _c_clang_getCompletionNumAnnotations,
             _dart_clang_getCompletionNumAnnotations>(
-        'clang_getCompletionNumAnnotations');
-    return _clang_getCompletionNumAnnotations(
+        'clang_getCompletionNumAnnotations'))(
       completion_string,
     );
   }
 
-  _dart_clang_getCompletionNumAnnotations _clang_getCompletionNumAnnotations;
+  _dart_clang_getCompletionNumAnnotations? _clang_getCompletionNumAnnotations;
 
   /// Retrieve the number of fix-its for the given completion index.
   ///
@@ -1631,28 +1572,26 @@
     ffi.Pointer<CXCodeCompleteResults> results,
     int completion_index,
   ) {
-    _clang_getCompletionNumFixIts ??= _dylib.lookupFunction<
+    return (_clang_getCompletionNumFixIts ??= _dylib.lookupFunction<
         _c_clang_getCompletionNumFixIts,
-        _dart_clang_getCompletionNumFixIts>('clang_getCompletionNumFixIts');
-    return _clang_getCompletionNumFixIts(
+        _dart_clang_getCompletionNumFixIts>('clang_getCompletionNumFixIts'))(
       results,
       completion_index,
     );
   }
 
-  _dart_clang_getCompletionNumFixIts _clang_getCompletionNumFixIts;
+  _dart_clang_getCompletionNumFixIts? _clang_getCompletionNumFixIts;
 
   /// Returns a default set of code-completion options that can be
   /// passed to\c clang_codeCompleteAt().
   int clang_defaultCodeCompleteOptions() {
-    _clang_defaultCodeCompleteOptions ??= _dylib.lookupFunction<
+    return (_clang_defaultCodeCompleteOptions ??= _dylib.lookupFunction<
             _c_clang_defaultCodeCompleteOptions,
             _dart_clang_defaultCodeCompleteOptions>(
-        'clang_defaultCodeCompleteOptions');
-    return _clang_defaultCodeCompleteOptions();
+        'clang_defaultCodeCompleteOptions'))();
   }
 
-  _dart_clang_defaultCodeCompleteOptions _clang_defaultCodeCompleteOptions;
+  _dart_clang_defaultCodeCompleteOptions? _clang_defaultCodeCompleteOptions;
 
   /// Perform code completion at a given location in a translation unit.
   ///
@@ -1729,9 +1668,9 @@
     int num_unsaved_files,
     int options,
   ) {
-    _clang_codeCompleteAt ??= _dylib.lookupFunction<_c_clang_codeCompleteAt,
-        _dart_clang_codeCompleteAt>('clang_codeCompleteAt');
-    return _clang_codeCompleteAt(
+    return (_clang_codeCompleteAt ??= _dylib.lookupFunction<
+        _c_clang_codeCompleteAt,
+        _dart_clang_codeCompleteAt>('clang_codeCompleteAt'))(
       TU,
       complete_filename,
       complete_line,
@@ -1742,7 +1681,7 @@
     );
   }
 
-  _dart_clang_codeCompleteAt _clang_codeCompleteAt;
+  _dart_clang_codeCompleteAt? _clang_codeCompleteAt;
 
   /// Sort the code-completion results in case-insensitive alphabetical
   /// order.
@@ -1753,48 +1692,45 @@
     ffi.Pointer<CXCompletionResult> Results,
     int NumResults,
   ) {
-    _clang_sortCodeCompletionResults ??= _dylib.lookupFunction<
+    return (_clang_sortCodeCompletionResults ??= _dylib.lookupFunction<
             _c_clang_sortCodeCompletionResults,
             _dart_clang_sortCodeCompletionResults>(
-        'clang_sortCodeCompletionResults');
-    return _clang_sortCodeCompletionResults(
+        'clang_sortCodeCompletionResults'))(
       Results,
       NumResults,
     );
   }
 
-  _dart_clang_sortCodeCompletionResults _clang_sortCodeCompletionResults;
+  _dart_clang_sortCodeCompletionResults? _clang_sortCodeCompletionResults;
 
   /// Free the given set of code-completion results.
   void clang_disposeCodeCompleteResults(
     ffi.Pointer<CXCodeCompleteResults> Results,
   ) {
-    _clang_disposeCodeCompleteResults ??= _dylib.lookupFunction<
+    return (_clang_disposeCodeCompleteResults ??= _dylib.lookupFunction<
             _c_clang_disposeCodeCompleteResults,
             _dart_clang_disposeCodeCompleteResults>(
-        'clang_disposeCodeCompleteResults');
-    return _clang_disposeCodeCompleteResults(
+        'clang_disposeCodeCompleteResults'))(
       Results,
     );
   }
 
-  _dart_clang_disposeCodeCompleteResults _clang_disposeCodeCompleteResults;
+  _dart_clang_disposeCodeCompleteResults? _clang_disposeCodeCompleteResults;
 
   /// Determine the number of diagnostics produced prior to the
   /// location where code completion was performed.
   int clang_codeCompleteGetNumDiagnostics(
     ffi.Pointer<CXCodeCompleteResults> Results,
   ) {
-    _clang_codeCompleteGetNumDiagnostics ??= _dylib.lookupFunction<
+    return (_clang_codeCompleteGetNumDiagnostics ??= _dylib.lookupFunction<
             _c_clang_codeCompleteGetNumDiagnostics,
             _dart_clang_codeCompleteGetNumDiagnostics>(
-        'clang_codeCompleteGetNumDiagnostics');
-    return _clang_codeCompleteGetNumDiagnostics(
+        'clang_codeCompleteGetNumDiagnostics'))(
       Results,
     );
   }
 
-  _dart_clang_codeCompleteGetNumDiagnostics
+  _dart_clang_codeCompleteGetNumDiagnostics?
       _clang_codeCompleteGetNumDiagnostics;
 
   /// Retrieve a diagnostic associated with the given code completion.
@@ -1808,17 +1744,16 @@
     ffi.Pointer<CXCodeCompleteResults> Results,
     int Index,
   ) {
-    _clang_codeCompleteGetDiagnostic ??= _dylib.lookupFunction<
+    return (_clang_codeCompleteGetDiagnostic ??= _dylib.lookupFunction<
             _c_clang_codeCompleteGetDiagnostic,
             _dart_clang_codeCompleteGetDiagnostic>(
-        'clang_codeCompleteGetDiagnostic');
-    return _clang_codeCompleteGetDiagnostic(
+        'clang_codeCompleteGetDiagnostic'))(
       Results,
       Index,
     );
   }
 
-  _dart_clang_codeCompleteGetDiagnostic _clang_codeCompleteGetDiagnostic;
+  _dart_clang_codeCompleteGetDiagnostic? _clang_codeCompleteGetDiagnostic;
 
   /// Determines what completions are appropriate for the context
   /// the given code completion.
@@ -1830,15 +1765,14 @@
   int clang_codeCompleteGetContexts(
     ffi.Pointer<CXCodeCompleteResults> Results,
   ) {
-    _clang_codeCompleteGetContexts ??= _dylib.lookupFunction<
+    return (_clang_codeCompleteGetContexts ??= _dylib.lookupFunction<
         _c_clang_codeCompleteGetContexts,
-        _dart_clang_codeCompleteGetContexts>('clang_codeCompleteGetContexts');
-    return _clang_codeCompleteGetContexts(
+        _dart_clang_codeCompleteGetContexts>('clang_codeCompleteGetContexts'))(
       Results,
     );
   }
 
-  _dart_clang_codeCompleteGetContexts _clang_codeCompleteGetContexts;
+  _dart_clang_codeCompleteGetContexts? _clang_codeCompleteGetContexts;
 
   /// Returns the cursor kind for the container for the current code
   /// completion context. The container is only guaranteed to be set for
@@ -1858,17 +1792,16 @@
     ffi.Pointer<CXCodeCompleteResults> Results,
     ffi.Pointer<ffi.Uint32> IsIncomplete,
   ) {
-    _clang_codeCompleteGetContainerKind ??= _dylib.lookupFunction<
+    return (_clang_codeCompleteGetContainerKind ??= _dylib.lookupFunction<
             _c_clang_codeCompleteGetContainerKind,
             _dart_clang_codeCompleteGetContainerKind>(
-        'clang_codeCompleteGetContainerKind');
-    return _clang_codeCompleteGetContainerKind(
+        'clang_codeCompleteGetContainerKind'))(
       Results,
       IsIncomplete,
     );
   }
 
-  _dart_clang_codeCompleteGetContainerKind _clang_codeCompleteGetContainerKind;
+  _dart_clang_codeCompleteGetContainerKind? _clang_codeCompleteGetContainerKind;
 
   /// Enable/disable crash recovery.
   ///
@@ -1877,15 +1810,14 @@
   void clang_toggleCrashRecovery(
     int isEnabled,
   ) {
-    _clang_toggleCrashRecovery ??= _dylib.lookupFunction<
+    return (_clang_toggleCrashRecovery ??= _dylib.lookupFunction<
         _c_clang_toggleCrashRecovery,
-        _dart_clang_toggleCrashRecovery>('clang_toggleCrashRecovery');
-    return _clang_toggleCrashRecovery(
+        _dart_clang_toggleCrashRecovery>('clang_toggleCrashRecovery'))(
       isEnabled,
     );
   }
 
-  _dart_clang_toggleCrashRecovery _clang_toggleCrashRecovery;
+  _dart_clang_toggleCrashRecovery? _clang_toggleCrashRecovery;
 
   /// Visit the set of preprocessor inclusions in a translation unit.
   /// The visitor function is called with the provided data for every included
@@ -1896,45 +1828,43 @@
     ffi.Pointer<ffi.NativeFunction<CXInclusionVisitor>> visitor,
     ffi.Pointer<ffi.Void> client_data,
   ) {
-    _clang_getInclusions ??= _dylib.lookupFunction<_c_clang_getInclusions,
-        _dart_clang_getInclusions>('clang_getInclusions');
-    return _clang_getInclusions(
+    return (_clang_getInclusions ??= _dylib.lookupFunction<
+        _c_clang_getInclusions,
+        _dart_clang_getInclusions>('clang_getInclusions'))(
       tu,
       visitor,
       client_data,
     );
   }
 
-  _dart_clang_getInclusions _clang_getInclusions;
+  _dart_clang_getInclusions? _clang_getInclusions;
 
   /// Returns the kind of the evaluated result.
   int clang_EvalResult_getKind(
     ffi.Pointer<ffi.Void> E,
   ) {
-    _clang_EvalResult_getKind ??= _dylib.lookupFunction<
+    return (_clang_EvalResult_getKind ??= _dylib.lookupFunction<
         _c_clang_EvalResult_getKind,
-        _dart_clang_EvalResult_getKind>('clang_EvalResult_getKind');
-    return _clang_EvalResult_getKind(
+        _dart_clang_EvalResult_getKind>('clang_EvalResult_getKind'))(
       E,
     );
   }
 
-  _dart_clang_EvalResult_getKind _clang_EvalResult_getKind;
+  _dart_clang_EvalResult_getKind? _clang_EvalResult_getKind;
 
   /// Returns the evaluation result as integer if the
   /// kind is Int.
   int clang_EvalResult_getAsInt(
     ffi.Pointer<ffi.Void> E,
   ) {
-    _clang_EvalResult_getAsInt ??= _dylib.lookupFunction<
+    return (_clang_EvalResult_getAsInt ??= _dylib.lookupFunction<
         _c_clang_EvalResult_getAsInt,
-        _dart_clang_EvalResult_getAsInt>('clang_EvalResult_getAsInt');
-    return _clang_EvalResult_getAsInt(
+        _dart_clang_EvalResult_getAsInt>('clang_EvalResult_getAsInt'))(
       E,
     );
   }
 
-  _dart_clang_EvalResult_getAsInt _clang_EvalResult_getAsInt;
+  _dart_clang_EvalResult_getAsInt? _clang_EvalResult_getAsInt;
 
   /// Returns the evaluation result as a long long integer if the
   /// kind is Int. This prevents overflows that may happen if the result is
@@ -1942,60 +1872,59 @@
   int clang_EvalResult_getAsLongLong(
     ffi.Pointer<ffi.Void> E,
   ) {
-    _clang_EvalResult_getAsLongLong ??= _dylib.lookupFunction<
-        _c_clang_EvalResult_getAsLongLong,
-        _dart_clang_EvalResult_getAsLongLong>('clang_EvalResult_getAsLongLong');
-    return _clang_EvalResult_getAsLongLong(
+    return (_clang_EvalResult_getAsLongLong ??= _dylib.lookupFunction<
+            _c_clang_EvalResult_getAsLongLong,
+            _dart_clang_EvalResult_getAsLongLong>(
+        'clang_EvalResult_getAsLongLong'))(
       E,
     );
   }
 
-  _dart_clang_EvalResult_getAsLongLong _clang_EvalResult_getAsLongLong;
+  _dart_clang_EvalResult_getAsLongLong? _clang_EvalResult_getAsLongLong;
 
   /// Returns a non-zero value if the kind is Int and the evaluation
   /// result resulted in an unsigned integer.
   int clang_EvalResult_isUnsignedInt(
     ffi.Pointer<ffi.Void> E,
   ) {
-    _clang_EvalResult_isUnsignedInt ??= _dylib.lookupFunction<
-        _c_clang_EvalResult_isUnsignedInt,
-        _dart_clang_EvalResult_isUnsignedInt>('clang_EvalResult_isUnsignedInt');
-    return _clang_EvalResult_isUnsignedInt(
+    return (_clang_EvalResult_isUnsignedInt ??= _dylib.lookupFunction<
+            _c_clang_EvalResult_isUnsignedInt,
+            _dart_clang_EvalResult_isUnsignedInt>(
+        'clang_EvalResult_isUnsignedInt'))(
       E,
     );
   }
 
-  _dart_clang_EvalResult_isUnsignedInt _clang_EvalResult_isUnsignedInt;
+  _dart_clang_EvalResult_isUnsignedInt? _clang_EvalResult_isUnsignedInt;
 
   /// Returns the evaluation result as an unsigned integer if
   /// the kind is Int and clang_EvalResult_isUnsignedInt is non-zero.
   int clang_EvalResult_getAsUnsigned(
     ffi.Pointer<ffi.Void> E,
   ) {
-    _clang_EvalResult_getAsUnsigned ??= _dylib.lookupFunction<
-        _c_clang_EvalResult_getAsUnsigned,
-        _dart_clang_EvalResult_getAsUnsigned>('clang_EvalResult_getAsUnsigned');
-    return _clang_EvalResult_getAsUnsigned(
+    return (_clang_EvalResult_getAsUnsigned ??= _dylib.lookupFunction<
+            _c_clang_EvalResult_getAsUnsigned,
+            _dart_clang_EvalResult_getAsUnsigned>(
+        'clang_EvalResult_getAsUnsigned'))(
       E,
     );
   }
 
-  _dart_clang_EvalResult_getAsUnsigned _clang_EvalResult_getAsUnsigned;
+  _dart_clang_EvalResult_getAsUnsigned? _clang_EvalResult_getAsUnsigned;
 
   /// Returns the evaluation result as double if the
   /// kind is double.
   double clang_EvalResult_getAsDouble(
     ffi.Pointer<ffi.Void> E,
   ) {
-    _clang_EvalResult_getAsDouble ??= _dylib.lookupFunction<
+    return (_clang_EvalResult_getAsDouble ??= _dylib.lookupFunction<
         _c_clang_EvalResult_getAsDouble,
-        _dart_clang_EvalResult_getAsDouble>('clang_EvalResult_getAsDouble');
-    return _clang_EvalResult_getAsDouble(
+        _dart_clang_EvalResult_getAsDouble>('clang_EvalResult_getAsDouble'))(
       E,
     );
   }
 
-  _dart_clang_EvalResult_getAsDouble _clang_EvalResult_getAsDouble;
+  _dart_clang_EvalResult_getAsDouble? _clang_EvalResult_getAsDouble;
 
   /// Returns the evaluation result as a constant string if the
   /// kind is other than Int or float. User must not free this pointer,
@@ -2004,29 +1933,27 @@
   ffi.Pointer<ffi.Int8> clang_EvalResult_getAsStr(
     ffi.Pointer<ffi.Void> E,
   ) {
-    _clang_EvalResult_getAsStr ??= _dylib.lookupFunction<
+    return (_clang_EvalResult_getAsStr ??= _dylib.lookupFunction<
         _c_clang_EvalResult_getAsStr,
-        _dart_clang_EvalResult_getAsStr>('clang_EvalResult_getAsStr');
-    return _clang_EvalResult_getAsStr(
+        _dart_clang_EvalResult_getAsStr>('clang_EvalResult_getAsStr'))(
       E,
     );
   }
 
-  _dart_clang_EvalResult_getAsStr _clang_EvalResult_getAsStr;
+  _dart_clang_EvalResult_getAsStr? _clang_EvalResult_getAsStr;
 
   /// Disposes the created Eval memory.
   void clang_EvalResult_dispose(
     ffi.Pointer<ffi.Void> E,
   ) {
-    _clang_EvalResult_dispose ??= _dylib.lookupFunction<
+    return (_clang_EvalResult_dispose ??= _dylib.lookupFunction<
         _c_clang_EvalResult_dispose,
-        _dart_clang_EvalResult_dispose>('clang_EvalResult_dispose');
-    return _clang_EvalResult_dispose(
+        _dart_clang_EvalResult_dispose>('clang_EvalResult_dispose'))(
       E,
     );
   }
 
-  _dart_clang_EvalResult_dispose _clang_EvalResult_dispose;
+  _dart_clang_EvalResult_dispose? _clang_EvalResult_dispose;
 
   /// Retrieve a remapping.
   ///
@@ -2037,14 +1964,14 @@
   ffi.Pointer<ffi.Void> clang_getRemappings(
     ffi.Pointer<ffi.Int8> path,
   ) {
-    _clang_getRemappings ??= _dylib.lookupFunction<_c_clang_getRemappings,
-        _dart_clang_getRemappings>('clang_getRemappings');
-    return _clang_getRemappings(
+    return (_clang_getRemappings ??= _dylib.lookupFunction<
+        _c_clang_getRemappings,
+        _dart_clang_getRemappings>('clang_getRemappings'))(
       path,
     );
   }
 
-  _dart_clang_getRemappings _clang_getRemappings;
+  _dart_clang_getRemappings? _clang_getRemappings;
 
   /// Retrieve a remapping.
   ///
@@ -2058,31 +1985,29 @@
     ffi.Pointer<ffi.Pointer<ffi.Int8>> filePaths,
     int numFiles,
   ) {
-    _clang_getRemappingsFromFileList ??= _dylib.lookupFunction<
+    return (_clang_getRemappingsFromFileList ??= _dylib.lookupFunction<
             _c_clang_getRemappingsFromFileList,
             _dart_clang_getRemappingsFromFileList>(
-        'clang_getRemappingsFromFileList');
-    return _clang_getRemappingsFromFileList(
+        'clang_getRemappingsFromFileList'))(
       filePaths,
       numFiles,
     );
   }
 
-  _dart_clang_getRemappingsFromFileList _clang_getRemappingsFromFileList;
+  _dart_clang_getRemappingsFromFileList? _clang_getRemappingsFromFileList;
 
   /// Determine the number of remappings.
   int clang_remap_getNumFiles(
     ffi.Pointer<ffi.Void> arg0,
   ) {
-    _clang_remap_getNumFiles ??= _dylib.lookupFunction<
+    return (_clang_remap_getNumFiles ??= _dylib.lookupFunction<
         _c_clang_remap_getNumFiles,
-        _dart_clang_remap_getNumFiles>('clang_remap_getNumFiles');
-    return _clang_remap_getNumFiles(
+        _dart_clang_remap_getNumFiles>('clang_remap_getNumFiles'))(
       arg0,
     );
   }
 
-  _dart_clang_remap_getNumFiles _clang_remap_getNumFiles;
+  _dart_clang_remap_getNumFiles? _clang_remap_getNumFiles;
 
   /// Get the original and the associated filename from the remapping.
   ///
@@ -2096,10 +2021,9 @@
     ffi.Pointer<CXString> original,
     ffi.Pointer<CXString> transformed,
   ) {
-    _clang_remap_getFilenames ??= _dylib.lookupFunction<
+    return (_clang_remap_getFilenames ??= _dylib.lookupFunction<
         _c_clang_remap_getFilenames,
-        _dart_clang_remap_getFilenames>('clang_remap_getFilenames');
-    return _clang_remap_getFilenames(
+        _dart_clang_remap_getFilenames>('clang_remap_getFilenames'))(
       arg0,
       index,
       original,
@@ -2107,156 +2031,148 @@
     );
   }
 
-  _dart_clang_remap_getFilenames _clang_remap_getFilenames;
+  _dart_clang_remap_getFilenames? _clang_remap_getFilenames;
 
   /// Dispose the remapping.
   void clang_remap_dispose(
     ffi.Pointer<ffi.Void> arg0,
   ) {
-    _clang_remap_dispose ??= _dylib.lookupFunction<_c_clang_remap_dispose,
-        _dart_clang_remap_dispose>('clang_remap_dispose');
-    return _clang_remap_dispose(
+    return (_clang_remap_dispose ??= _dylib.lookupFunction<
+        _c_clang_remap_dispose,
+        _dart_clang_remap_dispose>('clang_remap_dispose'))(
       arg0,
     );
   }
 
-  _dart_clang_remap_dispose _clang_remap_dispose;
+  _dart_clang_remap_dispose? _clang_remap_dispose;
 
   int clang_index_isEntityObjCContainerKind(
     int arg0,
   ) {
-    _clang_index_isEntityObjCContainerKind ??= _dylib.lookupFunction<
+    return (_clang_index_isEntityObjCContainerKind ??= _dylib.lookupFunction<
             _c_clang_index_isEntityObjCContainerKind,
             _dart_clang_index_isEntityObjCContainerKind>(
-        'clang_index_isEntityObjCContainerKind');
-    return _clang_index_isEntityObjCContainerKind(
+        'clang_index_isEntityObjCContainerKind'))(
       arg0,
     );
   }
 
-  _dart_clang_index_isEntityObjCContainerKind
+  _dart_clang_index_isEntityObjCContainerKind?
       _clang_index_isEntityObjCContainerKind;
 
   ffi.Pointer<CXIdxObjCContainerDeclInfo> clang_index_getObjCContainerDeclInfo(
     ffi.Pointer<CXIdxDeclInfo> arg0,
   ) {
-    _clang_index_getObjCContainerDeclInfo ??= _dylib.lookupFunction<
+    return (_clang_index_getObjCContainerDeclInfo ??= _dylib.lookupFunction<
             _c_clang_index_getObjCContainerDeclInfo,
             _dart_clang_index_getObjCContainerDeclInfo>(
-        'clang_index_getObjCContainerDeclInfo');
-    return _clang_index_getObjCContainerDeclInfo(
+        'clang_index_getObjCContainerDeclInfo'))(
       arg0,
     );
   }
 
-  _dart_clang_index_getObjCContainerDeclInfo
+  _dart_clang_index_getObjCContainerDeclInfo?
       _clang_index_getObjCContainerDeclInfo;
 
   ffi.Pointer<CXIdxObjCInterfaceDeclInfo> clang_index_getObjCInterfaceDeclInfo(
     ffi.Pointer<CXIdxDeclInfo> arg0,
   ) {
-    _clang_index_getObjCInterfaceDeclInfo ??= _dylib.lookupFunction<
+    return (_clang_index_getObjCInterfaceDeclInfo ??= _dylib.lookupFunction<
             _c_clang_index_getObjCInterfaceDeclInfo,
             _dart_clang_index_getObjCInterfaceDeclInfo>(
-        'clang_index_getObjCInterfaceDeclInfo');
-    return _clang_index_getObjCInterfaceDeclInfo(
+        'clang_index_getObjCInterfaceDeclInfo'))(
       arg0,
     );
   }
 
-  _dart_clang_index_getObjCInterfaceDeclInfo
+  _dart_clang_index_getObjCInterfaceDeclInfo?
       _clang_index_getObjCInterfaceDeclInfo;
 
   ffi.Pointer<CXIdxObjCCategoryDeclInfo> clang_index_getObjCCategoryDeclInfo(
     ffi.Pointer<CXIdxDeclInfo> arg0,
   ) {
-    _clang_index_getObjCCategoryDeclInfo ??= _dylib.lookupFunction<
+    return (_clang_index_getObjCCategoryDeclInfo ??= _dylib.lookupFunction<
             _c_clang_index_getObjCCategoryDeclInfo,
             _dart_clang_index_getObjCCategoryDeclInfo>(
-        'clang_index_getObjCCategoryDeclInfo');
-    return _clang_index_getObjCCategoryDeclInfo(
+        'clang_index_getObjCCategoryDeclInfo'))(
       arg0,
     );
   }
 
-  _dart_clang_index_getObjCCategoryDeclInfo
+  _dart_clang_index_getObjCCategoryDeclInfo?
       _clang_index_getObjCCategoryDeclInfo;
 
   ffi.Pointer<CXIdxObjCProtocolRefListInfo>
       clang_index_getObjCProtocolRefListInfo(
     ffi.Pointer<CXIdxDeclInfo> arg0,
   ) {
-    _clang_index_getObjCProtocolRefListInfo ??= _dylib.lookupFunction<
+    return (_clang_index_getObjCProtocolRefListInfo ??= _dylib.lookupFunction<
             _c_clang_index_getObjCProtocolRefListInfo,
             _dart_clang_index_getObjCProtocolRefListInfo>(
-        'clang_index_getObjCProtocolRefListInfo');
-    return _clang_index_getObjCProtocolRefListInfo(
+        'clang_index_getObjCProtocolRefListInfo'))(
       arg0,
     );
   }
 
-  _dart_clang_index_getObjCProtocolRefListInfo
+  _dart_clang_index_getObjCProtocolRefListInfo?
       _clang_index_getObjCProtocolRefListInfo;
 
   ffi.Pointer<CXIdxObjCPropertyDeclInfo> clang_index_getObjCPropertyDeclInfo(
     ffi.Pointer<CXIdxDeclInfo> arg0,
   ) {
-    _clang_index_getObjCPropertyDeclInfo ??= _dylib.lookupFunction<
+    return (_clang_index_getObjCPropertyDeclInfo ??= _dylib.lookupFunction<
             _c_clang_index_getObjCPropertyDeclInfo,
             _dart_clang_index_getObjCPropertyDeclInfo>(
-        'clang_index_getObjCPropertyDeclInfo');
-    return _clang_index_getObjCPropertyDeclInfo(
+        'clang_index_getObjCPropertyDeclInfo'))(
       arg0,
     );
   }
 
-  _dart_clang_index_getObjCPropertyDeclInfo
+  _dart_clang_index_getObjCPropertyDeclInfo?
       _clang_index_getObjCPropertyDeclInfo;
 
   ffi.Pointer<CXIdxIBOutletCollectionAttrInfo>
       clang_index_getIBOutletCollectionAttrInfo(
     ffi.Pointer<CXIdxAttrInfo> arg0,
   ) {
-    _clang_index_getIBOutletCollectionAttrInfo ??= _dylib.lookupFunction<
-            _c_clang_index_getIBOutletCollectionAttrInfo,
-            _dart_clang_index_getIBOutletCollectionAttrInfo>(
-        'clang_index_getIBOutletCollectionAttrInfo');
-    return _clang_index_getIBOutletCollectionAttrInfo(
+    return (_clang_index_getIBOutletCollectionAttrInfo ??=
+        _dylib.lookupFunction<_c_clang_index_getIBOutletCollectionAttrInfo,
+                _dart_clang_index_getIBOutletCollectionAttrInfo>(
+            'clang_index_getIBOutletCollectionAttrInfo'))(
       arg0,
     );
   }
 
-  _dart_clang_index_getIBOutletCollectionAttrInfo
+  _dart_clang_index_getIBOutletCollectionAttrInfo?
       _clang_index_getIBOutletCollectionAttrInfo;
 
   ffi.Pointer<CXIdxCXXClassDeclInfo> clang_index_getCXXClassDeclInfo(
     ffi.Pointer<CXIdxDeclInfo> arg0,
   ) {
-    _clang_index_getCXXClassDeclInfo ??= _dylib.lookupFunction<
+    return (_clang_index_getCXXClassDeclInfo ??= _dylib.lookupFunction<
             _c_clang_index_getCXXClassDeclInfo,
             _dart_clang_index_getCXXClassDeclInfo>(
-        'clang_index_getCXXClassDeclInfo');
-    return _clang_index_getCXXClassDeclInfo(
+        'clang_index_getCXXClassDeclInfo'))(
       arg0,
     );
   }
 
-  _dart_clang_index_getCXXClassDeclInfo _clang_index_getCXXClassDeclInfo;
+  _dart_clang_index_getCXXClassDeclInfo? _clang_index_getCXXClassDeclInfo;
 
   /// For retrieving a custom CXIdxClientContainer attached to a
   /// container.
   ffi.Pointer<ffi.Void> clang_index_getClientContainer(
     ffi.Pointer<CXIdxContainerInfo> arg0,
   ) {
-    _clang_index_getClientContainer ??= _dylib.lookupFunction<
-        _c_clang_index_getClientContainer,
-        _dart_clang_index_getClientContainer>('clang_index_getClientContainer');
-    return _clang_index_getClientContainer(
+    return (_clang_index_getClientContainer ??= _dylib.lookupFunction<
+            _c_clang_index_getClientContainer,
+            _dart_clang_index_getClientContainer>(
+        'clang_index_getClientContainer'))(
       arg0,
     );
   }
 
-  _dart_clang_index_getClientContainer _clang_index_getClientContainer;
+  _dart_clang_index_getClientContainer? _clang_index_getClientContainer;
 
   /// For setting a custom CXIdxClientContainer attached to a
   /// container.
@@ -2264,46 +2180,44 @@
     ffi.Pointer<CXIdxContainerInfo> arg0,
     ffi.Pointer<ffi.Void> arg1,
   ) {
-    _clang_index_setClientContainer ??= _dylib.lookupFunction<
-        _c_clang_index_setClientContainer,
-        _dart_clang_index_setClientContainer>('clang_index_setClientContainer');
-    return _clang_index_setClientContainer(
+    return (_clang_index_setClientContainer ??= _dylib.lookupFunction<
+            _c_clang_index_setClientContainer,
+            _dart_clang_index_setClientContainer>(
+        'clang_index_setClientContainer'))(
       arg0,
       arg1,
     );
   }
 
-  _dart_clang_index_setClientContainer _clang_index_setClientContainer;
+  _dart_clang_index_setClientContainer? _clang_index_setClientContainer;
 
   /// For retrieving a custom CXIdxClientEntity attached to an entity.
   ffi.Pointer<ffi.Void> clang_index_getClientEntity(
     ffi.Pointer<CXIdxEntityInfo> arg0,
   ) {
-    _clang_index_getClientEntity ??= _dylib.lookupFunction<
+    return (_clang_index_getClientEntity ??= _dylib.lookupFunction<
         _c_clang_index_getClientEntity,
-        _dart_clang_index_getClientEntity>('clang_index_getClientEntity');
-    return _clang_index_getClientEntity(
+        _dart_clang_index_getClientEntity>('clang_index_getClientEntity'))(
       arg0,
     );
   }
 
-  _dart_clang_index_getClientEntity _clang_index_getClientEntity;
+  _dart_clang_index_getClientEntity? _clang_index_getClientEntity;
 
   /// For setting a custom CXIdxClientEntity attached to an entity.
   void clang_index_setClientEntity(
     ffi.Pointer<CXIdxEntityInfo> arg0,
     ffi.Pointer<ffi.Void> arg1,
   ) {
-    _clang_index_setClientEntity ??= _dylib.lookupFunction<
+    return (_clang_index_setClientEntity ??= _dylib.lookupFunction<
         _c_clang_index_setClientEntity,
-        _dart_clang_index_setClientEntity>('clang_index_setClientEntity');
-    return _clang_index_setClientEntity(
+        _dart_clang_index_setClientEntity>('clang_index_setClientEntity'))(
       arg0,
       arg1,
     );
   }
 
-  _dart_clang_index_setClientEntity _clang_index_setClientEntity;
+  _dart_clang_index_setClientEntity? _clang_index_setClientEntity;
 
   /// An indexing action/session, to be applied to one or multiple
   /// translation units.
@@ -2312,15 +2226,14 @@
   ffi.Pointer<ffi.Void> clang_IndexAction_create(
     ffi.Pointer<ffi.Void> CIdx,
   ) {
-    _clang_IndexAction_create ??= _dylib.lookupFunction<
+    return (_clang_IndexAction_create ??= _dylib.lookupFunction<
         _c_clang_IndexAction_create,
-        _dart_clang_IndexAction_create>('clang_IndexAction_create');
-    return _clang_IndexAction_create(
+        _dart_clang_IndexAction_create>('clang_IndexAction_create'))(
       CIdx,
     );
   }
 
-  _dart_clang_IndexAction_create _clang_IndexAction_create;
+  _dart_clang_IndexAction_create? _clang_IndexAction_create;
 
   /// Destroy the given index action.
   ///
@@ -2329,15 +2242,14 @@
   void clang_IndexAction_dispose(
     ffi.Pointer<ffi.Void> arg0,
   ) {
-    _clang_IndexAction_dispose ??= _dylib.lookupFunction<
+    return (_clang_IndexAction_dispose ??= _dylib.lookupFunction<
         _c_clang_IndexAction_dispose,
-        _dart_clang_IndexAction_dispose>('clang_IndexAction_dispose');
-    return _clang_IndexAction_dispose(
+        _dart_clang_IndexAction_dispose>('clang_IndexAction_dispose'))(
       arg0,
     );
   }
 
-  _dart_clang_IndexAction_dispose _clang_IndexAction_dispose;
+  _dart_clang_IndexAction_dispose? _clang_IndexAction_dispose;
 
   /// Index the given source file and the translation unit corresponding
   /// to that file via callbacks implemented through #IndexerCallbacks.
@@ -2376,9 +2288,9 @@
     ffi.Pointer<ffi.Pointer<CXTranslationUnitImpl>> out_TU,
     int TU_options,
   ) {
-    _clang_indexSourceFile ??= _dylib.lookupFunction<_c_clang_indexSourceFile,
-        _dart_clang_indexSourceFile>('clang_indexSourceFile');
-    return _clang_indexSourceFile(
+    return (_clang_indexSourceFile ??= _dylib.lookupFunction<
+        _c_clang_indexSourceFile,
+        _dart_clang_indexSourceFile>('clang_indexSourceFile'))(
       arg0,
       client_data,
       index_callbacks,
@@ -2394,7 +2306,7 @@
     );
   }
 
-  _dart_clang_indexSourceFile _clang_indexSourceFile;
+  _dart_clang_indexSourceFile? _clang_indexSourceFile;
 
   /// Same as clang_indexSourceFile but requires a full command line
   /// for \c command_line_args including argv[0]. This is useful if the standard
@@ -2413,10 +2325,9 @@
     ffi.Pointer<ffi.Pointer<CXTranslationUnitImpl>> out_TU,
     int TU_options,
   ) {
-    _clang_indexSourceFileFullArgv ??= _dylib.lookupFunction<
+    return (_clang_indexSourceFileFullArgv ??= _dylib.lookupFunction<
         _c_clang_indexSourceFileFullArgv,
-        _dart_clang_indexSourceFileFullArgv>('clang_indexSourceFileFullArgv');
-    return _clang_indexSourceFileFullArgv(
+        _dart_clang_indexSourceFileFullArgv>('clang_indexSourceFileFullArgv'))(
       arg0,
       client_data,
       index_callbacks,
@@ -2432,7 +2343,7 @@
     );
   }
 
-  _dart_clang_indexSourceFileFullArgv _clang_indexSourceFileFullArgv;
+  _dart_clang_indexSourceFileFullArgv? _clang_indexSourceFileFullArgv;
 
   /// Index the given translation unit via callbacks implemented through
   /// #IndexerCallbacks.
@@ -2456,10 +2367,9 @@
     int index_options,
     ffi.Pointer<CXTranslationUnitImpl> arg5,
   ) {
-    _clang_indexTranslationUnit ??= _dylib.lookupFunction<
+    return (_clang_indexTranslationUnit ??= _dylib.lookupFunction<
         _c_clang_indexTranslationUnit,
-        _dart_clang_indexTranslationUnit>('clang_indexTranslationUnit');
-    return _clang_indexTranslationUnit(
+        _dart_clang_indexTranslationUnit>('clang_indexTranslationUnit'))(
       arg0,
       client_data,
       index_callbacks,
@@ -2469,7 +2379,7 @@
     );
   }
 
-  _dart_clang_indexTranslationUnit _clang_indexTranslationUnit;
+  _dart_clang_indexTranslationUnit? _clang_indexTranslationUnit;
 }
 
 /// A character string.
@@ -2479,17 +2389,17 @@
 /// Use \c clang_getCString() to retrieve the string data and, once finished
 /// with the string data, call \c clang_disposeString() to free the string.
 class CXString extends ffi.Struct {
-  ffi.Pointer<ffi.Void> data;
+  external ffi.Pointer<ffi.Void> data;
 
   @ffi.Uint32()
-  int private_flags;
+  external int private_flags;
 }
 
 class CXStringSet extends ffi.Struct {
-  ffi.Pointer<CXString> Strings;
+  external ffi.Pointer<CXString> Strings;
 
   @ffi.Uint32()
-  int Count;
+  external int Count;
 }
 
 class CXTargetInfoImpl extends ffi.Struct {}
@@ -2505,14 +2415,14 @@
   /// The file whose contents have not yet been saved.
   ///
   /// This file must already exist in the file system.
-  ffi.Pointer<ffi.Int8> Filename;
+  external ffi.Pointer<ffi.Int8> Filename;
 
   /// A buffer containing the unsaved contents of this file.
-  ffi.Pointer<ffi.Int8> Contents;
+  external ffi.Pointer<ffi.Int8> Contents;
 
   /// The length of the unsaved contents of this buffer.
   @ffi.Uint64()
-  int Length;
+  external int Length;
 }
 
 /// Describes a version number of the form major.minor.subminor.
@@ -2520,19 +2430,19 @@
   /// The major version number, e.g., the '10' in '10.7.3'. A negative
   /// value indicates that there is no version number at all.
   @ffi.Int32()
-  int Major;
+  external int Major;
 
   /// The minor version number, e.g., the '7' in '10.7.3'. This value
   /// will be negative if no minor version number was provided, e.g., for
   /// version '10'.
   @ffi.Int32()
-  int Minor;
+  external int Minor;
 
   /// The subminor version number, e.g., the '3' in '10.7.3'. This value
   /// will be negative if no minor or subminor version number was provided,
   /// e.g., in version '10' or '10.7'.
   @ffi.Int32()
-  int Subminor;
+  external int Subminor;
 }
 
 abstract class CXGlobalOptFlags {
@@ -2562,11 +2472,11 @@
 /// across an indexing session.
 class CXFileUniqueID extends ffi.Struct {
   @ffi.Uint64()
-  int _unique_data_item_0;
+  external int _unique_data_item_0;
   @ffi.Uint64()
-  int _unique_data_item_1;
+  external int _unique_data_item_1;
   @ffi.Uint64()
-  int _unique_data_item_2;
+  external int _unique_data_item_2;
 
   /// Helper for array `data`.
   ArrayHelper_CXFileUniqueID_data_level0 get data =>
@@ -2627,14 +2537,14 @@
 /// Use clang_getExpansionLocation() or clang_getSpellingLocation()
 /// to map a source location to a particular file, line, and column.
 class CXSourceLocation extends ffi.Struct {
-  ffi.Pointer<ffi.Void> _unique_ptr_data_item_0;
-  ffi.Pointer<ffi.Void> _unique_ptr_data_item_1;
+  external ffi.Pointer<ffi.Void> _unique_ptr_data_item_0;
+  external ffi.Pointer<ffi.Void> _unique_ptr_data_item_1;
 
   /// Helper for array `ptr_data`.
   ArrayHelper_CXSourceLocation_ptr_data_level0 get ptr_data =>
       ArrayHelper_CXSourceLocation_ptr_data_level0(this, [2], 0, 0);
   @ffi.Uint32()
-  int int_data;
+  external int int_data;
 }
 
 /// Helper for array `ptr_data` in struct `CXSourceLocation`.
@@ -2685,17 +2595,17 @@
 /// Use clang_getRangeStart() and clang_getRangeEnd() to retrieve the
 /// starting and end locations from a source range, respectively.
 class CXSourceRange extends ffi.Struct {
-  ffi.Pointer<ffi.Void> _unique_ptr_data_item_0;
-  ffi.Pointer<ffi.Void> _unique_ptr_data_item_1;
+  external ffi.Pointer<ffi.Void> _unique_ptr_data_item_0;
+  external ffi.Pointer<ffi.Void> _unique_ptr_data_item_1;
 
   /// Helper for array `ptr_data`.
   ArrayHelper_CXSourceRange_ptr_data_level0 get ptr_data =>
       ArrayHelper_CXSourceRange_ptr_data_level0(this, [2], 0, 0);
   @ffi.Uint32()
-  int begin_int_data;
+  external int begin_int_data;
 
   @ffi.Uint32()
-  int end_int_data;
+  external int end_int_data;
 }
 
 /// Helper for array `ptr_data` in struct `CXSourceRange`.
@@ -2745,28 +2655,28 @@
 class CXSourceRangeList extends ffi.Struct {
   /// The number of ranges in the \c ranges array.
   @ffi.Uint32()
-  int count;
+  external int count;
 
   /// An array of \c CXSourceRanges.
-  ffi.Pointer<CXSourceRange> ranges;
+  external ffi.Pointer<CXSourceRange> ranges;
 }
 
 class CXTUResourceUsageEntry extends ffi.Struct {
   @ffi.Int32()
-  int kind;
+  external int kind;
 
   @ffi.Uint64()
-  int amount;
+  external int amount;
 }
 
 /// The memory usage of a CXTranslationUnit, broken into categories.
 class CXTUResourceUsage extends ffi.Struct {
-  ffi.Pointer<ffi.Void> data;
+  external ffi.Pointer<ffi.Void> data;
 
   @ffi.Uint32()
-  int numEntries;
+  external int numEntries;
 
-  ffi.Pointer<CXTUResourceUsageEntry> entries;
+  external ffi.Pointer<CXTUResourceUsageEntry> entries;
 }
 
 /// A cursor representing some element in the abstract syntax tree for
@@ -2787,14 +2697,14 @@
 /// source code into the AST.
 class CXCursor extends ffi.Struct {
   @ffi.Int32()
-  int kind;
+  external int kind;
 
   @ffi.Int32()
-  int xdata;
+  external int xdata;
 
-  ffi.Pointer<ffi.Void> _unique_data_item_0;
-  ffi.Pointer<ffi.Void> _unique_data_item_1;
-  ffi.Pointer<ffi.Void> _unique_data_item_2;
+  external ffi.Pointer<ffi.Void> _unique_data_item_0;
+  external ffi.Pointer<ffi.Void> _unique_data_item_1;
+  external ffi.Pointer<ffi.Void> _unique_data_item_2;
 
   /// Helper for array `data`.
   ArrayHelper_CXCursor_data_level0 get data =>
@@ -2988,10 +2898,10 @@
 /// The type of an element in the abstract syntax tree.
 class CXType extends ffi.Struct {
   @ffi.Int32()
-  int kind;
+  external int kind;
 
-  ffi.Pointer<ffi.Void> _unique_data_item_0;
-  ffi.Pointer<ffi.Void> _unique_data_item_1;
+  external ffi.Pointer<ffi.Void> _unique_data_item_0;
+  external ffi.Pointer<ffi.Void> _unique_data_item_1;
 
   /// Helper for array `data`.
   ArrayHelper_CXType_data_level0 get data =>
@@ -3044,18 +2954,18 @@
 /// Describes a single preprocessing token.
 class CXToken extends ffi.Struct {
   @ffi.Uint32()
-  int _unique_int_data_item_0;
+  external int _unique_int_data_item_0;
   @ffi.Uint32()
-  int _unique_int_data_item_1;
+  external int _unique_int_data_item_1;
   @ffi.Uint32()
-  int _unique_int_data_item_2;
+  external int _unique_int_data_item_2;
   @ffi.Uint32()
-  int _unique_int_data_item_3;
+  external int _unique_int_data_item_3;
 
   /// Helper for array `int_data`.
   ArrayHelper_CXToken_int_data_level0 get int_data =>
       ArrayHelper_CXToken_int_data_level0(this, [4], 0, 0);
-  ffi.Pointer<ffi.Void> ptr_data;
+  external ffi.Pointer<ffi.Void> ptr_data;
 }
 
 /// Helper for array `int_data` in struct `CXToken`.
@@ -3122,11 +3032,11 @@
   /// \todo In the future, we would like to provide a full cursor, to allow
   /// the client to extract additional information from declaration.
   @ffi.Int32()
-  int CursorKind;
+  external int CursorKind;
 
   /// The code-completion string that describes how to insert this
   /// code-completion result into the editing buffer.
-  ffi.Pointer<ffi.Void> CompletionString;
+  external ffi.Pointer<ffi.Void> CompletionString;
 }
 
 /// Contains the results of code-completion.
@@ -3136,26 +3046,26 @@
 /// \c clang_disposeCodeCompleteResults.
 class CXCodeCompleteResults extends ffi.Struct {
   /// The code-completion results.
-  ffi.Pointer<CXCompletionResult> Results;
+  external ffi.Pointer<CXCompletionResult> Results;
 
   /// The number of code-completion results stored in the
   /// \c Results array.
   @ffi.Uint32()
-  int NumResults;
+  external int NumResults;
 }
 
 class CXCursorAndRangeVisitor extends ffi.Struct {}
 
 /// Source location passed to index callbacks.
 class CXIdxLoc extends ffi.Struct {
-  ffi.Pointer<ffi.Void> _unique_ptr_data_item_0;
-  ffi.Pointer<ffi.Void> _unique_ptr_data_item_1;
+  external ffi.Pointer<ffi.Void> _unique_ptr_data_item_0;
+  external ffi.Pointer<ffi.Void> _unique_ptr_data_item_1;
 
   /// Helper for array `ptr_data`.
   ArrayHelper_CXIdxLoc_ptr_data_level0 get ptr_data =>
       ArrayHelper_CXIdxLoc_ptr_data_level0(this, [2], 0, 0);
   @ffi.Uint32()
-  int int_data;
+  external int int_data;
 }
 
 /// Helper for array `ptr_data` in struct `CXIdxLoc`.
@@ -3218,10 +3128,10 @@
 class CXIdxDeclInfo extends ffi.Struct {}
 
 class CXIdxObjCContainerDeclInfo extends ffi.Struct {
-  ffi.Pointer<CXIdxDeclInfo> declInfo;
+  external ffi.Pointer<CXIdxDeclInfo> declInfo;
 
   @ffi.Int32()
-  int kind;
+  external int kind;
 }
 
 class CXIdxBaseClassInfo extends ffi.Struct {}
@@ -3229,37 +3139,37 @@
 class CXIdxObjCProtocolRefInfo extends ffi.Struct {}
 
 class CXIdxObjCProtocolRefListInfo extends ffi.Struct {
-  ffi.Pointer<ffi.Pointer<CXIdxObjCProtocolRefInfo>> protocols;
+  external ffi.Pointer<ffi.Pointer<CXIdxObjCProtocolRefInfo>> protocols;
 
   @ffi.Uint32()
-  int numProtocols;
+  external int numProtocols;
 }
 
 class CXIdxObjCInterfaceDeclInfo extends ffi.Struct {
-  ffi.Pointer<CXIdxObjCContainerDeclInfo> containerInfo;
+  external ffi.Pointer<CXIdxObjCContainerDeclInfo> containerInfo;
 
-  ffi.Pointer<CXIdxBaseClassInfo> superInfo;
+  external ffi.Pointer<CXIdxBaseClassInfo> superInfo;
 
-  ffi.Pointer<CXIdxObjCProtocolRefListInfo> protocols;
+  external ffi.Pointer<CXIdxObjCProtocolRefListInfo> protocols;
 }
 
 class CXIdxObjCCategoryDeclInfo extends ffi.Struct {}
 
 class CXIdxObjCPropertyDeclInfo extends ffi.Struct {
-  ffi.Pointer<CXIdxDeclInfo> declInfo;
+  external ffi.Pointer<CXIdxDeclInfo> declInfo;
 
-  ffi.Pointer<CXIdxEntityInfo> getter;
+  external ffi.Pointer<CXIdxEntityInfo> getter;
 
-  ffi.Pointer<CXIdxEntityInfo> setter;
+  external ffi.Pointer<CXIdxEntityInfo> setter;
 }
 
 class CXIdxCXXClassDeclInfo extends ffi.Struct {
-  ffi.Pointer<CXIdxDeclInfo> declInfo;
+  external ffi.Pointer<CXIdxDeclInfo> declInfo;
 
-  ffi.Pointer<ffi.Pointer<CXIdxBaseClassInfo>> bases;
+  external ffi.Pointer<ffi.Pointer<CXIdxBaseClassInfo>> bases;
 
   @ffi.Uint32()
-  int numBases;
+  external int numBases;
 }
 
 /// Data for IndexerCallbacks#indexEntityReference.
@@ -3270,15 +3180,15 @@
 class IndexerCallbacks extends ffi.Struct {
   /// Called periodically to check whether indexing should be aborted.
   /// Should return 0 to continue, and non-zero to abort.
-  ffi.Pointer<ffi.NativeFunction<_typedefC_2>> abortQuery;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_2>> abortQuery;
 
   /// Called at the end of indexing; passes the complete diagnostic set.
-  ffi.Pointer<ffi.NativeFunction<_typedefC_3>> diagnostic;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_3>> diagnostic;
 
-  ffi.Pointer<ffi.NativeFunction<_typedefC_4>> enteredMainFile;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_4>> enteredMainFile;
 
   /// Called when a file gets \#included/\#imported.
-  ffi.Pointer<ffi.NativeFunction<_typedefC_5>> ppIncludedFile;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_5>> ppIncludedFile;
 
   /// Called when a AST file (PCH or module) gets imported.
   ///
@@ -3286,15 +3196,15 @@
   /// the entities in an AST file). The recommended action is that, if the AST
   /// file is not already indexed, to initiate a new indexing job specific to
   /// the AST file.
-  ffi.Pointer<ffi.NativeFunction<_typedefC_6>> importedASTFile;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_6>> importedASTFile;
 
   /// Called at the beginning of indexing a translation unit.
-  ffi.Pointer<ffi.NativeFunction<_typedefC_7>> startedTranslationUnit;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_7>> startedTranslationUnit;
 
-  ffi.Pointer<ffi.NativeFunction<_typedefC_8>> indexDeclaration;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_8>> indexDeclaration;
 
   /// Called to index a reference of an entity.
-  ffi.Pointer<ffi.NativeFunction<_typedefC_9>> indexEntityReference;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_9>> indexEntityReference;
 }
 
 const int CINDEX_VERSION_MAJOR = 0;
diff --git a/example/libclang-example/pubspec.yaml b/example/libclang-example/pubspec.yaml
index ba3067f..e1a3cfc 100644
--- a/example/libclang-example/pubspec.yaml
+++ b/example/libclang-example/pubspec.yaml
@@ -5,7 +5,7 @@
 name: libclang_example
 
 environment:
-  sdk: '>=2.8.1 <3.0.0'
+  sdk: '>=2.12.0-29.10.beta <3.0.0'
 
 dev_dependencies:
   ffigen:
diff --git a/example/simple/generated_bindings.dart b/example/simple/generated_bindings.dart
index 9b0b3a2..9a94f0d 100644
--- a/example/simple/generated_bindings.dart
+++ b/example/simple/generated_bindings.dart
@@ -16,74 +16,70 @@
     int a,
     int b,
   ) {
-    _sum ??= _dylib.lookupFunction<_c_sum, _dart_sum>('sum');
-    return _sum(
+    return (_sum ??= _dylib.lookupFunction<_c_sum, _dart_sum>('sum'))(
       a,
       b,
     );
   }
 
-  _dart_sum _sum;
+  _dart_sum? _sum;
 
   /// Subtracts 2 integers.
   int subtract(
     ffi.Pointer<ffi.Int32> a,
     int b,
   ) {
-    _subtract ??=
-        _dylib.lookupFunction<_c_subtract, _dart_subtract>('subtract');
-    return _subtract(
+    return (_subtract ??=
+        _dylib.lookupFunction<_c_subtract, _dart_subtract>('subtract'))(
       a,
       b,
     );
   }
 
-  _dart_subtract _subtract;
+  _dart_subtract? _subtract;
 
   /// Multiplies 2 integers, returns pointer to an integer,.
   ffi.Pointer<ffi.Int32> multiply(
     int a,
     int b,
   ) {
-    _multiply ??=
-        _dylib.lookupFunction<_c_multiply, _dart_multiply>('multiply');
-    return _multiply(
+    return (_multiply ??=
+        _dylib.lookupFunction<_c_multiply, _dart_multiply>('multiply'))(
       a,
       b,
     );
   }
 
-  _dart_multiply _multiply;
+  _dart_multiply? _multiply;
 
   /// Divides 2 integers, returns pointer to a float.
   ffi.Pointer<ffi.Float> divide(
     int a,
     int b,
   ) {
-    _divide ??= _dylib.lookupFunction<_c_divide, _dart_divide>('divide');
-    return _divide(
+    return (_divide ??=
+        _dylib.lookupFunction<_c_divide, _dart_divide>('divide'))(
       a,
       b,
     );
   }
 
-  _dart_divide _divide;
+  _dart_divide? _divide;
 
   /// Divides 2 floats, returns a pointer to double.
   ffi.Pointer<ffi.Double> dividePercision(
     ffi.Pointer<ffi.Float> a,
     ffi.Pointer<ffi.Float> b,
   ) {
-    _dividePercision ??=
+    return (_dividePercision ??=
         _dylib.lookupFunction<_c_dividePercision, _dart_dividePercision>(
-            'dividePercision');
-    return _dividePercision(
+            'dividePercision'))(
       a,
       b,
     );
   }
 
-  _dart_dividePercision _dividePercision;
+  _dart_dividePercision? _dividePercision;
 }
 
 typedef _c_sum = ffi.Int32 Function(
diff --git a/example/simple/pubspec.yaml b/example/simple/pubspec.yaml
index c742a26..9e461ec 100644
--- a/example/simple/pubspec.yaml
+++ b/example/simple/pubspec.yaml
@@ -5,7 +5,7 @@
 name: simple_example
 
 environment:
-  sdk: '>=2.8.1 <3.0.0'
+  sdk: '>=2.12.0-29.10.beta <3.0.0'
 
 dev_dependencies:
   ffigen:
diff --git a/lib/src/code_generator/binding.dart b/lib/src/code_generator/binding.dart
index 4f24d58..877f243 100644
--- a/lib/src/code_generator/binding.dart
+++ b/lib/src/code_generator/binding.dart
@@ -2,8 +2,6 @@
 // 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:meta/meta.dart';
-
 import 'binding_string.dart';
 import 'typedef.dart';
 import 'writer.dart';
@@ -21,12 +19,12 @@
   /// Binding name to generate, may get changed to resolve name conflicts.
   String name;
 
-  final String dartDoc;
+  final String? dartDoc;
 
   Binding({
-    @required this.usr,
-    @required this.originalName,
-    @required this.name,
+    required this.usr,
+    required this.originalName,
+    required this.name,
     this.dartDoc,
   });
 
@@ -43,10 +41,10 @@
 /// Base class for bindings which look up symbols in dynamic library.
 abstract class LookUpBinding extends Binding {
   LookUpBinding({
-    String usr,
-    String originalName,
-    @required String name,
-    String dartDoc,
+    String? usr,
+    String? originalName,
+    required String name,
+    String? dartDoc,
   }) : super(
           usr: usr ?? name,
           originalName: originalName ?? name,
@@ -58,10 +56,10 @@
 /// Base class for bindings which don't look up symbols in dynamic library.
 abstract class NoLookUpBinding extends Binding {
   NoLookUpBinding({
-    String usr,
-    String originalName,
-    @required String name,
-    String dartDoc,
+    String? usr,
+    String? originalName,
+    required String name,
+    String? dartDoc,
   }) : super(
           usr: usr ?? name,
           originalName: originalName ?? name,
diff --git a/lib/src/code_generator/binding_string.dart b/lib/src/code_generator/binding_string.dart
index c0d4325..a2b721e 100644
--- a/lib/src/code_generator/binding_string.dart
+++ b/lib/src/code_generator/binding_string.dart
@@ -2,15 +2,13 @@
 // 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:meta/meta.dart';
-
 /// A Binding's String representation.
 class BindingString {
   // Meta data, (not used for generation).
   final BindingStringType type;
   final String string;
 
-  const BindingString({@required this.type, @required this.string});
+  const BindingString({required this.type, required this.string});
 
   @override
   String toString() => string;
diff --git a/lib/src/code_generator/constant.dart b/lib/src/code_generator/constant.dart
index 617f2d7..41a9961 100644
--- a/lib/src/code_generator/constant.dart
+++ b/lib/src/code_generator/constant.dart
@@ -2,8 +2,6 @@
 // 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:meta/meta.dart';
-
 import 'binding.dart';
 import 'binding_string.dart';
 import 'utils.dart';
@@ -30,12 +28,12 @@
   final String rawValue;
 
   Constant({
-    String usr,
-    String originalName,
-    @required String name,
-    String dartDoc,
-    @required this.rawType,
-    @required this.rawValue,
+    String? usr,
+    String? originalName,
+    required String name,
+    String? dartDoc,
+    required this.rawType,
+    required this.rawValue,
   }) : super(
           usr: usr,
           originalName: originalName,
@@ -49,7 +47,7 @@
     final constantName = name;
 
     if (dartDoc != null) {
-      s.write(makeDartDoc(dartDoc));
+      s.write(makeDartDoc(dartDoc!));
     }
 
     s.write('const ${rawType} $constantName = $rawValue;\n\n');
diff --git a/lib/src/code_generator/enum_class.dart b/lib/src/code_generator/enum_class.dart
index 867133a..249ab8c 100644
--- a/lib/src/code_generator/enum_class.dart
+++ b/lib/src/code_generator/enum_class.dart
@@ -2,8 +2,6 @@
 // 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:meta/meta.dart';
-
 import 'binding.dart';
 import 'binding_string.dart';
 import 'utils.dart';
@@ -27,11 +25,11 @@
   final List<EnumConstant> enumConstants;
 
   EnumClass({
-    String usr,
-    String originalName,
-    @required String name,
-    String dartDoc,
-    List<EnumConstant> enumConstants,
+    String? usr,
+    String? originalName,
+    required String name,
+    String? dartDoc,
+    List<EnumConstant>? enumConstants,
   })  : enumConstants = enumConstants ?? [],
         super(
           usr: usr,
@@ -46,7 +44,7 @@
     final enclosingClassName = name;
 
     if (dartDoc != null) {
-      s.write(makeDartDoc(dartDoc));
+      s.write(makeDartDoc(dartDoc!));
     }
 
     /// Adding [enclosingClassName] because dart doesn't allow class member
@@ -60,7 +58,7 @@
       final enum_value_name = localUniqueNamer.makeUnique(ec.name);
       if (ec.dartDoc != null) {
         s.write(depth + '/// ');
-        s.writeAll(ec.dartDoc.split('\n'), '\n' + depth + '/// ');
+        s.writeAll(ec.dartDoc!.split('\n'), '\n' + depth + '/// ');
         s.write('\n');
       }
       s.write(depth + 'static const int ${enum_value_name} = ${ec.value};\n');
@@ -74,14 +72,14 @@
 
 /// Represents a single value in an enum.
 class EnumConstant {
-  final String originalName;
-  final String dartDoc;
+  final String? originalName;
+  final String? dartDoc;
   final String name;
   final int value;
   const EnumConstant({
-    String originalName,
-    @required this.name,
-    @required this.value,
+    String? originalName,
+    required this.name,
+    required this.value,
     this.dartDoc,
   }) : originalName = originalName ?? name;
 }
diff --git a/lib/src/code_generator/func.dart b/lib/src/code_generator/func.dart
index a55f6d2..5a526a5 100644
--- a/lib/src/code_generator/func.dart
+++ b/lib/src/code_generator/func.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:ffigen/src/code_generator.dart';
-import 'package:meta/meta.dart';
 
 import 'binding.dart';
 import 'binding_string.dart';
@@ -36,12 +35,12 @@
   /// [originalName] is looked up in dynamic library, if not
   /// provided, takes the value of [name].
   Func({
-    String usr,
-    @required String name,
-    String originalName,
-    String dartDoc,
-    @required this.returnType,
-    List<Parameter> parameters,
+    String? usr,
+    required String name,
+    String? originalName,
+    String? dartDoc,
+    required this.returnType,
+    List<Parameter>? parameters,
   })  : parameters = parameters ?? [],
         super(
           usr: usr,
@@ -50,14 +49,13 @@
           dartDoc: dartDoc,
         ) {
     for (var i = 0; i < this.parameters.length; i++) {
-      if (this.parameters[i].name == null ||
-          this.parameters[i].name.trim() == '') {
+      if (this.parameters[i].name.trim() == '') {
         this.parameters[i].name = 'arg$i';
       }
     }
   }
 
-  List<Typedef> _typedefDependencies;
+  List<Typedef>? _typedefDependencies;
   @override
   List<Typedef> getTypedefDependencies(Writer w) {
     if (_typedefDependencies == null) {
@@ -66,26 +64,26 @@
       // Add typedef's required by return type.
       final returnTypeBase = returnType.getBaseType();
       if (returnTypeBase.broadType == BroadType.NativeFunction) {
-        _typedefDependencies
-            .addAll(returnTypeBase.nativeFunc.getDependencies());
+        _typedefDependencies!
+            .addAll(returnTypeBase.nativeFunc!.getDependencies());
       }
 
       // Add typedef's required by parameters.
       for (final p in parameters) {
         final base = p.type.getBaseType();
         if (base.broadType == BroadType.NativeFunction) {
-          _typedefDependencies.addAll(base.nativeFunc.getDependencies());
+          _typedefDependencies!.addAll(base.nativeFunc!.getDependencies());
         }
       }
       // Add C function typedef.
-      _typedefDependencies.add(cType);
+      _typedefDependencies!.add(cType);
       // Add Dart function typedef.
-      _typedefDependencies.add(dartType);
+      _typedefDependencies!.add(dartType);
     }
-    return _typedefDependencies;
+    return _typedefDependencies!;
   }
 
-  Typedef _cType, _dartType;
+  Typedef? _cType, _dartType;
   Typedef get cType => _cType ??= Typedef(
         name: '_c_$name',
         returnType: returnType,
@@ -106,7 +104,7 @@
     final funcVarName = w.wrapperLevelUniqueNamer.makeUnique('_$name');
 
     if (dartDoc != null) {
-      s.write(makeDartDoc(dartDoc));
+      s.write(makeDartDoc(dartDoc!));
     }
     // Resolve name conflicts in function parameter names.
     final paramNamer = UniqueNamer({});
@@ -130,9 +128,9 @@
     }
     s.write(') {\n');
     s.write(
-        "$funcVarName ??= ${w.dylibIdentifier}.lookupFunction<${cType.name},${dartType.name}>('$originalName');\n");
+        "return ($funcVarName ??= ${w.dylibIdentifier}.lookupFunction<${cType.name},${dartType.name}>('$originalName'))");
 
-    s.write('  return $funcVarName(\n');
+    s.write('(\n');
     for (final p in parameters) {
       if (w.dartBool && p.type.broadType == BroadType.Boolean) {
         // Convert bool parameter to int before calling.
@@ -150,7 +148,7 @@
     s.write('}\n');
 
     // Write function variable.
-    s.write('${dartType.name} $funcVarName;\n\n');
+    s.write('${dartType.name}? $funcVarName;\n\n');
 
     return BindingString(type: BindingStringType.func, string: s.toString());
   }
@@ -158,11 +156,11 @@
 
 /// Represents a Parameter, used in [Func] and [Typedef].
 class Parameter {
-  final String originalName;
+  final String? originalName;
   String name;
   final Type type;
 
-  Parameter({String originalName, this.name = '', @required Type type})
+  Parameter({String? originalName, this.name = '', required Type type})
       : originalName = originalName ?? name,
         // A type with broadtype [BroadType.NativeFunction] is wrapped with a
         // pointer because this is a shorthand used in C for Pointer to function.
diff --git a/lib/src/code_generator/global.dart b/lib/src/code_generator/global.dart
index 817844d..b52fa70 100644
--- a/lib/src/code_generator/global.dart
+++ b/lib/src/code_generator/global.dart
@@ -2,8 +2,6 @@
 // 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:meta/meta.dart';
-
 import 'binding.dart';
 import 'binding_string.dart';
 import 'type.dart';
@@ -24,11 +22,11 @@
   final Type type;
 
   Global({
-    String usr,
-    String originalName,
-    @required String name,
-    @required this.type,
-    String dartDoc,
+    String? usr,
+    String? originalName,
+    required String name,
+    required this.type,
+    String? dartDoc,
   }) : super(
           usr: usr,
           originalName: originalName,
@@ -41,7 +39,7 @@
     final s = StringBuffer();
     final globalVarName = name;
     if (dartDoc != null) {
-      s.write(makeDartDoc(dartDoc));
+      s.write(makeDartDoc(dartDoc!));
     }
 
     final holderVarName =
diff --git a/lib/src/code_generator/library.dart b/lib/src/code_generator/library.dart
index e1d2390..4ea8e65 100644
--- a/lib/src/code_generator/library.dart
+++ b/lib/src/code_generator/library.dart
@@ -6,7 +6,6 @@
 
 import 'package:cli_util/cli_util.dart';
 import 'package:logging/logging.dart';
-import 'package:meta/meta.dart';
 import 'package:path/path.dart' as p;
 import 'package:pub_semver/pub_semver.dart';
 import 'binding.dart';
@@ -20,14 +19,14 @@
   /// List of bindings in this library.
   final List<Binding> bindings;
 
-  Writer _writer;
+  late Writer _writer;
   Writer get writer => _writer;
 
   Library({
-    @required String name,
-    String description,
-    @required this.bindings,
-    String header,
+    required String name,
+    String? description,
+    required this.bindings,
+    String? header,
     bool dartBool = true,
   }) {
     // Seperate bindings which require lookup.
@@ -116,8 +115,7 @@
 
   /// Generates the bindings.
   String generate() {
-    final w = writer;
-    return w.generate();
+    return writer.generate();
   }
 
   @override
diff --git a/lib/src/code_generator/struc.dart b/lib/src/code_generator/struc.dart
index a17649b..ee8a523 100644
--- a/lib/src/code_generator/struc.dart
+++ b/lib/src/code_generator/struc.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:ffigen/src/code_generator/typedef.dart';
-import 'package:meta/meta.dart';
 
 import 'binding.dart';
 import 'binding_string.dart';
@@ -39,11 +38,11 @@
   List<Member> members;
 
   Struc({
-    String usr,
-    String originalName,
-    @required String name,
-    String dartDoc,
-    List<Member> members,
+    String? usr,
+    String? originalName,
+    required String name,
+    String? dartDoc,
+    List<Member>? members,
   })  : members = members ?? [],
         super(
           usr: usr,
@@ -56,13 +55,13 @@
     final array = <int>[];
     var startType = type;
     while (startType.broadType == BroadType.ConstantArray) {
-      array.add(startType.length);
-      startType = startType.child;
+      array.add(startType.length!);
+      startType = startType.child!;
     }
     return array;
   }
 
-  List<Typedef> _typedefDependencies;
+  List<Typedef>? _typedefDependencies;
   @override
   List<Typedef> getTypedefDependencies(Writer w) {
     if (_typedefDependencies == null) {
@@ -72,20 +71,19 @@
       for (final m in members) {
         final base = m.type.getBaseType();
         if (base.broadType == BroadType.NativeFunction) {
-          _typedefDependencies.addAll(base.nativeFunc.getDependencies());
+          _typedefDependencies!.addAll(base.nativeFunc!.getDependencies());
         }
       }
     }
-    return _typedefDependencies;
+    return _typedefDependencies ?? [];
   }
 
   @override
   BindingString toBindingString(Writer w) {
-    members = members ?? [];
     final s = StringBuffer();
     final enclosingClassName = name;
     if (dartDoc != null) {
-      s.write(makeDartDoc(dartDoc));
+      s.write(makeDartDoc(dartDoc!));
     }
 
     final helpers = <ArrayHelper>[];
@@ -118,13 +116,13 @@
         const depth = '  ';
         if (m.dartDoc != null) {
           s.write(depth + '/// ');
-          s.writeAll(m.dartDoc.split('\n'), '\n' + depth + '/// ');
+          s.writeAll(m.dartDoc!.split('\n'), '\n' + depth + '/// ');
           s.write('\n');
         }
         if (m.type.isPrimitive) {
           s.write('$depth@${m.type.getCType(w)}()\n');
         }
-        s.write('$depth${m.type.getDartType(w)} ${memberName};\n\n');
+        s.write('${depth}external ${m.type.getDartType(w)} ${memberName};\n\n');
       }
     }
     s.write('}\n\n');
@@ -154,15 +152,15 @@
 }
 
 class Member {
-  final String dartDoc;
+  final String? dartDoc;
   final String originalName;
   final String name;
   final Type type;
 
   const Member({
-    String originalName,
-    @required this.name,
-    @required this.type,
+    String? originalName,
+    required this.name,
+    required this.type,
     this.dartDoc,
   }) : originalName = originalName ?? name;
 }
@@ -171,15 +169,15 @@
 class ArrayHelper {
   final Type elementType;
   final List<int> dimensions;
-  final String structName;
+  final String? structName;
 
-  final String name;
+  final String? name;
   final String helperClassGroupName;
   final String elementNamePrefix;
 
-  int _expandedArrayLength;
+  int? _expandedArrayLength;
   int get expandedArrayLength {
-    if (_expandedArrayLength != null) return _expandedArrayLength;
+    if (_expandedArrayLength != null) return _expandedArrayLength!;
 
     var arrayLength = 1;
     for (final i in dimensions) {
@@ -189,12 +187,12 @@
   }
 
   ArrayHelper({
-    @required this.elementType,
-    @required this.dimensions,
-    @required this.structName,
-    @required this.name,
-    @required this.helperClassGroupName,
-    @required this.elementNamePrefix,
+    required this.elementType,
+    required this.dimensions,
+    required this.structName,
+    required this.name,
+    required this.helperClassGroupName,
+    required this.elementNamePrefix,
   });
 
   /// Create declaration binding, added inside the struct binding.
@@ -207,7 +205,7 @@
       if (elementType.isPrimitive) {
         s.write('  @${arrayCType}()\n');
       }
-      s.write('  ${arrayDartType} ${elementNamePrefix}$i;\n');
+      s.write('  external ${arrayDartType} ${elementNamePrefix}$i;\n');
     }
 
     s.write('/// Helper for array `$name`.\n');
diff --git a/lib/src/code_generator/type.dart b/lib/src/code_generator/type.dart
index 5922b38..0f2071e 100644
--- a/lib/src/code_generator/type.dart
+++ b/lib/src/code_generator/type.dart
@@ -2,8 +2,6 @@
 // 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:meta/meta.dart';
-
 import 'struc.dart';
 import 'typedef.dart';
 import 'writer.dart';
@@ -12,7 +10,7 @@
   final String c;
   final String dart;
 
-  const _SubType({this.c, this.dart});
+  const _SubType({required this.c, required this.dart});
 }
 
 enum SupportedNativeType {
@@ -69,28 +67,28 @@
   };
 
   /// Reference to the [Struc] binding this type refers to.
-  Struc struc;
+  Struc? struc;
 
   /// Reference to the [Typedef] this type refers to.
-  Typedef nativeFunc;
+  Typedef? nativeFunc;
 
   /// For providing [SupportedNativeType] only.
-  final SupportedNativeType nativeType;
+  final SupportedNativeType? nativeType;
 
   /// The BroadType of this Type.
   final BroadType broadType;
 
   /// Child Type, e.g Pointer(Parent) to Int(Child), or Child Type of an Array.
-  final Type child;
+  final Type? child;
 
   /// For ConstantArray and IncompleteArray type.
-  final int length;
+  final int? length;
 
   /// For storing cursor type info for an unimplemented type.
-  String unimplementedReason;
+  String? unimplementedReason;
 
   Type._({
-    @required this.broadType,
+    required this.broadType,
     this.child,
     this.struc,
     this.nativeType,
@@ -102,13 +100,13 @@
   factory Type.pointer(Type child) {
     return Type._(broadType: BroadType.Pointer, child: child);
   }
-  factory Type.struct(Struc struc) {
+  factory Type.struct(Struc? struc) {
     return Type._(broadType: BroadType.Struct, struc: struc);
   }
-  factory Type.nativeFunc(Typedef nativeFunc) {
+  factory Type.nativeFunc(Typedef? nativeFunc) {
     return Type._(broadType: BroadType.NativeFunction, nativeFunc: nativeFunc);
   }
-  factory Type.nativeType(SupportedNativeType nativeType) {
+  factory Type.nativeType(SupportedNativeType? nativeType) {
     return Type._(broadType: BroadType.NativeType, nativeType: nativeType);
   }
   factory Type.constantArray(int length, Type elementType) {
@@ -143,7 +141,7 @@
   /// double[2][3] has base [Type] of double.
   Type getBaseType() {
     if (child != null) {
-      return child.getBaseType();
+      return child!.getBaseType();
     } else {
       return this;
     }
@@ -155,7 +153,7 @@
   Type getBaseArrayType() {
     if (broadType == BroadType.ConstantArray ||
         broadType == BroadType.IncompleteArray) {
-      return child.getBaseArrayType();
+      return child!.getBaseArrayType();
     } else {
       return this;
     }
@@ -167,21 +165,21 @@
   String getCType(Writer w) {
     switch (broadType) {
       case BroadType.NativeType:
-        return '${w.ffiLibraryPrefix}.${_primitives[nativeType].c}';
+        return '${w.ffiLibraryPrefix}.${_primitives[nativeType!]!.c}';
       case BroadType.Pointer:
-        return '${w.ffiLibraryPrefix}.Pointer<${child.getCType(w)}>';
+        return '${w.ffiLibraryPrefix}.Pointer<${child!.getCType(w)}>';
       case BroadType.Struct:
-        return '${struc.name}';
+        return '${struc!.name}';
       case BroadType.NativeFunction:
-        return '${w.ffiLibraryPrefix}.NativeFunction<${nativeFunc.name}>';
+        return '${w.ffiLibraryPrefix}.NativeFunction<${nativeFunc!.name}>';
       case BroadType
           .IncompleteArray: // Array parameters are treated as Pointers in C.
-        return '${w.ffiLibraryPrefix}.Pointer<${child.getCType(w)}>';
+        return '${w.ffiLibraryPrefix}.Pointer<${child!.getCType(w)}>';
       case BroadType
           .ConstantArray: // Array parameters are treated as Pointers in C.
-        return '${w.ffiLibraryPrefix}.Pointer<${child.getCType(w)}>';
+        return '${w.ffiLibraryPrefix}.Pointer<${child!.getCType(w)}>';
       case BroadType.Boolean: // Booleans are treated as uint8.
-        return '${w.ffiLibraryPrefix}.${_primitives[SupportedNativeType.Uint8].c}';
+        return '${w.ffiLibraryPrefix}.${_primitives[SupportedNativeType.Uint8]!.c}';
       case BroadType.Handle:
         return '${w.ffiLibraryPrefix}.Handle';
       default:
@@ -189,24 +187,24 @@
     }
   }
 
-  String getDartType(Writer w) {
+  String? getDartType(Writer w) {
     switch (broadType) {
       case BroadType.NativeType:
-        return _primitives[nativeType].dart;
+        return _primitives[nativeType!]!.dart;
       case BroadType.Pointer:
-        return '${w.ffiLibraryPrefix}.Pointer<${child.getCType(w)}>';
+        return '${w.ffiLibraryPrefix}.Pointer<${child!.getCType(w)}>';
       case BroadType.Struct:
-        return '${struc.name}';
+        return '${struc!.name}';
       case BroadType.NativeFunction:
-        return '${w.ffiLibraryPrefix}.NativeFunction<${nativeFunc.name}>';
+        return '${w.ffiLibraryPrefix}.NativeFunction<${nativeFunc!.name}>';
       case BroadType
           .IncompleteArray: // Array parameters are treated as Pointers in C.
-        return '${w.ffiLibraryPrefix}.Pointer<${child.getCType(w)}>';
+        return '${w.ffiLibraryPrefix}.Pointer<${child!.getCType(w)}>';
       case BroadType
           .ConstantArray: // Array parameters are treated as Pointers in C.
-        return '${w.ffiLibraryPrefix}.Pointer<${child.getCType(w)}>';
+        return '${w.ffiLibraryPrefix}.Pointer<${child!.getCType(w)}>';
       case BroadType.Boolean: // Booleans are treated as uint8.
-        return _primitives[SupportedNativeType.Uint8].dart;
+        return _primitives[SupportedNativeType.Uint8]!.dart;
       case BroadType.Handle:
         return 'Object';
       default:
diff --git a/lib/src/code_generator/typedef.dart b/lib/src/code_generator/typedef.dart
index 7f3c684..f1ba5ad 100644
--- a/lib/src/code_generator/typedef.dart
+++ b/lib/src/code_generator/typedef.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:ffigen/src/code_generator.dart';
-import 'package:meta/meta.dart';
 
 import 'func.dart' show Parameter;
 import 'type.dart';
@@ -25,17 +24,17 @@
 /// Note: re-set [name] after resolving name conflicts.
 class Typedef {
   String name;
-  String dartDoc;
+  String? dartDoc;
   final Type returnType;
   final TypedefType typedefType;
   final List<Parameter> parameters;
 
   Typedef({
-    @required this.name,
+    required this.name,
     this.dartDoc,
-    @required this.returnType,
-    @required this.typedefType,
-    List<Parameter> parameters,
+    required this.returnType,
+    required this.typedefType,
+    List<Parameter>? parameters,
   }) : parameters = parameters ?? [];
 
   /// Returns the [Typedef] dependencies required by this typedef including itself.
@@ -44,12 +43,12 @@
     for (final p in parameters) {
       final base = p.type.getBaseType();
       if (base.broadType == BroadType.NativeFunction) {
-        dep.addAll(base.nativeFunc.getDependencies());
+        dep.addAll(base.nativeFunc!.getDependencies());
       }
     }
     final returnTypeBase = returnType.getBaseType();
     if (returnTypeBase.broadType == BroadType.NativeFunction) {
-      dep.addAll(returnTypeBase.nativeFunc.getDependencies());
+      dep.addAll(returnTypeBase.nativeFunc!.getDependencies());
     }
     dep.add(this);
     return dep;
@@ -58,7 +57,7 @@
   String toTypedefString(Writer w) {
     final s = StringBuffer();
     if (dartDoc != null) {
-      s.write(makeDartDoc(dartDoc));
+      s.write(makeDartDoc(dartDoc!));
     }
     final typedefName = name;
     final paramNamer = UniqueNamer({});
diff --git a/lib/src/code_generator/writer.dart b/lib/src/code_generator/writer.dart
index 0a02ed0..9e91099 100644
--- a/lib/src/code_generator/writer.dart
+++ b/lib/src/code_generator/writer.dart
@@ -3,14 +3,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:ffigen/src/code_generator/utils.dart';
-import 'package:meta/meta.dart';
 
 import 'binding.dart';
 import 'typedef.dart';
 
 /// To store generated String bindings.
 class Writer {
-  final String header;
+  final String? header;
 
   /// Holds bindings, which lookup symbols.
   final List<Binding> lookUpBindings;
@@ -18,42 +17,41 @@
   /// Holds bindings which don't lookup symbols.
   final List<Binding> noLookUpBindings;
 
-  String _className;
-  final String classDocComment;
+  String? _className;
+  final String? classDocComment;
 
-  String _ffiLibraryPrefix;
-  String get ffiLibraryPrefix => _ffiLibraryPrefix;
+  String? _ffiLibraryPrefix;
+  String? get ffiLibraryPrefix => _ffiLibraryPrefix;
 
-  String _dylibIdentifier;
-  String get dylibIdentifier => _dylibIdentifier;
+  String? _dylibIdentifier;
+  String? get dylibIdentifier => _dylibIdentifier;
 
   final bool dartBool;
 
   /// Initial namers set after running constructor. Namers are reset to this
   /// initial state everytime [generate] is called.
-  UniqueNamer _initialTopLevelUniqueNamer, _initialWrapperLevelUniqueNamer;
+  late UniqueNamer _initialTopLevelUniqueNamer, _initialWrapperLevelUniqueNamer;
 
   /// Used by [Binding]s for generating required code.
-  UniqueNamer _topLevelUniqueNamer, _wrapperLevelUniqueNamer;
+  late UniqueNamer _topLevelUniqueNamer, _wrapperLevelUniqueNamer;
   UniqueNamer get topLevelUniqueNamer => _topLevelUniqueNamer;
   UniqueNamer get wrapperLevelUniqueNamer => _wrapperLevelUniqueNamer;
 
-  String _arrayHelperClassPrefix;
+  String? _arrayHelperClassPrefix;
 
   /// Guaranteed to be a unique prefix.
-  String get arrayHelperClassPrefix => _arrayHelperClassPrefix;
+  String? get arrayHelperClassPrefix => _arrayHelperClassPrefix;
 
   /// [_usedUpNames] should contain names of all the declarations which are
   /// already used. This is used to avoid name collisions.
   Writer({
-    @required this.lookUpBindings,
-    @required this.noLookUpBindings,
-    @required String className,
-    @required this.dartBool,
+    required this.lookUpBindings,
+    required this.noLookUpBindings,
+    required String className,
+    required this.dartBool,
     this.classDocComment,
     this.header,
-  })  : assert(className != null),
-        assert(dartBool != null) {
+  }) {
     final globalLevelNameSet = noLookUpBindings.map((e) => e.name).toSet();
     final wrapperLevelNameSet = lookUpBindings.map((e) => e.name).toSet();
     final allNameSet = <String>{}
@@ -66,8 +64,8 @@
 
     /// Wrapper class name must be unique among all names.
     _className = allLevelsUniqueNamer.makeUnique(className);
-    _initialWrapperLevelUniqueNamer.markUsed(_className);
-    _initialTopLevelUniqueNamer.markUsed(_className);
+    _initialWrapperLevelUniqueNamer.markUsed(_className!);
+    _initialTopLevelUniqueNamer.markUsed(_className!);
 
     /// [_ffiLibraryPrefix] should be unique in top level.
     _ffiLibraryPrefix = _initialTopLevelUniqueNamer.makeUnique('ffi');
@@ -81,7 +79,7 @@
     _arrayHelperClassPrefix = base;
     var suffixInt = 0;
     for (var i = 0; i < allNameSet.length; i++) {
-      if (allNameSet.elementAt(i).startsWith(_arrayHelperClassPrefix)) {
+      if (allNameSet.elementAt(i).startsWith(_arrayHelperClassPrefix!)) {
         // Not a unique prefix, start over with a new suffix.
         i = -1;
         suffixInt++;
@@ -137,7 +135,7 @@
     if (lookUpBindings.isNotEmpty) {
       // Write doc comment for wrapper class.
       if (classDocComment != null) {
-        s.write(makeDartDoc(classDocComment));
+        s.write(makeDartDoc(classDocComment!));
       }
       // Write wrapper classs.
       s.write('class $_className{\n');
diff --git a/lib/src/config_provider/config.dart b/lib/src/config_provider/config.dart
index 04ae2a9..0649de5 100644
--- a/lib/src/config_provider/config.dart
+++ b/lib/src/config_provider/config.dart
@@ -22,79 +22,80 @@
 class Config {
   /// output file name.
   String get output => _output;
-  String _output;
+  late String _output;
   // Holds headers and filters for header.
   Headers get headers => _headers;
-  Headers _headers;
+  late Headers _headers;
 
   /// CommandLine Arguments to pass to clang_compiler.
   List<String> get compilerOpts => _compilerOpts;
-  List<String> _compilerOpts;
+  late List<String> _compilerOpts;
 
   /// Declaration config for Functions.
   Declaration get functionDecl => _functionDecl;
-  Declaration _functionDecl;
+  late Declaration _functionDecl;
 
   /// Declaration config for Structs.
   Declaration get structDecl => _structDecl;
-  Declaration _structDecl;
+  late Declaration _structDecl;
 
   /// Declaration config for Enums.
   Declaration get enumClassDecl => _enumClassDecl;
-  Declaration _enumClassDecl;
+  late Declaration _enumClassDecl;
 
   /// Declaration config for Unnamed enum constants.
   Declaration get unnamedEnumConstants => _unnamedEnumConstants;
-  Declaration _unnamedEnumConstants;
+  late Declaration _unnamedEnumConstants;
 
   /// Declaration config for Macro constants.
   Declaration get macroDecl => _macroDecl;
-  Declaration _macroDecl;
+  late Declaration _macroDecl;
 
   /// If generated bindings should be sorted alphabetically.
   bool get sort => _sort;
-  bool _sort;
+  late bool _sort;
 
   /// If typedef of supported types(int8_t) should be directly used.
   bool get useSupportedTypedefs => _useSupportedTypedefs;
-  bool _useSupportedTypedefs;
+  late bool _useSupportedTypedefs;
 
   /// Stores typedef name to NativeType mappings specified by user.
   Map<String, SupportedNativeType> get typedefNativeTypeMappings =>
       _typedefNativeTypeMappings;
-  Map<String, SupportedNativeType> _typedefNativeTypeMappings;
+  late Map<String, SupportedNativeType> _typedefNativeTypeMappings;
 
   /// Extracted Doc comment type.
   CommentType get commentType => _commentType;
-  CommentType _commentType;
+  late CommentType _commentType;
 
   /// If tool should generate array workarounds.
   ///
   /// If false(default), structs with inline array members will have all its
   /// members removed.
   bool get arrayWorkaround => _arrayWorkaround;
-  bool _arrayWorkaround;
+  late bool _arrayWorkaround;
 
   /// If dart bool should be generated for C booleans.
   bool get dartBool => _dartBool;
-  bool _dartBool;
+  late bool _dartBool;
 
   /// Name of the wrapper class.
   String get wrapperName => _wrapperName;
-  String _wrapperName;
+  late String _wrapperName;
 
   /// Doc comment for the wrapper class.
   String get wrapperDocComment => _wrapperDocComment;
-  String _wrapperDocComment;
+  late String _wrapperDocComment;
 
   /// Header of the generated bindings.
   String get preamble => _preamble;
-  String _preamble;
-  Config._();
+  late String _preamble;
 
   /// If `Dart_Handle` should be mapped with Handle/Object.
   bool get useDartHandle => _useDartHandle;
-  bool _useDartHandle;
+  late bool _useDartHandle;
+
+  Config._();
 
   /// Create config from Yaml map.
   factory Config.fromYaml(YamlMap map) {
@@ -118,8 +119,8 @@
     for (final key in specs.keys) {
       final spec = specs[key];
       if (map.containsKey(key)) {
-        _result = _result && spec.validator(key, map[key]);
-      } else if (spec.requirement == Requirement.yes) {
+        _result = _result && spec!.validator(key, map[key]);
+      } else if (spec!.requirement == Requirement.yes) {
         _logger.severe("Key '${key}' is required.");
         _result = false;
       } else if (spec.requirement == Requirement.prefer) {
@@ -143,9 +144,9 @@
     for (final key in specs.keys) {
       final spec = specs[key];
       if (map.containsKey(key)) {
-        spec.extractedResult(spec.extractor(map[key]));
+        spec!.extractedResult(spec.extractor(map[key]));
       } else {
-        spec.extractedResult(spec.defaultValue?.call());
+        spec!.extractedResult(spec.defaultValue?.call());
       }
     }
   }
@@ -227,7 +228,7 @@
           final map = result as Map<int, SupportedNativeType>;
           for (final key in map.keys) {
             if (cxTypeKindToSupportedNativeTypes.containsKey(key)) {
-              cxTypeKindToSupportedNativeTypes[key] = map[key];
+              cxTypeKindToSupportedNativeTypes[key] = map[key]!;
             }
           }
         },
@@ -283,7 +284,7 @@
         defaultValue: () => 'NativeLibrary',
         extractedResult: (dynamic result) => _wrapperName = result as String,
       ),
-      strings.description: Specification<String>(
+      strings.description: Specification<String?>(
         requirement: Requirement.prefer,
         validator: nonEmptyStringValidator,
         extractor: stringExtractor,
diff --git a/lib/src/config_provider/config_types.dart b/lib/src/config_provider/config_types.dart
index fa59745..9ce215c 100644
--- a/lib/src/config_provider/config_types.dart
+++ b/lib/src/config_provider/config_types.dart
@@ -4,7 +4,6 @@
 
 /// Contains all the neccesary classes required by config.
 
-import 'package:meta/meta.dart';
 import 'package:quiver/pattern.dart' as quiver;
 
 class CommentType {
@@ -33,15 +32,15 @@
 class Specification<E> {
   final bool Function(String name, dynamic value) validator;
   final E Function(dynamic map) extractor;
-  final E Function() defaultValue;
+  final E Function()? defaultValue;
 
   final Requirement requirement;
   final void Function(dynamic result) extractedResult;
 
   Specification({
-    @required this.extractedResult,
-    @required this.validator,
-    @required this.extractor,
+    required this.extractedResult,
+    required this.validator,
+    required this.extractor,
     this.defaultValue,
     this.requirement = Requirement.no,
   });
@@ -59,7 +58,7 @@
   /// Include filter for headers.
   final HeaderIncludeFilter includeFilter;
 
-  Headers({List<String> entryPoints, HeaderIncludeFilter includeFilter})
+  Headers({List<String>? entryPoints, HeaderIncludeFilter? includeFilter})
       : entryPoints = entryPoints ?? [],
         includeFilter = includeFilter ?? GlobHeaderFilter();
 }
@@ -69,7 +68,7 @@
 }
 
 class GlobHeaderFilter extends HeaderIncludeFilter {
-  List<quiver.Glob> includeGlobs = [];
+  List<quiver.Glob>? includeGlobs = [];
 
   GlobHeaderFilter({
     this.includeGlobs,
@@ -78,14 +77,14 @@
   @override
   bool shouldInclude(String header) {
     // Return true if header was included.
-    for (final globPattern in includeGlobs) {
+    for (final globPattern in includeGlobs!) {
       if (quiver.matchesFull(globPattern, header)) {
         return true;
       }
     }
 
     // If any includedInclusionHeaders is provided, return false.
-    if (includeGlobs.isNotEmpty) {
+    if (includeGlobs!.isNotEmpty) {
       return false;
     } else {
       return true;
@@ -100,9 +99,9 @@
   final MemberRenamer _memberRenamer;
 
   Declaration({
-    Includer includer,
-    Renamer renamer,
-    MemberRenamer memberRenamer,
+    Includer? includer,
+    Renamer? renamer,
+    MemberRenamer? memberRenamer,
   })  : _includer = includer ?? Includer(),
         _renamer = renamer ?? Renamer(),
         _memberRenamer = memberRenamer ?? MemberRenamer();
@@ -137,7 +136,7 @@
   String rename(String str) {
     if (matches(str)) {
       // Get match.
-      final regExpMatch = regExp.firstMatch(str);
+      final regExpMatch = regExp.firstMatch(str)!;
 
       /// Get group values.
       /// E.g for `str`: `clang_dispose` and `regExp`: `clang_(.*)`
@@ -149,8 +148,8 @@
       /// Replace all `$<int>` symbols with respective groups (if any).
       final result =
           replacementPattern.replaceAllMapped(replaceGroupRegexp, (match) {
-        final groupInt = int.parse(match.group(1));
-        return groups[groupInt];
+        final groupInt = int.parse(match.group(1)!);
+        return groups[groupInt]!;
       });
       return result;
     } else {
@@ -172,10 +171,10 @@
   final Set<String> _excludeFull;
 
   Includer({
-    List<RegExp> includeMatchers,
-    Set<String> includeFull,
-    List<RegExp> excludeMatchers,
-    Set<String> excludeFull,
+    List<RegExp>? includeMatchers,
+    Set<String>? includeFull,
+    List<RegExp>? excludeMatchers,
+    Set<String>? excludeFull,
   })  : _includeMatchers = includeMatchers ?? [],
         _includeFull = includeFull ?? {},
         _excludeMatchers = excludeMatchers ?? [],
@@ -221,8 +220,8 @@
   final List<RegExpRenamer> _renameMatchers;
 
   Renamer({
-    List<RegExpRenamer> renamePatterns,
-    Map<String, String> renameFull,
+    List<RegExpRenamer>? renamePatterns,
+    Map<String, String>? renameFull,
   })  : _renameMatchers = renamePatterns ?? [],
         _renameFull = renameFull ?? {};
 
@@ -233,7 +232,7 @@
   String rename(String name) {
     // Apply full rename (if any).
     if (_renameFull.containsKey(name)) {
-      return _renameFull[name];
+      return _renameFull[name]!;
     }
 
     // Apply rename regexp (if matches).
@@ -273,21 +272,21 @@
   final Map<String, Renamer> _cache = {};
 
   MemberRenamer({
-    Map<String, Renamer> memberRenameFull,
-    List<RegExpMemberRenamer> memberRenamePattern,
+    Map<String, Renamer>? memberRenameFull,
+    List<RegExpMemberRenamer>? memberRenamePattern,
   })  : _memberRenameFull = memberRenameFull ?? {},
         _memberRenameMatchers = memberRenamePattern ?? [];
 
   String rename(String declaration, String member) {
     if (_cache.containsKey(declaration)) {
-      return _cache[declaration].rename(member);
+      return _cache[declaration]!.rename(member);
     }
 
     // Apply full rename (if any).
     if (_memberRenameFull.containsKey(declaration)) {
       // Add to cache.
-      _cache[declaration] = _memberRenameFull[declaration];
-      return _cache[declaration].rename(member);
+      _cache[declaration] = _memberRenameFull[declaration]!;
+      return _cache[declaration]!.rename(member);
     }
 
     // Apply rename regexp (if matches).
@@ -295,7 +294,7 @@
       if (renamer.matchesDeclarationName(declaration)) {
         // Add to cache.
         _cache[declaration] = renamer.memberRenamer;
-        return _cache[declaration].rename(member);
+        return _cache[declaration]!.rename(member);
       }
     }
 
diff --git a/lib/src/config_provider/spec_utils.dart b/lib/src/config_provider/spec_utils.dart
index 3ed5767..2df7939 100644
--- a/lib/src/config_provider/spec_utils.dart
+++ b/lib/src/config_provider/spec_utils.dart
@@ -44,11 +44,11 @@
 
 Map<int, SupportedNativeType> sizemapExtractor(dynamic yamlConfig) {
   final resultMap = <int, SupportedNativeType>{};
-  final sizemap = yamlConfig as YamlMap;
+  final sizemap = yamlConfig as YamlMap?;
   if (sizemap != null) {
     for (final typeName in strings.sizemap_native_mapping.keys) {
       if (sizemap.containsKey(typeName)) {
-        final cxTypeInt = strings.sizemap_native_mapping[typeName];
+        final cxTypeInt = strings.sizemap_native_mapping[typeName] as int;
         final byteSize = sizemap[typeName] as int;
         resultMap[cxTypeInt] = nativeSupportedType(byteSize,
             signed: typeName.contains('unsigned') ? false : true);
@@ -73,7 +73,7 @@
 
 Map<String, SupportedNativeType> typedefmapExtractor(dynamic yamlConfig) {
   final resultMap = <String, SupportedNativeType>{};
-  final typedefmap = yamlConfig as YamlMap;
+  final typedefmap = yamlConfig as YamlMap?;
   if (typedefmap != null) {
     for (final typeName in typedefmap.keys) {
       if (typedefmap[typeName] is String &&
@@ -81,7 +81,7 @@
               .containsKey(typedefmap[typeName])) {
         // Map this typename to specified supportedNativeType.
         resultMap[typeName as String] =
-            strings.supportedNativeType_mappings[typedefmap[typeName]];
+            strings.supportedNativeType_mappings[typedefmap[typeName]]!;
       }
     }
   }
@@ -103,7 +103,7 @@
 }
 
 List<String> compilerOptsExtractor(dynamic value) =>
-    (value as String)?.split(' ');
+    (value as String).split(' ');
 
 bool compilerOptsValidator(String name, dynamic value) =>
     checkType<String>([name], value);
@@ -153,7 +153,7 @@
     _logger.severe("Expected '$name -> ${strings.entryPoints}' to be a Map.");
     return false;
   } else {
-    for (final key in (value as YamlMap).keys) {
+    for (final key in value.keys) {
       if (key == strings.entryPoints || key == strings.includeDirectives) {
         if (!checkType<YamlList>([name, key as String], value[key])) {
           return false;
@@ -218,7 +218,7 @@
   final memberRenamePatterns = <RegExpMemberRenamer>[];
   final memberRenamerFull = <String, Renamer>{};
 
-  final include = (yamlMap[strings.include] as YamlList)?.cast<String>();
+  final include = (yamlMap[strings.include] as YamlList?)?.cast<String>();
   if (include != null) {
     for (final str in include) {
       if (isFullDeclarationName(str)) {
@@ -229,7 +229,7 @@
     }
   }
 
-  final exclude = (yamlMap[strings.exclude] as YamlList)?.cast<String>();
+  final exclude = (yamlMap[strings.exclude] as YamlList?)?.cast<String>();
   if (exclude != null) {
     for (final str in exclude) {
       if (isFullDeclarationName(str)) {
@@ -240,34 +240,34 @@
     }
   }
 
-  final rename = (yamlMap[strings.rename] as YamlMap)?.cast<String, String>();
+  final rename = (yamlMap[strings.rename] as YamlMap?)?.cast<String, String>();
 
   if (rename != null) {
     for (final str in rename.keys) {
       if (isFullDeclarationName(str)) {
-        renameFull[str] = rename[str];
+        renameFull[str] = rename[str]!;
       } else {
         renamePatterns
-            .add(RegExpRenamer(RegExp(str, dotAll: true), rename[str]));
+            .add(RegExpRenamer(RegExp(str, dotAll: true), rename[str]!));
       }
     }
   }
 
   final memberRename =
-      (yamlMap[strings.memberRename] as YamlMap)?.cast<String, YamlMap>();
+      (yamlMap[strings.memberRename] as YamlMap?)?.cast<String, YamlMap>();
 
   if (memberRename != null) {
     for (final decl in memberRename.keys) {
       final renamePatterns = <RegExpRenamer>[];
       final renameFull = <String, String>{};
 
-      final memberRenameMap = memberRename[decl].cast<String, String>();
+      final memberRenameMap = memberRename[decl]!.cast<String, String>();
       for (final member in memberRenameMap.keys) {
         if (isFullDeclarationName(member)) {
-          renameFull[member] = memberRenameMap[member];
+          renameFull[member] = memberRenameMap[member]!;
         } else {
           renamePatterns.add(RegExpRenamer(
-              RegExp(member, dotAll: true), memberRenameMap[member]));
+              RegExp(member, dotAll: true), memberRenameMap[member]!));
         }
       }
       if (isFullDeclarationName(decl)) {
@@ -321,7 +321,7 @@
         } else {
           for (final subkey in value[key].keys) {
             if (!checkType<String>(
-                [name, key as String, subkey as String], value[key][subkey])) {
+                [name, key, subkey as String], value[key][subkey])) {
               _result = false;
             }
           }
@@ -332,15 +332,14 @@
         } else {
           for (final declNameKey in value[key].keys) {
             if (!checkType<YamlMap>(
-                [name, key as String, declNameKey as String],
-                value[key][declNameKey])) {
+                [name, key, declNameKey as String], value[key][declNameKey])) {
               _result = false;
             } else {
               for (final memberNameKey in value[key][declNameKey].keys) {
                 if (!checkType<String>([
                   name,
-                  key as String,
-                  declNameKey as String,
+                  key,
+                  declNameKey,
                   memberNameKey as String,
                 ], value[key][declNameKey][memberNameKey])) {
                   _result = false;
diff --git a/lib/src/find_resource.dart b/lib/src/find_resource.dart
index 7a8df1a..c16d47f 100644
--- a/lib/src/find_resource.dart
+++ b/lib/src/find_resource.dart
@@ -11,7 +11,7 @@
 final _logger = Logger('ffigen.find_resource');
 
 /// Find the `.dart_tool/` folder, returns `null` if unable to find it.
-Uri findDotDartTool() {
+Uri? findDotDartTool() {
   // HACK: Because 'dart:isolate' is unavailable in Flutter we have no means
   //       by which we can find the location of the package_config.json file.
   //       Which we need, because the binary library created by:
@@ -32,7 +32,7 @@
 }
 
 /// Get [Uri] for [posixPath] inside ffigen's rootUri.
-Uri _findInPackageRoot(String posixPath) {
+Uri? _findInPackageRoot(String posixPath) {
   var root = Directory.current.uri;
   // Traverse up until we see a `.dart_tool/package_config.json` file.
   do {
@@ -67,22 +67,22 @@
   return null;
 }
 
-Uri findWrapper(String wrapperName) {
+Uri? findWrapper(String wrapperName) {
   return _findInPackageRoot('lib/src/clang_library/$wrapperName');
 }
 
-Uri _findFfigenPubspecYaml() {
+Uri? _findFfigenPubspecYaml() {
   return _findInPackageRoot('pubspec.yaml');
 }
 
-String _ffigenVersion;
+String? _ffigenVersion;
 
 /// Gets ffigen version from ffigen's pubspec.yaml
-String get ffigenVersion {
+String? get ffigenVersion {
   if (_ffigenVersion == null) {
     try {
       final yaml =
-          loadYaml(File.fromUri(_findFfigenPubspecYaml()).readAsStringSync())
+          loadYaml(File.fromUri(_findFfigenPubspecYaml()!).readAsStringSync())
               as YamlMap;
       final rawVersion = yaml['version'] as String;
       // Sanitize name to be used as a file name.
diff --git a/lib/src/header_parser/clang_bindings/clang_bindings.dart b/lib/src/header_parser/clang_bindings/clang_bindings.dart
index b108302..db84398 100644
--- a/lib/src/header_parser/clang_bindings/clang_bindings.dart
+++ b/lib/src/header_parser/clang_bindings/clang_bindings.dart
@@ -61,13 +61,13 @@
     _clang_createIndex ??=
         _dylib.lookupFunction<_c_clang_createIndex, _dart_clang_createIndex>(
             'clang_createIndex');
-    return _clang_createIndex(
+    return _clang_createIndex!(
       excludeDeclarationsFromPCH,
       displayDiagnostics,
     );
   }
 
-  _dart_clang_createIndex _clang_createIndex;
+  _dart_clang_createIndex? _clang_createIndex;
 
   /// Destroy the given index.
   ///
@@ -79,12 +79,12 @@
     _clang_disposeIndex ??=
         _dylib.lookupFunction<_c_clang_disposeIndex, _dart_clang_disposeIndex>(
             'clang_disposeIndex');
-    return _clang_disposeIndex(
+    return _clang_disposeIndex!(
       index,
     );
   }
 
-  _dart_clang_disposeIndex _clang_disposeIndex;
+  _dart_clang_disposeIndex? _clang_disposeIndex;
 
   /// Determine the number of diagnostics produced for the given
   /// translation unit.
@@ -94,12 +94,12 @@
     _clang_getNumDiagnostics ??= _dylib.lookupFunction<
         _c_clang_getNumDiagnostics,
         _dart_clang_getNumDiagnostics>('clang_getNumDiagnostics');
-    return _clang_getNumDiagnostics(
+    return _clang_getNumDiagnostics!(
       Unit,
     );
   }
 
-  _dart_clang_getNumDiagnostics _clang_getNumDiagnostics;
+  _dart_clang_getNumDiagnostics? _clang_getNumDiagnostics;
 
   /// Retrieve a diagnostic associated with the given translation unit.
   ///
@@ -114,13 +114,13 @@
   ) {
     _clang_getDiagnostic ??= _dylib.lookupFunction<_c_clang_getDiagnostic,
         _dart_clang_getDiagnostic>('clang_getDiagnostic');
-    return _clang_getDiagnostic(
+    return _clang_getDiagnostic!(
       Unit,
       Index,
     );
   }
 
-  _dart_clang_getDiagnostic _clang_getDiagnostic;
+  _dart_clang_getDiagnostic? _clang_getDiagnostic;
 
   /// Destroy a diagnostic.
   void clang_disposeDiagnostic(
@@ -129,12 +129,12 @@
     _clang_disposeDiagnostic ??= _dylib.lookupFunction<
         _c_clang_disposeDiagnostic,
         _dart_clang_disposeDiagnostic>('clang_disposeDiagnostic');
-    return _clang_disposeDiagnostic(
+    return _clang_disposeDiagnostic!(
       Diagnostic,
     );
   }
 
-  _dart_clang_disposeDiagnostic _clang_disposeDiagnostic;
+  _dart_clang_disposeDiagnostic? _clang_disposeDiagnostic;
 
   /// Same as \c clang_parseTranslationUnit2, but returns
   /// the \c CXTranslationUnit instead of an error code.  In case of an error this
@@ -152,7 +152,7 @@
     _clang_parseTranslationUnit ??= _dylib.lookupFunction<
         _c_clang_parseTranslationUnit,
         _dart_clang_parseTranslationUnit>('clang_parseTranslationUnit');
-    return _clang_parseTranslationUnit(
+    return _clang_parseTranslationUnit!(
       CIdx,
       source_filename,
       command_line_args,
@@ -163,7 +163,7 @@
     );
   }
 
-  _dart_clang_parseTranslationUnit _clang_parseTranslationUnit;
+  _dart_clang_parseTranslationUnit? _clang_parseTranslationUnit;
 
   /// Destroy the specified CXTranslationUnit object.
   void clang_disposeTranslationUnit(
@@ -172,12 +172,12 @@
     _clang_disposeTranslationUnit ??= _dylib.lookupFunction<
         _c_clang_disposeTranslationUnit,
         _dart_clang_disposeTranslationUnit>('clang_disposeTranslationUnit');
-    return _clang_disposeTranslationUnit(
+    return _clang_disposeTranslationUnit!(
       arg0,
     );
   }
 
-  _dart_clang_disposeTranslationUnit _clang_disposeTranslationUnit;
+  _dart_clang_disposeTranslationUnit? _clang_disposeTranslationUnit;
 
   /// Returns the kind of the evaluated result.
   int clang_EvalResult_getKind(
@@ -186,12 +186,12 @@
     _clang_EvalResult_getKind ??= _dylib.lookupFunction<
         _c_clang_EvalResult_getKind,
         _dart_clang_EvalResult_getKind>('clang_EvalResult_getKind');
-    return _clang_EvalResult_getKind(
+    return _clang_EvalResult_getKind!(
       E,
     );
   }
 
-  _dart_clang_EvalResult_getKind _clang_EvalResult_getKind;
+  _dart_clang_EvalResult_getKind? _clang_EvalResult_getKind;
 
   /// Returns the evaluation result as integer if the
   /// kind is Int.
@@ -201,12 +201,12 @@
     _clang_EvalResult_getAsInt ??= _dylib.lookupFunction<
         _c_clang_EvalResult_getAsInt,
         _dart_clang_EvalResult_getAsInt>('clang_EvalResult_getAsInt');
-    return _clang_EvalResult_getAsInt(
+    return _clang_EvalResult_getAsInt!(
       E,
     );
   }
 
-  _dart_clang_EvalResult_getAsInt _clang_EvalResult_getAsInt;
+  _dart_clang_EvalResult_getAsInt? _clang_EvalResult_getAsInt;
 
   /// Returns the evaluation result as a long long integer if the
   /// kind is Int. This prevents overflows that may happen if the result is
@@ -217,12 +217,12 @@
     _clang_EvalResult_getAsLongLong ??= _dylib.lookupFunction<
         _c_clang_EvalResult_getAsLongLong,
         _dart_clang_EvalResult_getAsLongLong>('clang_EvalResult_getAsLongLong');
-    return _clang_EvalResult_getAsLongLong(
+    return _clang_EvalResult_getAsLongLong!(
       E,
     );
   }
 
-  _dart_clang_EvalResult_getAsLongLong _clang_EvalResult_getAsLongLong;
+  _dart_clang_EvalResult_getAsLongLong? _clang_EvalResult_getAsLongLong;
 
   /// Returns the evaluation result as double if the
   /// kind is double.
@@ -232,12 +232,12 @@
     _clang_EvalResult_getAsDouble ??= _dylib.lookupFunction<
         _c_clang_EvalResult_getAsDouble,
         _dart_clang_EvalResult_getAsDouble>('clang_EvalResult_getAsDouble');
-    return _clang_EvalResult_getAsDouble(
+    return _clang_EvalResult_getAsDouble!(
       E,
     );
   }
 
-  _dart_clang_EvalResult_getAsDouble _clang_EvalResult_getAsDouble;
+  _dart_clang_EvalResult_getAsDouble? _clang_EvalResult_getAsDouble;
 
   /// Returns the evaluation result as a constant string if the
   /// kind is other than Int or float. User must not free this pointer,
@@ -249,12 +249,12 @@
     _clang_EvalResult_getAsStr ??= _dylib.lookupFunction<
         _c_clang_EvalResult_getAsStr,
         _dart_clang_EvalResult_getAsStr>('clang_EvalResult_getAsStr');
-    return _clang_EvalResult_getAsStr(
+    return _clang_EvalResult_getAsStr!(
       E,
     );
   }
 
-  _dart_clang_EvalResult_getAsStr _clang_EvalResult_getAsStr;
+  _dart_clang_EvalResult_getAsStr? _clang_EvalResult_getAsStr;
 
   /// Disposes the created Eval memory.
   void clang_EvalResult_dispose(
@@ -263,24 +263,24 @@
     _clang_EvalResult_dispose ??= _dylib.lookupFunction<
         _c_clang_EvalResult_dispose,
         _dart_clang_EvalResult_dispose>('clang_EvalResult_dispose');
-    return _clang_EvalResult_dispose(
+    return _clang_EvalResult_dispose!(
       E,
     );
   }
 
-  _dart_clang_EvalResult_dispose _clang_EvalResult_dispose;
+  _dart_clang_EvalResult_dispose? _clang_EvalResult_dispose;
 
   ffi.Pointer<ffi.Int8> clang_getCString_wrap(
     ffi.Pointer<CXString> string,
   ) {
     _clang_getCString_wrap ??= _dylib.lookupFunction<_c_clang_getCString_wrap,
         _dart_clang_getCString_wrap>('clang_getCString_wrap');
-    return _clang_getCString_wrap(
+    return _clang_getCString_wrap!(
       string,
     );
   }
 
-  _dart_clang_getCString_wrap _clang_getCString_wrap;
+  _dart_clang_getCString_wrap? _clang_getCString_wrap;
 
   void clang_disposeString_wrap(
     ffi.Pointer<CXString> string,
@@ -288,12 +288,12 @@
     _clang_disposeString_wrap ??= _dylib.lookupFunction<
         _c_clang_disposeString_wrap,
         _dart_clang_disposeString_wrap>('clang_disposeString_wrap');
-    return _clang_disposeString_wrap(
+    return _clang_disposeString_wrap!(
       string,
     );
   }
 
-  _dart_clang_disposeString_wrap _clang_disposeString_wrap;
+  _dart_clang_disposeString_wrap? _clang_disposeString_wrap;
 
   int clang_getCursorKind_wrap(
     ffi.Pointer<CXCursor> cursor,
@@ -301,12 +301,12 @@
     _clang_getCursorKind_wrap ??= _dylib.lookupFunction<
         _c_clang_getCursorKind_wrap,
         _dart_clang_getCursorKind_wrap>('clang_getCursorKind_wrap');
-    return _clang_getCursorKind_wrap(
+    return _clang_getCursorKind_wrap!(
       cursor,
     );
   }
 
-  _dart_clang_getCursorKind_wrap _clang_getCursorKind_wrap;
+  _dart_clang_getCursorKind_wrap? _clang_getCursorKind_wrap;
 
   ffi.Pointer<CXString> clang_getCursorKindSpelling_wrap(
     int kind,
@@ -315,12 +315,12 @@
             _c_clang_getCursorKindSpelling_wrap,
             _dart_clang_getCursorKindSpelling_wrap>(
         'clang_getCursorKindSpelling_wrap');
-    return _clang_getCursorKindSpelling_wrap(
+    return _clang_getCursorKindSpelling_wrap!(
       kind,
     );
   }
 
-  _dart_clang_getCursorKindSpelling_wrap _clang_getCursorKindSpelling_wrap;
+  _dart_clang_getCursorKindSpelling_wrap? _clang_getCursorKindSpelling_wrap;
 
   ffi.Pointer<CXType> clang_getCursorType_wrap(
     ffi.Pointer<CXCursor> cursor,
@@ -328,12 +328,12 @@
     _clang_getCursorType_wrap ??= _dylib.lookupFunction<
         _c_clang_getCursorType_wrap,
         _dart_clang_getCursorType_wrap>('clang_getCursorType_wrap');
-    return _clang_getCursorType_wrap(
+    return _clang_getCursorType_wrap!(
       cursor,
     );
   }
 
-  _dart_clang_getCursorType_wrap _clang_getCursorType_wrap;
+  _dart_clang_getCursorType_wrap? _clang_getCursorType_wrap;
 
   ffi.Pointer<CXString> clang_getTypeSpelling_wrap(
     ffi.Pointer<CXType> type,
@@ -341,25 +341,25 @@
     _clang_getTypeSpelling_wrap ??= _dylib.lookupFunction<
         _c_clang_getTypeSpelling_wrap,
         _dart_clang_getTypeSpelling_wrap>('clang_getTypeSpelling_wrap');
-    return _clang_getTypeSpelling_wrap(
+    return _clang_getTypeSpelling_wrap!(
       type,
     );
   }
 
-  _dart_clang_getTypeSpelling_wrap _clang_getTypeSpelling_wrap;
+  _dart_clang_getTypeSpelling_wrap? _clang_getTypeSpelling_wrap;
 
   ffi.Pointer<CXString> clang_getTypeKindSpelling_wrap(
-    int typeKind,
+    int? typeKind,
   ) {
     _clang_getTypeKindSpelling_wrap ??= _dylib.lookupFunction<
         _c_clang_getTypeKindSpelling_wrap,
         _dart_clang_getTypeKindSpelling_wrap>('clang_getTypeKindSpelling_wrap');
-    return _clang_getTypeKindSpelling_wrap(
+    return _clang_getTypeKindSpelling_wrap!(
       typeKind,
     );
   }
 
-  _dart_clang_getTypeKindSpelling_wrap _clang_getTypeKindSpelling_wrap;
+  _dart_clang_getTypeKindSpelling_wrap? _clang_getTypeKindSpelling_wrap;
 
   ffi.Pointer<CXType> clang_getResultType_wrap(
     ffi.Pointer<CXType> functionType,
@@ -367,12 +367,12 @@
     _clang_getResultType_wrap ??= _dylib.lookupFunction<
         _c_clang_getResultType_wrap,
         _dart_clang_getResultType_wrap>('clang_getResultType_wrap');
-    return _clang_getResultType_wrap(
+    return _clang_getResultType_wrap!(
       functionType,
     );
   }
 
-  _dart_clang_getResultType_wrap _clang_getResultType_wrap;
+  _dart_clang_getResultType_wrap? _clang_getResultType_wrap;
 
   ffi.Pointer<CXType> clang_getPointeeType_wrap(
     ffi.Pointer<CXType> pointerType,
@@ -380,12 +380,12 @@
     _clang_getPointeeType_wrap ??= _dylib.lookupFunction<
         _c_clang_getPointeeType_wrap,
         _dart_clang_getPointeeType_wrap>('clang_getPointeeType_wrap');
-    return _clang_getPointeeType_wrap(
+    return _clang_getPointeeType_wrap!(
       pointerType,
     );
   }
 
-  _dart_clang_getPointeeType_wrap _clang_getPointeeType_wrap;
+  _dart_clang_getPointeeType_wrap? _clang_getPointeeType_wrap;
 
   ffi.Pointer<CXType> clang_getCanonicalType_wrap(
     ffi.Pointer<CXType> typerefType,
@@ -393,12 +393,12 @@
     _clang_getCanonicalType_wrap ??= _dylib.lookupFunction<
         _c_clang_getCanonicalType_wrap,
         _dart_clang_getCanonicalType_wrap>('clang_getCanonicalType_wrap');
-    return _clang_getCanonicalType_wrap(
+    return _clang_getCanonicalType_wrap!(
       typerefType,
     );
   }
 
-  _dart_clang_getCanonicalType_wrap _clang_getCanonicalType_wrap;
+  _dart_clang_getCanonicalType_wrap? _clang_getCanonicalType_wrap;
 
   ffi.Pointer<CXType> clang_Type_getNamedType_wrap(
     ffi.Pointer<CXType> elaboratedType,
@@ -406,12 +406,12 @@
     _clang_Type_getNamedType_wrap ??= _dylib.lookupFunction<
         _c_clang_Type_getNamedType_wrap,
         _dart_clang_Type_getNamedType_wrap>('clang_Type_getNamedType_wrap');
-    return _clang_Type_getNamedType_wrap(
+    return _clang_Type_getNamedType_wrap!(
       elaboratedType,
     );
   }
 
-  _dart_clang_Type_getNamedType_wrap _clang_Type_getNamedType_wrap;
+  _dart_clang_Type_getNamedType_wrap? _clang_Type_getNamedType_wrap;
 
   ffi.Pointer<CXCursor> clang_getTypeDeclaration_wrap(
     ffi.Pointer<CXType> cxtype,
@@ -419,12 +419,12 @@
     _clang_getTypeDeclaration_wrap ??= _dylib.lookupFunction<
         _c_clang_getTypeDeclaration_wrap,
         _dart_clang_getTypeDeclaration_wrap>('clang_getTypeDeclaration_wrap');
-    return _clang_getTypeDeclaration_wrap(
+    return _clang_getTypeDeclaration_wrap!(
       cxtype,
     );
   }
 
-  _dart_clang_getTypeDeclaration_wrap _clang_getTypeDeclaration_wrap;
+  _dart_clang_getTypeDeclaration_wrap? _clang_getTypeDeclaration_wrap;
 
   ffi.Pointer<CXType> clang_getTypedefDeclUnderlyingType_wrap(
     ffi.Pointer<CXCursor> cxcursor,
@@ -433,12 +433,12 @@
             _c_clang_getTypedefDeclUnderlyingType_wrap,
             _dart_clang_getTypedefDeclUnderlyingType_wrap>(
         'clang_getTypedefDeclUnderlyingType_wrap');
-    return _clang_getTypedefDeclUnderlyingType_wrap(
+    return _clang_getTypedefDeclUnderlyingType_wrap!(
       cxcursor,
     );
   }
 
-  _dart_clang_getTypedefDeclUnderlyingType_wrap
+  _dart_clang_getTypedefDeclUnderlyingType_wrap?
       _clang_getTypedefDeclUnderlyingType_wrap;
 
   /// The name of parameter, struct, typedef.
@@ -448,12 +448,12 @@
     _clang_getCursorSpelling_wrap ??= _dylib.lookupFunction<
         _c_clang_getCursorSpelling_wrap,
         _dart_clang_getCursorSpelling_wrap>('clang_getCursorSpelling_wrap');
-    return _clang_getCursorSpelling_wrap(
+    return _clang_getCursorSpelling_wrap!(
       cursor,
     );
   }
 
-  _dart_clang_getCursorSpelling_wrap _clang_getCursorSpelling_wrap;
+  _dart_clang_getCursorSpelling_wrap? _clang_getCursorSpelling_wrap;
 
   ffi.Pointer<CXCursor> clang_getTranslationUnitCursor_wrap(
     ffi.Pointer<CXTranslationUnitImpl> tu,
@@ -462,12 +462,12 @@
             _c_clang_getTranslationUnitCursor_wrap,
             _dart_clang_getTranslationUnitCursor_wrap>(
         'clang_getTranslationUnitCursor_wrap');
-    return _clang_getTranslationUnitCursor_wrap(
+    return _clang_getTranslationUnitCursor_wrap!(
       tu,
     );
   }
 
-  _dart_clang_getTranslationUnitCursor_wrap
+  _dart_clang_getTranslationUnitCursor_wrap?
       _clang_getTranslationUnitCursor_wrap;
 
   ffi.Pointer<CXString> clang_formatDiagnostic_wrap(
@@ -477,13 +477,13 @@
     _clang_formatDiagnostic_wrap ??= _dylib.lookupFunction<
         _c_clang_formatDiagnostic_wrap,
         _dart_clang_formatDiagnostic_wrap>('clang_formatDiagnostic_wrap');
-    return _clang_formatDiagnostic_wrap(
+    return _clang_formatDiagnostic_wrap!(
       diag,
       opts,
     );
   }
 
-  _dart_clang_formatDiagnostic_wrap _clang_formatDiagnostic_wrap;
+  _dart_clang_formatDiagnostic_wrap? _clang_formatDiagnostic_wrap;
 
   /// Visitor is a function pointer with parameters having pointers to cxcursor
   /// instead of cxcursor by default.
@@ -495,14 +495,14 @@
     _clang_visitChildren_wrap ??= _dylib.lookupFunction<
         _c_clang_visitChildren_wrap,
         _dart_clang_visitChildren_wrap>('clang_visitChildren_wrap');
-    return _clang_visitChildren_wrap(
+    return _clang_visitChildren_wrap!(
       parent,
       _modifiedVisitor,
       uid,
     );
   }
 
-  _dart_clang_visitChildren_wrap _clang_visitChildren_wrap;
+  _dart_clang_visitChildren_wrap? _clang_visitChildren_wrap;
 
   int clang_Cursor_getNumArguments_wrap(
     ffi.Pointer<CXCursor> cursor,
@@ -511,12 +511,12 @@
             _c_clang_Cursor_getNumArguments_wrap,
             _dart_clang_Cursor_getNumArguments_wrap>(
         'clang_Cursor_getNumArguments_wrap');
-    return _clang_Cursor_getNumArguments_wrap(
+    return _clang_Cursor_getNumArguments_wrap!(
       cursor,
     );
   }
 
-  _dart_clang_Cursor_getNumArguments_wrap _clang_Cursor_getNumArguments_wrap;
+  _dart_clang_Cursor_getNumArguments_wrap? _clang_Cursor_getNumArguments_wrap;
 
   ffi.Pointer<CXCursor> clang_Cursor_getArgument_wrap(
     ffi.Pointer<CXCursor> cursor,
@@ -525,13 +525,13 @@
     _clang_Cursor_getArgument_wrap ??= _dylib.lookupFunction<
         _c_clang_Cursor_getArgument_wrap,
         _dart_clang_Cursor_getArgument_wrap>('clang_Cursor_getArgument_wrap');
-    return _clang_Cursor_getArgument_wrap(
+    return _clang_Cursor_getArgument_wrap!(
       cursor,
       i,
     );
   }
 
-  _dart_clang_Cursor_getArgument_wrap _clang_Cursor_getArgument_wrap;
+  _dart_clang_Cursor_getArgument_wrap? _clang_Cursor_getArgument_wrap;
 
   int clang_getNumArgTypes_wrap(
     ffi.Pointer<CXType> cxtype,
@@ -539,12 +539,12 @@
     _clang_getNumArgTypes_wrap ??= _dylib.lookupFunction<
         _c_clang_getNumArgTypes_wrap,
         _dart_clang_getNumArgTypes_wrap>('clang_getNumArgTypes_wrap');
-    return _clang_getNumArgTypes_wrap(
+    return _clang_getNumArgTypes_wrap!(
       cxtype,
     );
   }
 
-  _dart_clang_getNumArgTypes_wrap _clang_getNumArgTypes_wrap;
+  _dart_clang_getNumArgTypes_wrap? _clang_getNumArgTypes_wrap;
 
   ffi.Pointer<CXType> clang_getArgType_wrap(
     ffi.Pointer<CXType> cxtype,
@@ -552,13 +552,13 @@
   ) {
     _clang_getArgType_wrap ??= _dylib.lookupFunction<_c_clang_getArgType_wrap,
         _dart_clang_getArgType_wrap>('clang_getArgType_wrap');
-    return _clang_getArgType_wrap(
+    return _clang_getArgType_wrap!(
       cxtype,
       i,
     );
   }
 
-  _dart_clang_getArgType_wrap _clang_getArgType_wrap;
+  _dart_clang_getArgType_wrap? _clang_getArgType_wrap;
 
   int clang_getEnumConstantDeclValue_wrap(
     ffi.Pointer<CXCursor> cursor,
@@ -567,12 +567,12 @@
             _c_clang_getEnumConstantDeclValue_wrap,
             _dart_clang_getEnumConstantDeclValue_wrap>(
         'clang_getEnumConstantDeclValue_wrap');
-    return _clang_getEnumConstantDeclValue_wrap(
+    return _clang_getEnumConstantDeclValue_wrap!(
       cursor,
     );
   }
 
-  _dart_clang_getEnumConstantDeclValue_wrap
+  _dart_clang_getEnumConstantDeclValue_wrap?
       _clang_getEnumConstantDeclValue_wrap;
 
   /// Returns non-zero if the ranges are the same, zero if they differ.
@@ -582,13 +582,13 @@
   ) {
     _clang_equalRanges_wrap ??= _dylib.lookupFunction<_c_clang_equalRanges_wrap,
         _dart_clang_equalRanges_wrap>('clang_equalRanges_wrap');
-    return _clang_equalRanges_wrap(
+    return _clang_equalRanges_wrap!(
       c1,
       c2,
     );
   }
 
-  _dart_clang_equalRanges_wrap _clang_equalRanges_wrap;
+  _dart_clang_equalRanges_wrap? _clang_equalRanges_wrap;
 
   /// Returns the comment range.
   ffi.Pointer<CXSourceRange> clang_Cursor_getCommentRange_wrap(
@@ -598,12 +598,12 @@
             _c_clang_Cursor_getCommentRange_wrap,
             _dart_clang_Cursor_getCommentRange_wrap>(
         'clang_Cursor_getCommentRange_wrap');
-    return _clang_Cursor_getCommentRange_wrap(
+    return _clang_Cursor_getCommentRange_wrap!(
       cursor,
     );
   }
 
-  _dart_clang_Cursor_getCommentRange_wrap _clang_Cursor_getCommentRange_wrap;
+  _dart_clang_Cursor_getCommentRange_wrap? _clang_Cursor_getCommentRange_wrap;
 
   /// Returns the raw comment.
   ffi.Pointer<CXString> clang_Cursor_getRawCommentText_wrap(
@@ -613,12 +613,12 @@
             _c_clang_Cursor_getRawCommentText_wrap,
             _dart_clang_Cursor_getRawCommentText_wrap>(
         'clang_Cursor_getRawCommentText_wrap');
-    return _clang_Cursor_getRawCommentText_wrap(
+    return _clang_Cursor_getRawCommentText_wrap!(
       cursor,
     );
   }
 
-  _dart_clang_Cursor_getRawCommentText_wrap
+  _dart_clang_Cursor_getRawCommentText_wrap?
       _clang_Cursor_getRawCommentText_wrap;
 
   /// Returns the first paragraph of doxygen doc comment.
@@ -629,12 +629,12 @@
             _c_clang_Cursor_getBriefCommentText_wrap,
             _dart_clang_Cursor_getBriefCommentText_wrap>(
         'clang_Cursor_getBriefCommentText_wrap');
-    return _clang_Cursor_getBriefCommentText_wrap(
+    return _clang_Cursor_getBriefCommentText_wrap!(
       cursor,
     );
   }
 
-  _dart_clang_Cursor_getBriefCommentText_wrap
+  _dart_clang_Cursor_getBriefCommentText_wrap?
       _clang_Cursor_getBriefCommentText_wrap;
 
   ffi.Pointer<CXSourceLocation> clang_getCursorLocation_wrap(
@@ -643,12 +643,12 @@
     _clang_getCursorLocation_wrap ??= _dylib.lookupFunction<
         _c_clang_getCursorLocation_wrap,
         _dart_clang_getCursorLocation_wrap>('clang_getCursorLocation_wrap');
-    return _clang_getCursorLocation_wrap(
+    return _clang_getCursorLocation_wrap!(
       cursor,
     );
   }
 
-  _dart_clang_getCursorLocation_wrap _clang_getCursorLocation_wrap;
+  _dart_clang_getCursorLocation_wrap? _clang_getCursorLocation_wrap;
 
   void clang_getFileLocation_wrap(
     ffi.Pointer<CXSourceLocation> location,
@@ -660,7 +660,7 @@
     _clang_getFileLocation_wrap ??= _dylib.lookupFunction<
         _c_clang_getFileLocation_wrap,
         _dart_clang_getFileLocation_wrap>('clang_getFileLocation_wrap');
-    return _clang_getFileLocation_wrap(
+    return _clang_getFileLocation_wrap!(
       location,
       file,
       line,
@@ -669,19 +669,19 @@
     );
   }
 
-  _dart_clang_getFileLocation_wrap _clang_getFileLocation_wrap;
+  _dart_clang_getFileLocation_wrap? _clang_getFileLocation_wrap;
 
   ffi.Pointer<CXString> clang_getFileName_wrap(
     ffi.Pointer<ffi.Void> SFile,
   ) {
     _clang_getFileName_wrap ??= _dylib.lookupFunction<_c_clang_getFileName_wrap,
         _dart_clang_getFileName_wrap>('clang_getFileName_wrap');
-    return _clang_getFileName_wrap(
+    return _clang_getFileName_wrap!(
       SFile,
     );
   }
 
-  _dart_clang_getFileName_wrap _clang_getFileName_wrap;
+  _dart_clang_getFileName_wrap? _clang_getFileName_wrap;
 
   int clang_getNumElements_wrap(
     ffi.Pointer<CXType> cxtype,
@@ -689,12 +689,12 @@
     _clang_getNumElements_wrap ??= _dylib.lookupFunction<
         _c_clang_getNumElements_wrap,
         _dart_clang_getNumElements_wrap>('clang_getNumElements_wrap');
-    return _clang_getNumElements_wrap(
+    return _clang_getNumElements_wrap!(
       cxtype,
     );
   }
 
-  _dart_clang_getNumElements_wrap _clang_getNumElements_wrap;
+  _dart_clang_getNumElements_wrap? _clang_getNumElements_wrap;
 
   ffi.Pointer<CXType> clang_getArrayElementType_wrap(
     ffi.Pointer<CXType> cxtype,
@@ -702,12 +702,12 @@
     _clang_getArrayElementType_wrap ??= _dylib.lookupFunction<
         _c_clang_getArrayElementType_wrap,
         _dart_clang_getArrayElementType_wrap>('clang_getArrayElementType_wrap');
-    return _clang_getArrayElementType_wrap(
+    return _clang_getArrayElementType_wrap!(
       cxtype,
     );
   }
 
-  _dart_clang_getArrayElementType_wrap _clang_getArrayElementType_wrap;
+  _dart_clang_getArrayElementType_wrap? _clang_getArrayElementType_wrap;
 
   int clang_Cursor_isMacroFunctionLike_wrap(
     ffi.Pointer<CXCursor> cursor,
@@ -716,12 +716,12 @@
             _c_clang_Cursor_isMacroFunctionLike_wrap,
             _dart_clang_Cursor_isMacroFunctionLike_wrap>(
         'clang_Cursor_isMacroFunctionLike_wrap');
-    return _clang_Cursor_isMacroFunctionLike_wrap(
+    return _clang_Cursor_isMacroFunctionLike_wrap!(
       cursor,
     );
   }
 
-  _dart_clang_Cursor_isMacroFunctionLike_wrap
+  _dart_clang_Cursor_isMacroFunctionLike_wrap?
       _clang_Cursor_isMacroFunctionLike_wrap;
 
   int clang_Cursor_isMacroBuiltin_wrap(
@@ -731,12 +731,12 @@
             _c_clang_Cursor_isMacroBuiltin_wrap,
             _dart_clang_Cursor_isMacroBuiltin_wrap>(
         'clang_Cursor_isMacroBuiltin_wrap');
-    return _clang_Cursor_isMacroBuiltin_wrap(
+    return _clang_Cursor_isMacroBuiltin_wrap!(
       cursor,
     );
   }
 
-  _dart_clang_Cursor_isMacroBuiltin_wrap _clang_Cursor_isMacroBuiltin_wrap;
+  _dart_clang_Cursor_isMacroBuiltin_wrap? _clang_Cursor_isMacroBuiltin_wrap;
 
   ffi.Pointer<ffi.Void> clang_Cursor_Evaluate_wrap(
     ffi.Pointer<CXCursor> cursor,
@@ -744,12 +744,12 @@
     _clang_Cursor_Evaluate_wrap ??= _dylib.lookupFunction<
         _c_clang_Cursor_Evaluate_wrap,
         _dart_clang_Cursor_Evaluate_wrap>('clang_Cursor_Evaluate_wrap');
-    return _clang_Cursor_Evaluate_wrap(
+    return _clang_Cursor_Evaluate_wrap!(
       cursor,
     );
   }
 
-  _dart_clang_Cursor_Evaluate_wrap _clang_Cursor_Evaluate_wrap;
+  _dart_clang_Cursor_Evaluate_wrap? _clang_Cursor_Evaluate_wrap;
 
   int clang_Cursor_isAnonymous_wrap(
     ffi.Pointer<CXCursor> cursor,
@@ -757,12 +757,12 @@
     _clang_Cursor_isAnonymous_wrap ??= _dylib.lookupFunction<
         _c_clang_Cursor_isAnonymous_wrap,
         _dart_clang_Cursor_isAnonymous_wrap>('clang_Cursor_isAnonymous_wrap');
-    return _clang_Cursor_isAnonymous_wrap(
+    return _clang_Cursor_isAnonymous_wrap!(
       cursor,
     );
   }
 
-  _dart_clang_Cursor_isAnonymous_wrap _clang_Cursor_isAnonymous_wrap;
+  _dart_clang_Cursor_isAnonymous_wrap? _clang_Cursor_isAnonymous_wrap;
 
   int clang_Cursor_isAnonymousRecordDecl_wrap(
     ffi.Pointer<CXCursor> cursor,
@@ -771,12 +771,12 @@
             _c_clang_Cursor_isAnonymousRecordDecl_wrap,
             _dart_clang_Cursor_isAnonymousRecordDecl_wrap>(
         'clang_Cursor_isAnonymousRecordDecl_wrap');
-    return _clang_Cursor_isAnonymousRecordDecl_wrap(
+    return _clang_Cursor_isAnonymousRecordDecl_wrap!(
       cursor,
     );
   }
 
-  _dart_clang_Cursor_isAnonymousRecordDecl_wrap
+  _dart_clang_Cursor_isAnonymousRecordDecl_wrap?
       _clang_Cursor_isAnonymousRecordDecl_wrap;
 
   ffi.Pointer<CXString> clang_getCursorUSR_wrap(
@@ -785,12 +785,12 @@
     _clang_getCursorUSR_wrap ??= _dylib.lookupFunction<
         _c_clang_getCursorUSR_wrap,
         _dart_clang_getCursorUSR_wrap>('clang_getCursorUSR_wrap');
-    return _clang_getCursorUSR_wrap(
+    return _clang_getCursorUSR_wrap!(
       cursor,
     );
   }
 
-  _dart_clang_getCursorUSR_wrap _clang_getCursorUSR_wrap;
+  _dart_clang_getCursorUSR_wrap? _clang_getCursorUSR_wrap;
 
   int clang_getFieldDeclBitWidth_wrap(
     ffi.Pointer<CXCursor> cursor,
@@ -799,12 +799,12 @@
             _c_clang_getFieldDeclBitWidth_wrap,
             _dart_clang_getFieldDeclBitWidth_wrap>(
         'clang_getFieldDeclBitWidth_wrap');
-    return _clang_getFieldDeclBitWidth_wrap(
+    return _clang_getFieldDeclBitWidth_wrap!(
       cursor,
     );
   }
 
-  _dart_clang_getFieldDeclBitWidth_wrap _clang_getFieldDeclBitWidth_wrap;
+  _dart_clang_getFieldDeclBitWidth_wrap? _clang_getFieldDeclBitWidth_wrap;
 }
 
 /// A character string.
@@ -814,10 +814,10 @@
 /// Use \c clang_getCString() to retrieve the string data and, once finished
 /// with the string data, call \c clang_disposeString() to free the string.
 class CXString extends ffi.Struct {
-  ffi.Pointer<ffi.Void> data;
+  ffi.Pointer<ffi.Void>? data;
 
   @ffi.Uint32()
-  int private_flags;
+  int? private_flags;
 }
 
 class CXTranslationUnitImpl extends ffi.Struct {}
@@ -831,14 +831,14 @@
   /// The file whose contents have not yet been saved.
   ///
   /// This file must already exist in the file system.
-  ffi.Pointer<ffi.Int8> Filename;
+  ffi.Pointer<ffi.Int8>? Filename;
 
   /// A buffer containing the unsaved contents of this file.
-  ffi.Pointer<ffi.Int8> Contents;
+  ffi.Pointer<ffi.Int8>? Contents;
 
   /// The length of the unsaved contents of this buffer.
   @ffi.Uint64()
-  int Length;
+  int? Length;
 }
 
 /// Identifies a specific source location within a translation
@@ -847,14 +847,14 @@
 /// Use clang_getExpansionLocation() or clang_getSpellingLocation()
 /// to map a source location to a particular file, line, and column.
 class CXSourceLocation extends ffi.Struct {
-  ffi.Pointer<ffi.Void> _unique_ptr_data_item_0;
-  ffi.Pointer<ffi.Void> _unique_ptr_data_item_1;
+  ffi.Pointer<ffi.Void>? _unique_ptr_data_item_0;
+  ffi.Pointer<ffi.Void>? _unique_ptr_data_item_1;
 
   /// Helper for array `ptr_data`.
   ArrayHelper_CXSourceLocation_ptr_data_level0 get ptr_data =>
       ArrayHelper_CXSourceLocation_ptr_data_level0(this, [2], 0, 0);
   @ffi.Uint32()
-  int int_data;
+  int? int_data;
 }
 
 /// Helper for array `ptr_data` in struct `CXSourceLocation`.
@@ -873,7 +873,7 @@
     }
   }
 
-  ffi.Pointer<ffi.Void> operator [](int index) {
+  ffi.Pointer<ffi.Void>? operator [](int index) {
     _checkBounds(index);
     switch (_absoluteIndex + index) {
       case 0:
@@ -905,17 +905,17 @@
 /// Use clang_getRangeStart() and clang_getRangeEnd() to retrieve the
 /// starting and end locations from a source range, respectively.
 class CXSourceRange extends ffi.Struct {
-  ffi.Pointer<ffi.Void> _unique_ptr_data_item_0;
-  ffi.Pointer<ffi.Void> _unique_ptr_data_item_1;
+  ffi.Pointer<ffi.Void>? _unique_ptr_data_item_0;
+  ffi.Pointer<ffi.Void>? _unique_ptr_data_item_1;
 
   /// Helper for array `ptr_data`.
   ArrayHelper_CXSourceRange_ptr_data_level0 get ptr_data =>
       ArrayHelper_CXSourceRange_ptr_data_level0(this, [2], 0, 0);
   @ffi.Uint32()
-  int begin_int_data;
+  int? begin_int_data;
 
   @ffi.Uint32()
-  int end_int_data;
+  int? end_int_data;
 }
 
 /// Helper for array `ptr_data` in struct `CXSourceRange`.
@@ -934,7 +934,7 @@
     }
   }
 
-  ffi.Pointer<ffi.Void> operator [](int index) {
+  ffi.Pointer<ffi.Void>? operator [](int index) {
     _checkBounds(index);
     switch (_absoluteIndex + index) {
       case 0:
@@ -1939,14 +1939,14 @@
 /// source code into the AST.
 class CXCursor extends ffi.Struct {
   @ffi.Int32()
-  int kind;
+  int? kind;
 
   @ffi.Int32()
-  int xdata;
+  int? xdata;
 
-  ffi.Pointer<ffi.Void> _unique_data_item_0;
-  ffi.Pointer<ffi.Void> _unique_data_item_1;
-  ffi.Pointer<ffi.Void> _unique_data_item_2;
+  ffi.Pointer<ffi.Void>? _unique_data_item_0;
+  ffi.Pointer<ffi.Void>? _unique_data_item_1;
+  ffi.Pointer<ffi.Void>? _unique_data_item_2;
 
   /// Helper for array `data`.
   ArrayHelper_CXCursor_data_level0 get data =>
@@ -1969,7 +1969,7 @@
     }
   }
 
-  ffi.Pointer<ffi.Void> operator [](int index) {
+  ffi.Pointer<ffi.Void>? operator [](int index) {
     _checkBounds(index);
     switch (_absoluteIndex + index) {
       case 0:
@@ -2134,10 +2134,10 @@
 /// The type of an element in the abstract syntax tree.
 class CXType extends ffi.Struct {
   @ffi.Int32()
-  int kind;
+  int? kind;
 
-  ffi.Pointer<ffi.Void> _unique_data_item_0;
-  ffi.Pointer<ffi.Void> _unique_data_item_1;
+  ffi.Pointer<ffi.Void>? _unique_data_item_0;
+  ffi.Pointer<ffi.Void>? _unique_data_item_1;
 
   /// Helper for array `data`.
   ArrayHelper_CXType_data_level0 get data =>
@@ -2160,7 +2160,7 @@
     }
   }
 
-  ffi.Pointer<ffi.Void> operator [](int index) {
+  ffi.Pointer<ffi.Void>? operator [](int index) {
     _checkBounds(index);
     switch (_absoluteIndex + index) {
       case 0:
@@ -2398,7 +2398,7 @@
 );
 
 typedef _dart_clang_getTypeKindSpelling_wrap = ffi.Pointer<CXString> Function(
-  int typeKind,
+  int? typeKind,
 );
 
 typedef _c_clang_getResultType_wrap = ffi.Pointer<CXType> Function(
diff --git a/lib/src/header_parser/data.dart b/lib/src/header_parser/data.dart
index c307a26..462f069 100644
--- a/lib/src/header_parser/data.dart
+++ b/lib/src/header_parser/data.dart
@@ -7,7 +7,6 @@
 
 import 'package:ffigen/src/code_generator.dart' show Constant;
 import 'package:ffigen/src/config_provider.dart' show Config;
-import 'package:meta/meta.dart';
 import 'clang_bindings/clang_bindings.dart' show Clang;
 
 import 'utils.dart';
@@ -16,19 +15,19 @@
 
 /// Holds configurations.
 Config get config => _config;
-Config _config;
+late Config _config;
 
 /// Holds clang functions.
 Clang get clang => _clang;
-Clang _clang;
+late Clang _clang;
 
 // Tracks seen status for bindings
 BindingsIndex get bindingsIndex => _bindingsIndex;
-BindingsIndex _bindingsIndex;
+BindingsIndex _bindingsIndex = BindingsIndex();
 
 /// Used for naming typedefs.
 IncrementalNamer get incrementalNamer => _incrementalNamer;
-IncrementalNamer _incrementalNamer;
+IncrementalNamer _incrementalNamer = IncrementalNamer();
 
 /// Holds the unique id refering to this isolate.
 ///
@@ -38,13 +37,13 @@
 
 /// Saved macros, Key: prefixedName, Value originalName.
 Map<String, Macro> get savedMacros => _savedMacros;
-Map<String, Macro> _savedMacros;
+Map<String, Macro> _savedMacros = {};
 
 /// Saved unnamed EnumConstants.
 List<Constant> get unnamedEnumConstants => _unnamedEnumConstants;
-List<Constant> _unnamedEnumConstants;
+List<Constant> _unnamedEnumConstants = [];
 
-void initializeGlobals({@required Config config, @required Clang clang}) {
+void initializeGlobals({required Config config, required Clang clang}) {
   _config = config;
   _clang = clang;
   _incrementalNamer = IncrementalNamer();
diff --git a/lib/src/header_parser/includer.dart b/lib/src/header_parser/includer.dart
index 5c8775b..67efefc 100644
--- a/lib/src/header_parser/includer.dart
+++ b/lib/src/header_parser/includer.dart
@@ -10,8 +10,7 @@
 bool shouldIncludeStruct(String usr, String name) {
   if (bindingsIndex.isSeenStruct(usr) || name == '') {
     return false;
-  } else if (config.structDecl == null ||
-      config.structDecl.shouldInclude(name)) {
+  } else if (config.structDecl.shouldInclude(name)) {
     return true;
   } else {
     return false;
@@ -21,8 +20,7 @@
 bool shouldIncludeFunc(String usr, String name) {
   if (bindingsIndex.isSeenFunc(usr) || name == '') {
     return false;
-  } else if (config.functionDecl == null ||
-      config.functionDecl.shouldInclude(name)) {
+  } else if (config.functionDecl.shouldInclude(name)) {
     return true;
   } else {
     return false;
@@ -32,8 +30,7 @@
 bool shouldIncludeEnumClass(String usr, String name) {
   if (bindingsIndex.isSeenEnumClass(usr) || name == '') {
     return false;
-  } else if (config.enumClassDecl == null ||
-      config.enumClassDecl.shouldInclude(name)) {
+  } else if (config.enumClassDecl.shouldInclude(name)) {
     return true;
   } else {
     return false;
@@ -43,8 +40,7 @@
 bool shouldIncludeUnnamedEnumConstant(String usr, String name) {
   if (bindingsIndex.isSeenUnnamedEnumConstant(usr) || name == '') {
     return false;
-  } else if (config.unnamedEnumConstants == null ||
-      config.unnamedEnumConstants.shouldInclude(name)) {
+  } else if (config.unnamedEnumConstants.shouldInclude(name)) {
     return true;
   } else {
     return false;
@@ -54,7 +50,7 @@
 bool shouldIncludeMacro(String usr, String name) {
   if (bindingsIndex.isSeenMacro(usr) || name == '') {
     return false;
-  } else if (config.macroDecl == null || config.macroDecl.shouldInclude(name)) {
+  } else if (config.macroDecl.shouldInclude(name)) {
     return true;
   } else {
     return false;
@@ -66,7 +62,7 @@
 
 /// True if a cursor should be included based on headers config, used on root
 /// declarations.
-bool shouldIncludeRootCursor(String sourceFile) {
+bool shouldIncludeRootCursor(String? sourceFile) {
   // Handle null in case of system headers or macros.
   if (sourceFile == null) {
     return false;
@@ -78,5 +74,5 @@
         config.headers.includeFilter.shouldInclude(sourceFile);
   }
 
-  return _headerCache[sourceFile];
+  return _headerCache[sourceFile]!;
 }
diff --git a/lib/src/header_parser/parser.dart b/lib/src/header_parser/parser.dart
index 0cbe3c8..7ce92fe 100644
--- a/lib/src/header_parser/parser.dart
+++ b/lib/src/header_parser/parser.dart
@@ -48,11 +48,12 @@
 /// Initializes parser, clears any previous values.
 void initParser(Config c) {
   // Find full path of dynamic library and initialize bindings.
-  if (findDotDartTool() == null) {
+  final ddt = findDotDartTool();
+  if (ddt == null) {
     throw Exception('Unable to find .dart_tool.');
   } else {
     final fullDylibPath = path.join(
-      findDotDartTool().toFilePath(),
+      ddt.toFilePath(),
       strings.ffigenFolderName,
       strings.dylibFileName,
     );
@@ -78,10 +79,8 @@
     config.compilerOpts.add(strings.fparseAllComments);
   }
 
-  if (config.compilerOpts != null) {
-    clangCmdArgs = createDynamicStringArray(config.compilerOpts);
-    cmdLen = config.compilerOpts.length;
-  }
+  clangCmdArgs = createDynamicStringArray(config.compilerOpts);
+  cmdLen = config.compilerOpts.length;
 
   // Contains all bindings. A set ensures we never have duplicates.
   final bindings = <Binding>{};
@@ -114,7 +113,7 @@
     logTuDiagnostics(tu, _logger, headerLocation);
     final rootCursor = clang.clang_getTranslationUnitCursor_wrap(tu);
 
-    bindings.addAll(parseTranslationUnit(rootCursor));
+    bindings.addAll(parseTranslationUnit(rootCursor)!);
 
     // Cleanup.
     rootCursor.dispose();
@@ -125,11 +124,9 @@
   bindings.addAll(unnamedEnumConstants);
 
   // Parse all saved macros.
-  bindings.addAll(parseSavedMacros());
+  bindings.addAll(parseSavedMacros()!);
 
-  if (config.compilerOpts != null) {
-    clangCmdArgs.dispose(config.compilerOpts.length);
-  }
+  clangCmdArgs.dispose(config.compilerOpts.length);
   clang.clang_disposeIndex(index);
   return bindings.toList();
 }
diff --git a/lib/src/header_parser/sub_parsers/enumdecl_parser.dart b/lib/src/header_parser/sub_parsers/enumdecl_parser.dart
index 06ce225..1097372 100644
--- a/lib/src/header_parser/sub_parsers/enumdecl_parser.dart
+++ b/lib/src/header_parser/sub_parsers/enumdecl_parser.dart
@@ -18,18 +18,18 @@
 
 /// Holds temporary information regarding [EnumClass] while parsing.
 class _ParsedEnum {
-  EnumClass enumClass;
+  EnumClass? enumClass;
   _ParsedEnum();
 }
 
 final _stack = Stack<_ParsedEnum>();
 
 /// Parses a function declaration.
-EnumClass parseEnumDeclaration(
+EnumClass? parseEnumDeclaration(
   Pointer<clang_types.CXCursor> cursor, {
 
   /// Optionally provide name to use (useful in case enum is inside a typedef).
-  String name,
+  String? name,
 }) {
   _stack.push(_ParsedEnum());
   final enumUsr = cursor.usr();
@@ -50,14 +50,14 @@
       originalName: enumName,
       name: config.enumClassDecl.renameUsingConfig(enumName),
     );
-    bindingsIndex.addEnumClassToSeen(enumUsr, _stack.top.enumClass);
+    bindingsIndex.addEnumClassToSeen(enumUsr, _stack.top.enumClass!);
     _addEnumConstant(cursor);
   }
   if (bindingsIndex.isSeenEnumClass(enumUsr)) {
     _stack.top.enumClass = bindingsIndex.getSeenEnumClass(enumUsr);
 
     // If enum is seen, update it's name.
-    _stack.top.enumClass.name =
+    _stack.top.enumClass!.name =
         config.enumClassDecl.renameUsingConfig(enumName);
   }
 
@@ -102,7 +102,7 @@
 
 /// Adds the parameter to func in [functiondecl_parser.dart].
 void _addEnumConstantToEnumClass(Pointer<clang_types.CXCursor> cursor) {
-  _stack.top.enumClass.enumConstants.add(
+  _stack.top.enumClass!.enumConstants.add(
     EnumConstant(
         dartDoc: getCursorDocComment(
           cursor,
@@ -110,7 +110,7 @@
         ),
         originalName: cursor.spelling(),
         name: config.enumClassDecl.renameMemberUsingConfig(
-          _stack.top.enumClass.originalName,
+          _stack.top.enumClass!.originalName,
           cursor.spelling(),
         ),
         value: clang.clang_getEnumConstantDeclValue_wrap(cursor)),
diff --git a/lib/src/header_parser/sub_parsers/functiondecl_parser.dart b/lib/src/header_parser/sub_parsers/functiondecl_parser.dart
index 3be5c1e..2b005d8 100644
--- a/lib/src/header_parser/sub_parsers/functiondecl_parser.dart
+++ b/lib/src/header_parser/sub_parsers/functiondecl_parser.dart
@@ -17,7 +17,7 @@
 
 /// Holds temporary information regarding [Func] while parsing.
 class _ParserFunc {
-  Func func;
+  Func? func;
   bool structByValueParameter = false;
   bool unimplementedParameterType = false;
   _ParserFunc();
@@ -26,7 +26,7 @@
 final _stack = Stack<_ParserFunc>();
 
 /// Parses a function declaration.
-Func parseFunctionDeclaration(Pointer<clang_types.CXCursor> cursor) {
+Func? parseFunctionDeclaration(Pointer<clang_types.CXCursor> cursor) {
   _stack.push(_ParserFunc());
   _stack.top.structByValueParameter = false;
   _stack.top.unimplementedParameterType = false;
@@ -72,7 +72,7 @@
       returnType: rt,
       parameters: parameters,
     );
-    bindingsIndex.addFuncToSeen(funcUsr, _stack.top.func);
+    bindingsIndex.addFuncToSeen(funcUsr, _stack.top.func!);
   } else if (bindingsIndex.isSeenFunc(funcUsr)) {
     _stack.top.func = bindingsIndex.getSeenFunc(funcUsr);
   }
diff --git a/lib/src/header_parser/sub_parsers/macro_parser.dart b/lib/src/header_parser/sub_parsers/macro_parser.dart
index 6c13ada..704eade 100644
--- a/lib/src/header_parser/sub_parsers/macro_parser.dart
+++ b/lib/src/header_parser/sub_parsers/macro_parser.dart
@@ -43,12 +43,12 @@
   savedMacros[name] = Macro(usr, originalName);
 }
 
-List<Constant> _bindings;
+List<Constant>? _bindings;
 
 /// Macros cannot be parsed directly, so we create a new `.hpp` file in which
 /// they are assigned to a variable after which their value can be determined
 /// by evaluating the value of the variable.
-List<Constant> parseSavedMacros() {
+List<Constant>? parseSavedMacros() {
   _bindings = [];
 
   if (savedMacros.keys.isEmpty) {
@@ -102,7 +102,7 @@
 /// Child visitor invoked on translationUnitCursor for parsing macroVariables.
 int _macroVariablevisitor(Pointer<clang_types.CXCursor> cursor,
     Pointer<clang_types.CXCursor> parent, Pointer<Void> clientData) {
-  Constant constant;
+  Constant? constant;
   try {
     if (isFromGeneratedFile(cursor) &&
         _macroVarNames.contains(cursor.spelling()) &&
@@ -116,8 +116,8 @@
       switch (k) {
         case clang_types.CXEvalResultKind.CXEval_Int:
           constant = Constant(
-            usr: savedMacros[macroName].usr,
-            originalName: savedMacros[macroName].originalName,
+            usr: savedMacros[macroName]!.usr,
+            originalName: savedMacros[macroName]!.originalName,
             name: macroName,
             rawType: 'int',
             rawValue: clang.clang_EvalResult_getAsLongLong(e).toString(),
@@ -125,8 +125,8 @@
           break;
         case clang_types.CXEvalResultKind.CXEval_Float:
           constant = Constant(
-            usr: savedMacros[macroName].usr,
-            originalName: savedMacros[macroName].originalName,
+            usr: savedMacros[macroName]!.usr,
+            originalName: savedMacros[macroName]!.originalName,
             name: macroName,
             rawType: 'double',
             rawValue:
@@ -139,8 +139,8 @@
             clang.clang_EvalResult_getAsStr(e),
           );
           constant = Constant(
-            usr: savedMacros[macroName].usr,
-            originalName: savedMacros[macroName].originalName,
+            usr: savedMacros[macroName]!.usr,
+            originalName: savedMacros[macroName]!.originalName,
             name: macroName,
             rawType: 'String',
             rawValue: "'${rawValue}'",
@@ -150,7 +150,7 @@
       clang.clang_EvalResult_dispose(e);
 
       if (constant != null) {
-        _bindings.add(constant);
+        _bindings!.add(constant);
       }
     }
     cursor.dispose();
@@ -174,12 +174,12 @@
 }
 
 /// Base name of generated file.
-String _generatedFileBaseName;
+String? _generatedFileBaseName;
 
 /// Generated macro variable names.
 ///
 /// Used to determine if macro should be included in bindings or not.
-Set<String> _macroVarNames;
+late Set<String> _macroVarNames;
 
 /// Creates a temporary file for parsing macros in current directory.
 File createFileForMacros() {
@@ -210,7 +210,7 @@
     // Write macro.
     final macroVarName = MacroVariableString.encode(prefixedMacroName);
     sb.writeln(
-        'auto ${macroVarName} = ${savedMacros[prefixedMacroName].originalName};');
+        'auto ${macroVarName} = ${savedMacros[prefixedMacroName]!.originalName};');
     // Add to _macroVarNames.
     _macroVarNames.add(macroVarName);
   }
@@ -235,7 +235,7 @@
     // Remove underscore.
     s = s.substring(1);
     final intReg = RegExp('[0-9]+');
-    final lengthEnd = intReg.matchAsPrefix(s).end;
+    final lengthEnd = intReg.matchAsPrefix(s)!.end;
     final len = int.parse(s.substring(0, lengthEnd));
 
     // Name starts after an unerscore.
diff --git a/lib/src/header_parser/sub_parsers/structdecl_parser.dart b/lib/src/header_parser/sub_parsers/structdecl_parser.dart
index 334349c..bce2eb4 100644
--- a/lib/src/header_parser/sub_parsers/structdecl_parser.dart
+++ b/lib/src/header_parser/sub_parsers/structdecl_parser.dart
@@ -16,7 +16,7 @@
 
 /// Holds temporary information regarding [struc] while parsing.
 class _ParsedStruc {
-  Struc struc;
+  Struc? struc;
   bool nestedStructMember = false;
   bool unimplementedMemberType = false;
   bool flexibleArrayMember = false;
@@ -29,11 +29,11 @@
 final _stack = Stack<_ParsedStruc>();
 
 /// Parses a struct declaration.
-Struc parseStructDeclaration(
+Struc? parseStructDeclaration(
   Pointer<clang_types.CXCursor> cursor, {
 
   /// Optionally provide name (useful in case struct is inside a typedef).
-  String name,
+  String? name,
 
   /// Option to ignore struct filter (Useful in case of extracting structs
   /// when they are passed/returned by an included function.)
@@ -58,7 +58,7 @@
     );
     // Adding to seen here to stop recursion if a struct has itself as a
     // member, members are updated later.
-    bindingsIndex.addStructToSeen(structUsr, _stack.top.struc);
+    bindingsIndex.addStructToSeen(structUsr, _stack.top.struc!);
     _setStructMembers(cursor);
   }
 
@@ -66,7 +66,7 @@
     _stack.top.struc = bindingsIndex.getSeenStruct(structUsr);
 
     // If struct is seen, update it's name.
-    _stack.top.struc.name = config.structDecl.renameUsingConfig(structName);
+    _stack.top.struc!.name = config.structDecl.renameUsingConfig(structName);
   }
   return _stack.pop().struc;
 }
@@ -90,38 +90,38 @@
     _logger.fine(
         '---- Removed Struct members, reason: struct has array members ${cursor.completeStringRepr()}');
     _logger.warning(
-        'Removed All Struct Members from: ${_stack.top.struc.name}(${_stack.top.struc.originalName}), Array members not supported');
-    return _stack.top.struc.members.clear();
+        'Removed All Struct Members from: ${_stack.top.struc!.name}(${_stack.top.struc!.originalName}), Array members not supported');
+    return _stack.top.struc!.members.clear();
   } else if (_stack.top.nestedStructMember) {
     _logger.fine(
         '---- Removed Struct members, reason: struct has struct members ${cursor.completeStringRepr()}');
     _logger.warning(
-        'Removed All Struct Members from ${_stack.top.struc.name}(${_stack.top.struc.originalName}), Nested Structures not supported.');
-    return _stack.top.struc.members.clear();
+        'Removed All Struct Members from ${_stack.top.struc!.name}(${_stack.top.struc!.originalName}), Nested Structures not supported.');
+    return _stack.top.struc!.members.clear();
   } else if (_stack.top.unimplementedMemberType) {
     _logger.fine(
         '---- Removed Struct members, reason: member with unimplementedtype ${cursor.completeStringRepr()}');
     _logger.warning(
-        'Removed All Struct Members from ${_stack.top.struc.name}(${_stack.top.struc.originalName}), struct member has an unsupported type.');
-    return _stack.top.struc.members.clear();
+        'Removed All Struct Members from ${_stack.top.struc!.name}(${_stack.top.struc!.originalName}), struct member has an unsupported type.');
+    return _stack.top.struc!.members.clear();
   } else if (_stack.top.flexibleArrayMember) {
     _logger.fine(
         '---- Removed Struct members, reason: incomplete array member ${cursor.completeStringRepr()}');
     _logger.warning(
-        'Removed All Struct Members from ${_stack.top.struc.name}(${_stack.top.struc.originalName}), Flexible array members not supported.');
-    return _stack.top.struc.members.clear();
+        'Removed All Struct Members from ${_stack.top.struc!.name}(${_stack.top.struc!.originalName}), Flexible array members not supported.');
+    return _stack.top.struc!.members.clear();
   } else if (_stack.top.bitFieldMember) {
     _logger.fine(
         '---- Removed Struct members, reason: bitfield members ${cursor.completeStringRepr()}');
     _logger.warning(
-        'Removed All Struct Members from ${_stack.top.struc.name}(${_stack.top.struc.originalName}), Bit Field members not supported.');
-    return _stack.top.struc.members.clear();
+        'Removed All Struct Members from ${_stack.top.struc!.name}(${_stack.top.struc!.originalName}), Bit Field members not supported.');
+    return _stack.top.struc!.members.clear();
   } else if (_stack.top.dartHandleMember) {
     _logger.fine(
         '---- Removed Struct members, reason: Dart_Handle member. ${cursor.completeStringRepr()}');
     _logger.warning(
-        'Removed All Struct Members from ${_stack.top.struc.name}(${_stack.top.struc.originalName}), Dart_Handle member not supported.');
-    return _stack.top.struc.members.clear();
+        'Removed All Struct Members from ${_stack.top.struc!.name}(${_stack.top.struc!.originalName}), Dart_Handle member not supported.');
+    return _stack.top.struc!.members.clear();
   }
 }
 
@@ -142,7 +142,7 @@
         _stack.top.nestedStructMember = true;
       } else if (mt.broadType == BroadType.ConstantArray) {
         _stack.top.arrayMember = true;
-        if (mt.child.broadType == BroadType.Struct) {
+        if (mt.child!.broadType == BroadType.Struct) {
           // Setting this flag will exclude adding members for this struct's
           // bindings.
           _stack.top.nestedStructMember = true;
@@ -161,7 +161,7 @@
         _stack.top.unimplementedMemberType = true;
       }
 
-      _stack.top.struc.members.add(
+      _stack.top.struc!.members.add(
         Member(
           dartDoc: getCursorDocComment(
             cursor,
@@ -169,7 +169,7 @@
           ),
           originalName: cursor.spelling(),
           name: config.structDecl.renameMemberUsingConfig(
-            _stack.top.struc.originalName,
+            _stack.top.struc!.originalName,
             cursor.spelling(),
           ),
           type: mt,
diff --git a/lib/src/header_parser/sub_parsers/typedefdecl_parser.dart b/lib/src/header_parser/sub_parsers/typedefdecl_parser.dart
index 3801dde..de39f20 100644
--- a/lib/src/header_parser/sub_parsers/typedefdecl_parser.dart
+++ b/lib/src/header_parser/sub_parsers/typedefdecl_parser.dart
@@ -18,15 +18,15 @@
 /// Holds temporary information regarding a typedef referenced [Binding]
 /// while parsing.
 class _ParsedTypedef {
-  Binding binding;
-  String typedefName;
+  Binding? binding;
+  String? typedefName;
   _ParsedTypedef();
 }
 
 final _stack = Stack<_ParsedTypedef>();
 
 /// Parses a typedef declaration.
-Binding parseTypedefDeclaration(Pointer<clang_types.CXCursor> cursor) {
+Binding? parseTypedefDeclaration(Pointer<clang_types.CXCursor> cursor) {
   _stack.push(_ParsedTypedef());
   // Name of typedef.
   _stack.top.typedefName = cursor.spelling();
diff --git a/lib/src/header_parser/translation_unit_parser.dart b/lib/src/header_parser/translation_unit_parser.dart
index 5ca8997..c4ad7e9 100644
--- a/lib/src/header_parser/translation_unit_parser.dart
+++ b/lib/src/header_parser/translation_unit_parser.dart
@@ -19,10 +19,10 @@
 
 final _logger = Logger('ffigen.header_parser.translation_unit_parser');
 
-Set<Binding> _bindings;
+Set<Binding>? _bindings;
 
 /// Parses the translation unit and returns the generated bindings.
-Set<Binding> parseTranslationUnit(
+Set<Binding>? parseTranslationUnit(
     Pointer<clang_types.CXCursor> translationUnitCursor) {
   _bindings = {};
   final resultCode = clang.clang_visitChildren_wrap(
@@ -78,9 +78,9 @@
 }
 
 /// Adds to binding if unseen and not null.
-void addToBindings(Binding b) {
+void addToBindings(Binding? b) {
   if (b != null) {
     // This is a set, and hence will not have duplicates.
-    _bindings.add(b);
+    _bindings!.add(b);
   }
 }
diff --git a/lib/src/header_parser/type_extractor/cxtypekindmap.dart b/lib/src/header_parser/type_extractor/cxtypekindmap.dart
index 6dd175f..1ecfdb3 100644
--- a/lib/src/header_parser/type_extractor/cxtypekindmap.dart
+++ b/lib/src/header_parser/type_extractor/cxtypekindmap.dart
@@ -27,7 +27,7 @@
   clang.CXTypeKind.CXType_Enum: SupportedNativeType.Int32,
 };
 
-SupportedNativeType get enumNativeType =>
+SupportedNativeType? get enumNativeType =>
     cxTypeKindToSupportedNativeTypes[clang.CXTypeKind.CXType_Enum];
 
 var suportedTypedefToSuportedNativeType = <String, SupportedNativeType>{
diff --git a/lib/src/header_parser/type_extractor/extractor.dart b/lib/src/header_parser/type_extractor/extractor.dart
index 4137e77..2c77030 100644
--- a/lib/src/header_parser/type_extractor/extractor.dart
+++ b/lib/src/header_parser/type_extractor/extractor.dart
@@ -20,7 +20,7 @@
 const _padding = '  ';
 
 /// Converts cxtype to a typestring code_generator can accept.
-Type getCodeGenType(Pointer<clang_types.CXType> cxtype, {String parentName}) {
+Type getCodeGenType(Pointer<clang_types.CXType> cxtype, {String? parentName}) {
   _logger.fine('${_padding}getCodeGenType ${cxtype.completeStringRepr()}');
   final kind = cxtype.kind();
 
@@ -33,7 +33,7 @@
       // Replace Pointer<_Dart_Handle> with Handle.
       if (config.useDartHandle &&
           s.broadType == BroadType.Struct &&
-          s.struc.usr == strings.dartHandleUsr) {
+          s.struc!.usr == strings.dartHandleUsr) {
         return Type.handle();
       }
       return Type.pointer(s);
@@ -41,13 +41,14 @@
       final spelling = cxtype.spelling();
       if (config.typedefNativeTypeMappings.containsKey(spelling)) {
         _logger.fine('  Type Mapped from typedef-map');
-        return Type.nativeType(config.typedefNativeTypeMappings[spelling]);
+        return Type.nativeType(config.typedefNativeTypeMappings[spelling!]);
       }
       // Get name from supported typedef name if config allows.
       if (config.useSupportedTypedefs) {
         if (suportedTypedefToSuportedNativeType.containsKey(spelling)) {
           _logger.fine('  Type Mapped from supported typedef');
-          return Type.nativeType(suportedTypedefToSuportedNativeType[spelling]);
+          return Type.nativeType(
+              suportedTypedefToSuportedNativeType[spelling!]);
         }
       }
 
@@ -91,7 +92,7 @@
     default:
       if (cxTypeKindToSupportedNativeTypes.containsKey(kind)) {
         return Type.nativeType(
-          cxTypeKindToSupportedNativeTypes[kind],
+          cxTypeKindToSupportedNativeTypes[kind!],
         );
       } else {
         _logger.fine(
@@ -102,7 +103,8 @@
   }
 }
 
-Type _extractfromRecord(Pointer<clang_types.CXType> cxtype, String parentName) {
+Type _extractfromRecord(
+    Pointer<clang_types.CXType> cxtype, String? parentName) {
   Type type;
 
   final cursor = clang.clang_getTypeDeclaration_wrap(cxtype);
@@ -145,7 +147,7 @@
 
 // Used for function pointer arguments.
 Type _extractFromFunctionProto(
-    Pointer<clang_types.CXType> cxtype, String parentName) {
+    Pointer<clang_types.CXType> cxtype, String? parentName) {
   var name = parentName;
 
   // An empty name means the function prototype was declared in-place, instead
@@ -168,7 +170,7 @@
     );
   }
 
-  Typedef typedefC;
+  Typedef? typedefC;
   if (bindingsIndex.isSeenFunctionTypedef(name)) {
     typedefC = bindingsIndex.getSeenFunctionTypedef(name);
   } else {
diff --git a/lib/src/header_parser/utils.dart b/lib/src/header_parser/utils.dart
index df41d6f..ca7f0cf 100644
--- a/lib/src/header_parser/utils.dart
+++ b/lib/src/header_parser/utils.dart
@@ -45,7 +45,7 @@
           clang_types
               .CXDiagnosticDisplayOptions.CXDiagnostic_DisplayCategoryName,
     );
-    logger.severe('    ' + cxstring.toStringAndDispose());
+    logger.severe('    ' + cxstring.toStringAndDispose()!);
     clang.clang_disposeDiagnostic(diag);
   }
 }
@@ -58,7 +58,7 @@
 
 extension CXCursorExt on Pointer<clang_types.CXCursor> {
   String usr() {
-    return clang.clang_getCursorUSR_wrap(this).toStringAndDispose();
+    return clang.clang_getCursorUSR_wrap(this).toStringAndDispose()!;
   }
 
   /// Returns the kind int from [clang_types.CXCursorKind].
@@ -68,14 +68,14 @@
 
   /// Name of the cursor (E.g function name, Struct name, Parameter name).
   String spelling() {
-    return clang.clang_getCursorSpelling_wrap(this).toStringAndDispose();
+    return clang.clang_getCursorSpelling_wrap(this).toStringAndDispose()!;
   }
 
   /// Spelling for a [clang_types.CXCursorKind], useful for debug purposes.
   String kindSpelling() {
     return clang
         .clang_getCursorKindSpelling_wrap(clang.clang_getCursorKind_wrap(this))
-        .toStringAndDispose();
+        .toStringAndDispose()!;
   }
 
   /// for debug: returns [spelling] [kind] [kindSpelling] [type] [typeSpelling].
@@ -102,7 +102,7 @@
     return r;
   }
 
-  String sourceFileName() {
+  String? sourceFileName() {
     final cxsource = clang.clang_getCursorLocation_wrap(this);
     final cxfilePtr = allocate<Pointer<Void>>();
     final line = allocate<Uint32>();
@@ -137,9 +137,9 @@
 /// The given string is wrapped at line width = 80 - [indent]. The [indent] is
 /// [commentPrefix.dimensions] by default because a comment starts with
 /// [commentPrefix].
-String getCursorDocComment(Pointer<clang_types.CXCursor> cursor,
+String? getCursorDocComment(Pointer<clang_types.CXCursor> cursor,
     [int indent = commentPrefix.length]) {
-  String formattedDocComment;
+  String? formattedDocComment;
   final currentCommentRange = clang.clang_Cursor_getCommentRange_wrap(cursor);
 
   // See if this comment and the last comment both point to the same source
@@ -176,7 +176,7 @@
 ///
 /// Wrapping will work properly only when String has no new lines
 /// characters(\n).
-String _wrapNoNewLineString(String string, int lineWidth) {
+String? _wrapNoNewLineString(String? string, int lineWidth) {
   if (string == null || string.isEmpty) {
     return null;
   }
@@ -202,7 +202,7 @@
 }
 
 /// Removes /*, */ and any *'s in the beginning of a line.
-String removeRawCommentMarkups(String string) {
+String? removeRawCommentMarkups(String? string) {
   if (string == null || string.isEmpty) {
     return null;
   }
@@ -234,16 +234,16 @@
   }
 
   /// Spelling for a [clang_types.CXTypeKind], useful for debug purposes.
-  String spelling() {
+  String? spelling() {
     return clang.clang_getTypeSpelling_wrap(this).toStringAndDispose();
   }
 
   /// Returns the typeKind int from [clang_types.CXTypeKind].
-  int kind() {
+  int? kind() {
     return ref.kind;
   }
 
-  String kindSpelling() {
+  String? kindSpelling() {
     return clang.clang_getTypeKindSpelling_wrap(kind()).toStringAndDispose();
   }
 
@@ -264,8 +264,8 @@
   ///
   /// Make sure to dispose CXstring using dispose method, or use the
   /// [toStringAndDispose] method.
-  String string() {
-    String s;
+  String? string() {
+    String? s;
     final cstring = clang.clang_getCString_wrap(this);
     if (cstring != nullptr) {
       s = Utf8.fromUtf8(cstring.cast());
@@ -274,7 +274,7 @@
   }
 
   /// Converts CXString to dart string and disposes CXString.
-  String toStringAndDispose() {
+  String? toStringAndDispose() {
     // Note: clang_getCString_wrap returns a const char *, calling free will result in error.
     final s = string();
     clang.clang_disposeString_wrap(this);
@@ -329,7 +329,7 @@
 
 class Macro {
   final String usr;
-  final String originalName;
+  final String? originalName;
 
   Macro(this.usr, this.originalName);
 }
@@ -353,7 +353,7 @@
     _structs[usr] = struc;
   }
 
-  Struc getSeenStruct(String usr) {
+  Struc? getSeenStruct(String usr) {
     return _structs[usr];
   }
 
@@ -365,7 +365,7 @@
     _functions[usr] = func;
   }
 
-  Func getSeenFunc(String usr) {
+  Func? getSeenFunc(String usr) {
     return _functions[usr];
   }
 
@@ -377,7 +377,7 @@
     _enumClass[usr] = enumClass;
   }
 
-  EnumClass getSeenEnumClass(String usr) {
+  EnumClass? getSeenEnumClass(String usr) {
     return _enumClass[usr];
   }
 
@@ -389,7 +389,7 @@
     _unnamedEnumConstants[usr] = enumConstant;
   }
 
-  Constant getSeenUnnamedEnumConstant(String usr) {
+  Constant? getSeenUnnamedEnumConstant(String usr) {
     return _unnamedEnumConstants[usr];
   }
 
@@ -401,7 +401,7 @@
     _macros[usr] = macro;
   }
 
-  String getSeenMacro(String usr) {
+  String? getSeenMacro(String usr) {
     return _macros[usr];
   }
 
@@ -413,7 +413,7 @@
     _functionTypedefs[originalName] = t;
   }
 
-  Typedef getSeenFunctionTypedef(String originalName) {
+  Typedef? getSeenFunctionTypedef(String originalName) {
     return _functionTypedefs[originalName];
   }
 }
diff --git a/lib/src/strings.dart b/lib/src/strings.dart
index 74dc0fa..0abc9de 100644
--- a/lib/src/strings.dart
+++ b/lib/src/strings.dart
@@ -8,7 +8,7 @@
 import 'package:ffigen/src/header_parser/clang_bindings/clang_bindings.dart'
     as clang;
 
-String get dylibVersion => ffigenVersion;
+String? get dylibVersion => ffigenVersion;
 
 /// Name of the dynamic library file according to current platform.
 String get dylibFileName {
diff --git a/pubspec.yaml b/pubspec.yaml
index 80feda7..2a07001 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -3,25 +3,24 @@
 # BSD-style license that can be found in the LICENSE file.
 
 name: ffigen
-version: 1.2.0
+version: 2.0.0-nullsafety.0
 homepage: https://github.com/dart-lang/ffigen
 description: Experimental generator for FFI bindings, using LibClang to parse C header files.
 
 environment:
-  sdk: '>=2.7.0 <3.0.0'
+  sdk: '>=2.12.0-29.10.beta <3.0.0'
 
 dependencies:
-  ffi: ^0.1.3
-  yaml: ^2.2.1
-  meta: ^1.1.8
-  args: ^1.6.0
-  logging: ^0.11.4
-  cli_util: ^0.2.0
-  glob: ^1.2.0
-  path: ^1.7.0
-  quiver: ^2.1.3
-  pub_semver: ^1.4.4
+  ffi: ^0.2.0-nullsafety.1
+  yaml: ^3.0.0-nullsafety.0
+  path: ^1.8.0-nullsafety.3
+  quiver: ^3.0.0-nullsafety.2
+  args: ^1.6.0        # Not available
+  logging: ^0.11.4    # test->coverage->logging
+  cli_util: ^0.2.0    # test->analyzer->cli_util
+  glob: ^1.0.3        # test->analyzer->glob
+  pub_semver: ^1.4.4  # test->analyzer->pub_semver
 
 dev_dependencies:
-  pedantic: ^1.9.2
-  test: ^1.15.3
+  pedantic: ^1.10.0-nullsafety.3
+  test: ^1.16.0-nullsafety.13
diff --git a/test/code_generator_test.dart b/test/code_generator_test.dart
index 05dceb1..ea6393b 100644
--- a/test/code_generator_test.dart
+++ b/test/code_generator_test.dart
@@ -94,35 +94,32 @@
 /// heres another line
 int noParam(
 ) {
-_noParam ??= _dylib.lookupFunction<_c_noParam,_dart_noParam>('noParam');
-  return _noParam(
+return (_noParam ??= _dylib.lookupFunction<_c_noParam,_dart_noParam>('noParam'))(
   );
 }
-_dart_noParam _noParam;
+_dart_noParam? _noParam;
 
 int withPrimitiveParam(
   int a,
   int b,
 ) {
-_withPrimitiveParam ??= _dylib.lookupFunction<_c_withPrimitiveParam,_dart_withPrimitiveParam>('withPrimitiveParam');
-  return _withPrimitiveParam(
+return (_withPrimitiveParam ??= _dylib.lookupFunction<_c_withPrimitiveParam,_dart_withPrimitiveParam>('withPrimitiveParam'))(
     a,
     b,
   );
 }
-_dart_withPrimitiveParam _withPrimitiveParam;
+_dart_withPrimitiveParam? _withPrimitiveParam;
 
 ffi.Pointer<ffi.Double> withPointerParam(
   ffi.Pointer<ffi.Int32> a,
   ffi.Pointer<ffi.Pointer<ffi.Uint8>> b,
 ) {
-_withPointerParam ??= _dylib.lookupFunction<_c_withPointerParam,_dart_withPointerParam>('withPointerParam');
-  return _withPointerParam(
+return (_withPointerParam ??= _dylib.lookupFunction<_c_withPointerParam,_dart_withPointerParam>('withPointerParam'))(
     a,
     b,
   );
 }
-_dart_withPointerParam _withPointerParam;
+_dart_withPointerParam? _withPointerParam;
 
 }
 
@@ -158,7 +155,7 @@
         }
       } catch (e) {
         file.writeAsStringSync(gen);
-        print('Failed test, Debug output: ${file.absolute?.path}');
+        print('Failed test, Debug output: ${file.absolute.path}');
         rethrow;
       }
     });
@@ -244,23 +241,23 @@
 
 class WithPrimitiveMember extends ffi.Struct{
   @ffi.Int32()
-  int a;
+  external int a;
 
   @ffi.Double()
-  double b;
+  external double b;
 
   @ffi.Uint8()
-  int c;
+  external int c;
 
 }
 
 class WithPointerMember extends ffi.Struct{
-  ffi.Pointer<ffi.Int32> a;
+  external ffi.Pointer<ffi.Int32> a;
 
-  ffi.Pointer<ffi.Pointer<ffi.Double>> b;
+  external ffi.Pointer<ffi.Pointer<ffi.Double>> b;
 
   @ffi.Uint8()
-  int c;
+  external int c;
 
 }
 
@@ -270,7 +267,7 @@
         }
       } catch (e) {
         file.writeAsStringSync(gen);
-        print('Failed test, Debug output: ${file.absolute?.path}');
+        print('Failed test, Debug output: ${file.absolute.path}');
         rethrow;
       }
     });
@@ -348,24 +345,23 @@
 ffi.Pointer<SomeStruc> someFunc(
   ffi.Pointer<ffi.Pointer<SomeStruc>> some,
 ) {
-_someFunc ??= _dylib.lookupFunction<_c_someFunc,_dart_someFunc>('someFunc');
-  return _someFunc(
+return (_someFunc ??= _dylib.lookupFunction<_c_someFunc,_dart_someFunc>('someFunc'))(
     some,
   );
 }
-_dart_someFunc _someFunc;
+_dart_someFunc? _someFunc;
 
 }
 
 class SomeStruc extends ffi.Struct{
   @ffi.Int32()
-  int a;
+  external int a;
 
   @ffi.Double()
-  double b;
+  external double b;
 
   @ffi.Uint8()
-  int c;
+  external int c;
 
 }
 
@@ -383,7 +379,7 @@
         }
       } catch (e) {
         file.writeAsStringSync(gen);
-        print('Failed test, Debug output: ${file.absolute?.path}');
+        print('Failed test, Debug output: ${file.absolute.path}');
         rethrow;
       }
     });
@@ -460,7 +456,7 @@
         }
       } catch (e) {
         file.writeAsStringSync(gen);
-        print('Failed test, Debug output: ${file.absolute?.path}');
+        print('Failed test, Debug output: ${file.absolute.path}');
         rethrow;
       }
     });
@@ -504,7 +500,7 @@
         }
       } catch (e) {
         file.writeAsStringSync(gen);
-        print('Failed test, Debug output: ${file.absolute?.path}');
+        print('Failed test, Debug output: ${file.absolute.path}');
         rethrow;
       }
     });
@@ -553,7 +549,7 @@
         }
       } catch (e) {
         file.writeAsStringSync(gen);
-        print('Failed test, Debug output: ${file.absolute?.path}');
+        print('Failed test, Debug output: ${file.absolute.path}');
         rethrow;
       }
     });
@@ -622,51 +618,46 @@
 
 void test(
 ) {
-_test_1 ??= _dylib.lookupFunction<_c_test1,_dart_test1>('test');
-  return _test_1(
+return (_test_1 ??= _dylib.lookupFunction<_c_test1,_dart_test1>('test'))(
   );
 }
-_dart_test1 _test_1;
+_dart_test1? _test_1;
 
 void _test(
 ) {
-__test ??= _dylib.lookupFunction<_c__test,_dart__test>('_test');
-  return __test(
+return (__test ??= _dylib.lookupFunction<_c__test,_dart__test>('_test'))(
   );
 }
-_dart__test __test;
+_dart__test? __test;
 
 void _c_test(
 ) {
-__c_test ??= _dylib.lookupFunction<_c__c_test,_dart__c_test>('_c_test');
-  return __c_test(
+return (__c_test ??= _dylib.lookupFunction<_c__c_test,_dart__c_test>('_c_test'))(
   );
 }
-_dart__c_test __c_test;
+_dart__c_test? __c_test;
 
 void _dart_test(
 ) {
-__dart_test ??= _dylib.lookupFunction<_c__dart_test,_dart__dart_test>('_dart_test');
-  return __dart_test(
+return (__dart_test ??= _dylib.lookupFunction<_c__dart_test,_dart__dart_test>('_dart_test'))(
   );
 }
-_dart__dart_test __dart_test;
+_dart__dart_test? __dart_test;
 
 void Test(
 ) {
-_Test ??= _dylib.lookupFunction<_c_Test1,_dart_Test>('Test');
-  return _Test(
+return (_Test ??= _dylib.lookupFunction<_c_Test1,_dart_Test>('Test'))(
   );
 }
-_dart_Test _Test;
+_dart_Test? _Test;
 
 }
 
 class _Test extends ffi.Struct{
   @ffi.Int8()
-  int _unique_array_item_0;
+  external int _unique_array_item_0;
   @ffi.Int8()
-  int _unique_array_item_1;
+  external int _unique_array_item_1;
 /// Helper for array `array`.
 ArrayHelper1__Test_array_level0 get array => ArrayHelper1__Test_array_level0(this, [2], 0, 0);
 }
@@ -753,7 +744,7 @@
         }
       } catch (e) {
         file.writeAsStringSync(gen);
-        print('Failed test, Debug output: ${file.absolute?.path}');
+        print('Failed test, Debug output: ${file.absolute.path}');
         rethrow;
       }
     });
@@ -803,19 +794,18 @@
   bool a,
   ffi.Pointer<ffi.Uint8> b,
 ) {
-_test1 ??= _dylib.lookupFunction<_c_test1,_dart_test1>('test1');
-  return _test1(
+return (_test1 ??= _dylib.lookupFunction<_c_test1,_dart_test1>('test1'))(
     a?1:0,
     b,
   )!=0;
 }
-_dart_test1 _test1;
+_dart_test1? _test1;
 
 }
 
 class test2 extends ffi.Struct{
   @ffi.Uint8()
-  int a;
+  external int a;
 
 }
 
@@ -835,7 +825,7 @@
       }
     } catch (e) {
       file.writeAsStringSync(gen);
-      print('Failed test, Debug output: ${file.absolute?.path}');
+      print('Failed test, Debug output: ${file.absolute.path}');
       rethrow;
     }
   });
@@ -884,19 +874,18 @@
   int a,
   ffi.Pointer<ffi.Uint8> b,
 ) {
-_test1 ??= _dylib.lookupFunction<_c_test1,_dart_test1>('test1');
-  return _test1(
+return (_test1 ??= _dylib.lookupFunction<_c_test1,_dart_test1>('test1'))(
     a,
     b,
   );
 }
-_dart_test1 _test1;
+_dart_test1? _test1;
 
 }
 
 class test2 extends ffi.Struct{
   @ffi.Uint8()
-  int a;
+  external int a;
 
 }
 
@@ -916,7 +905,7 @@
       }
     } catch (e) {
       file.writeAsStringSync(gen);
-      print('Failed test, Debug output: ${file.absolute?.path}');
+      print('Failed test, Debug output: ${file.absolute.path}');
       rethrow;
     }
   });
diff --git a/test/header_parser_tests/dart_handle_test.dart b/test/header_parser_tests/dart_handle_test.dart
index 3fdc12c..16387ff 100644
--- a/test/header_parser_tests/dart_handle_test.dart
+++ b/test/header_parser_tests/dart_handle_test.dart
@@ -13,7 +13,7 @@
 
 import '../test_utils.dart';
 
-Library actual, expected;
+late Library actual, expected;
 
 void main() {
   group('dart_handle_test', () {
diff --git a/test/header_parser_tests/function_n_struct_test.dart b/test/header_parser_tests/function_n_struct_test.dart
index 909c13a..9c3107c 100644
--- a/test/header_parser_tests/function_n_struct_test.dart
+++ b/test/header_parser_tests/function_n_struct_test.dart
@@ -12,7 +12,7 @@
 
 import '../test_utils.dart';
 
-Library actual, expected;
+late Library actual, expected;
 
 void main() {
   group('function_n_struct_test', () {
diff --git a/test/header_parser_tests/functions_test.dart b/test/header_parser_tests/functions_test.dart
index 2c898bc..31e0506 100644
--- a/test/header_parser_tests/functions_test.dart
+++ b/test/header_parser_tests/functions_test.dart
@@ -11,7 +11,7 @@
 
 import '../test_utils.dart';
 
-Library actual, expected;
+late Library actual, expected;
 
 void main() {
   group('functions_test', () {
diff --git a/test/header_parser_tests/macros_test.dart b/test/header_parser_tests/macros_test.dart
index 6ad5090..2611940 100644
--- a/test/header_parser_tests/macros_test.dart
+++ b/test/header_parser_tests/macros_test.dart
@@ -12,7 +12,7 @@
 
 import '../test_utils.dart';
 
-Library actual, expected;
+late Library actual, expected;
 
 void main() {
   group('macros_test', () {
diff --git a/test/header_parser_tests/native_func_typedef_test.dart b/test/header_parser_tests/native_func_typedef_test.dart
index c1f2d37..54ef290 100644
--- a/test/header_parser_tests/native_func_typedef_test.dart
+++ b/test/header_parser_tests/native_func_typedef_test.dart
@@ -14,7 +14,7 @@
 
 import '../test_utils.dart';
 
-Library actual;
+late Library actual;
 void main() {
   group('unnamed_enums_test', () {
     setUpAll(() {
@@ -59,27 +59,25 @@
 void func(
   ffi.Pointer<ffi.NativeFunction<_typedefC_4>> unnamed1,
 ) {
-_func ??= _dylib.lookupFunction<_c_func,_dart_func>('func');
-  return _func(
+return (_func ??= _dylib.lookupFunction<_c_func,_dart_func>('func'))(
     unnamed1,
   );
 }
-_dart_func _func;
+_dart_func? _func;
 
 void funcWithNativeFunc(
   ffi.Pointer<ffi.NativeFunction<withTypedefReturnType>> named,
 ) {
-_funcWithNativeFunc ??= _dylib.lookupFunction<_c_funcWithNativeFunc,_dart_funcWithNativeFunc>('funcWithNativeFunc');
-  return _funcWithNativeFunc(
+return (_funcWithNativeFunc ??= _dylib.lookupFunction<_c_funcWithNativeFunc,_dart_funcWithNativeFunc>('funcWithNativeFunc'))(
     named,
   );
 }
-_dart_funcWithNativeFunc _funcWithNativeFunc;
+_dart_funcWithNativeFunc? _funcWithNativeFunc;
 
 }
 
 class struc extends ffi.Struct{
-  ffi.Pointer<ffi.NativeFunction<_typedefC_2>> unnamed1;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_2>> unnamed1;
 
 }
 
@@ -125,7 +123,7 @@
         }
       } catch (e) {
         file.writeAsStringSync(gen);
-        print('Failed test, Debug output: ${file.absolute?.path}');
+        print('Failed test, Debug output: ${file.absolute.path}');
         rethrow;
       }
     });
diff --git a/test/header_parser_tests/nested_parsing_test.dart b/test/header_parser_tests/nested_parsing_test.dart
index c4c01a7..40937c8 100644
--- a/test/header_parser_tests/nested_parsing_test.dart
+++ b/test/header_parser_tests/nested_parsing_test.dart
@@ -11,7 +11,7 @@
 
 import '../test_utils.dart';
 
-Library actual, expected;
+late Library actual, expected;
 
 void main() {
   group('nested_parsing_test', () {
diff --git a/test/header_parser_tests/typedef_test.dart b/test/header_parser_tests/typedef_test.dart
index eeeb37c..182b622 100644
--- a/test/header_parser_tests/typedef_test.dart
+++ b/test/header_parser_tests/typedef_test.dart
@@ -12,7 +12,7 @@
 
 import '../test_utils.dart';
 
-Library actual, expected;
+late Library actual, expected;
 
 void main() {
   group('typedef_test', () {
diff --git a/test/header_parser_tests/unnamed_enums_test.dart b/test/header_parser_tests/unnamed_enums_test.dart
index fa75392..02994af 100644
--- a/test/header_parser_tests/unnamed_enums_test.dart
+++ b/test/header_parser_tests/unnamed_enums_test.dart
@@ -11,7 +11,7 @@
 
 import '../test_utils.dart';
 
-Library actual, expected;
+late Library actual, expected;
 
 void main() {
   group('unnamed_enums_test', () {
diff --git a/test/large_integration_tests/_expected_cjson_bindings.dart b/test/large_integration_tests/_expected_cjson_bindings.dart
index a22dd73..c9820d2 100644
--- a/test/large_integration_tests/_expected_cjson_bindings.dart
+++ b/test/large_integration_tests/_expected_cjson_bindings.dart
@@ -12,93 +12,90 @@
   CJson(ffi.DynamicLibrary dynamicLibrary) : _dylib = dynamicLibrary;
 
   ffi.Pointer<ffi.Int8> cJSON_Version() {
-    _cJSON_Version ??= _dylib
-        .lookupFunction<_c_cJSON_Version, _dart_cJSON_Version>('cJSON_Version');
-    return _cJSON_Version();
+    return (_cJSON_Version ??=
+        _dylib.lookupFunction<_c_cJSON_Version, _dart_cJSON_Version>(
+            'cJSON_Version'))();
   }
 
-  _dart_cJSON_Version _cJSON_Version;
+  _dart_cJSON_Version? _cJSON_Version;
 
   void cJSON_InitHooks(
     ffi.Pointer<cJSON_Hooks> hooks,
   ) {
-    _cJSON_InitHooks ??=
+    return (_cJSON_InitHooks ??=
         _dylib.lookupFunction<_c_cJSON_InitHooks, _dart_cJSON_InitHooks>(
-            'cJSON_InitHooks');
-    return _cJSON_InitHooks(
+            'cJSON_InitHooks'))(
       hooks,
     );
   }
 
-  _dart_cJSON_InitHooks _cJSON_InitHooks;
+  _dart_cJSON_InitHooks? _cJSON_InitHooks;
 
   ffi.Pointer<cJSON> cJSON_Parse(
     ffi.Pointer<ffi.Int8> value,
   ) {
-    _cJSON_Parse ??=
-        _dylib.lookupFunction<_c_cJSON_Parse, _dart_cJSON_Parse>('cJSON_Parse');
-    return _cJSON_Parse(
+    return (_cJSON_Parse ??= _dylib
+        .lookupFunction<_c_cJSON_Parse, _dart_cJSON_Parse>('cJSON_Parse'))(
       value,
     );
   }
 
-  _dart_cJSON_Parse _cJSON_Parse;
+  _dart_cJSON_Parse? _cJSON_Parse;
 
   ffi.Pointer<cJSON> cJSON_ParseWithOpts(
     ffi.Pointer<ffi.Int8> value,
     ffi.Pointer<ffi.Pointer<ffi.Int8>> return_parse_end,
     int require_null_terminated,
   ) {
-    _cJSON_ParseWithOpts ??= _dylib.lookupFunction<_c_cJSON_ParseWithOpts,
-        _dart_cJSON_ParseWithOpts>('cJSON_ParseWithOpts');
-    return _cJSON_ParseWithOpts(
+    return (_cJSON_ParseWithOpts ??= _dylib.lookupFunction<
+        _c_cJSON_ParseWithOpts,
+        _dart_cJSON_ParseWithOpts>('cJSON_ParseWithOpts'))(
       value,
       return_parse_end,
       require_null_terminated,
     );
   }
 
-  _dart_cJSON_ParseWithOpts _cJSON_ParseWithOpts;
+  _dart_cJSON_ParseWithOpts? _cJSON_ParseWithOpts;
 
   ffi.Pointer<ffi.Int8> cJSON_Print(
     ffi.Pointer<cJSON> item,
   ) {
-    _cJSON_Print ??=
-        _dylib.lookupFunction<_c_cJSON_Print, _dart_cJSON_Print>('cJSON_Print');
-    return _cJSON_Print(
+    return (_cJSON_Print ??= _dylib
+        .lookupFunction<_c_cJSON_Print, _dart_cJSON_Print>('cJSON_Print'))(
       item,
     );
   }
 
-  _dart_cJSON_Print _cJSON_Print;
+  _dart_cJSON_Print? _cJSON_Print;
 
   ffi.Pointer<ffi.Int8> cJSON_PrintUnformatted(
     ffi.Pointer<cJSON> item,
   ) {
-    _cJSON_PrintUnformatted ??= _dylib.lookupFunction<_c_cJSON_PrintUnformatted,
-        _dart_cJSON_PrintUnformatted>('cJSON_PrintUnformatted');
-    return _cJSON_PrintUnformatted(
+    return (_cJSON_PrintUnformatted ??= _dylib.lookupFunction<
+        _c_cJSON_PrintUnformatted,
+        _dart_cJSON_PrintUnformatted>('cJSON_PrintUnformatted'))(
       item,
     );
   }
 
-  _dart_cJSON_PrintUnformatted _cJSON_PrintUnformatted;
+  _dart_cJSON_PrintUnformatted? _cJSON_PrintUnformatted;
 
   ffi.Pointer<ffi.Int8> cJSON_PrintBuffered(
     ffi.Pointer<cJSON> item,
     int prebuffer,
     int fmt,
   ) {
-    _cJSON_PrintBuffered ??= _dylib.lookupFunction<_c_cJSON_PrintBuffered,
-        _dart_cJSON_PrintBuffered>('cJSON_PrintBuffered');
-    return _cJSON_PrintBuffered(
+    return (_cJSON_PrintBuffered ??= _dylib.lookupFunction<
+        _c_cJSON_PrintBuffered,
+        _dart_cJSON_PrintBuffered>('cJSON_PrintBuffered'))(
       item,
       prebuffer,
       fmt,
     );
   }
 
-  _dart_cJSON_PrintBuffered _cJSON_PrintBuffered;
+  _dart_cJSON_PrintBuffered? _cJSON_PrintBuffered;
 
   int cJSON_PrintPreallocated(
     ffi.Pointer<cJSON> item,
@@ -106,10 +103,9 @@
     int length,
     int format,
   ) {
-    _cJSON_PrintPreallocated ??= _dylib.lookupFunction<
+    return (_cJSON_PrintPreallocated ??= _dylib.lookupFunction<
         _c_cJSON_PrintPreallocated,
-        _dart_cJSON_PrintPreallocated>('cJSON_PrintPreallocated');
-    return _cJSON_PrintPreallocated(
+        _dart_cJSON_PrintPreallocated>('cJSON_PrintPreallocated'))(
       item,
       buffer,
       length,
@@ -117,617 +113,581 @@
     );
   }
 
-  _dart_cJSON_PrintPreallocated _cJSON_PrintPreallocated;
+  _dart_cJSON_PrintPreallocated? _cJSON_PrintPreallocated;
 
   void cJSON_Delete(
     ffi.Pointer<cJSON> item,
   ) {
-    _cJSON_Delete ??= _dylib
-        .lookupFunction<_c_cJSON_Delete, _dart_cJSON_Delete>('cJSON_Delete');
-    return _cJSON_Delete(
+    return (_cJSON_Delete ??= _dylib
+        .lookupFunction<_c_cJSON_Delete, _dart_cJSON_Delete>('cJSON_Delete'))(
       item,
     );
   }
 
-  _dart_cJSON_Delete _cJSON_Delete;
+  _dart_cJSON_Delete? _cJSON_Delete;
 
   int cJSON_GetArraySize(
     ffi.Pointer<cJSON> array,
   ) {
-    _cJSON_GetArraySize ??=
+    return (_cJSON_GetArraySize ??=
         _dylib.lookupFunction<_c_cJSON_GetArraySize, _dart_cJSON_GetArraySize>(
-            'cJSON_GetArraySize');
-    return _cJSON_GetArraySize(
+            'cJSON_GetArraySize'))(
       array,
     );
   }
 
-  _dart_cJSON_GetArraySize _cJSON_GetArraySize;
+  _dart_cJSON_GetArraySize? _cJSON_GetArraySize;
 
   ffi.Pointer<cJSON> cJSON_GetArrayItem(
     ffi.Pointer<cJSON> array,
     int index,
   ) {
-    _cJSON_GetArrayItem ??=
+    return (_cJSON_GetArrayItem ??=
         _dylib.lookupFunction<_c_cJSON_GetArrayItem, _dart_cJSON_GetArrayItem>(
-            'cJSON_GetArrayItem');
-    return _cJSON_GetArrayItem(
+            'cJSON_GetArrayItem'))(
       array,
       index,
     );
   }
 
-  _dart_cJSON_GetArrayItem _cJSON_GetArrayItem;
+  _dart_cJSON_GetArrayItem? _cJSON_GetArrayItem;
 
   ffi.Pointer<cJSON> cJSON_GetObjectItem(
     ffi.Pointer<cJSON> object,
     ffi.Pointer<ffi.Int8> string,
   ) {
-    _cJSON_GetObjectItem ??= _dylib.lookupFunction<_c_cJSON_GetObjectItem,
-        _dart_cJSON_GetObjectItem>('cJSON_GetObjectItem');
-    return _cJSON_GetObjectItem(
+    return (_cJSON_GetObjectItem ??= _dylib.lookupFunction<
+        _c_cJSON_GetObjectItem,
+        _dart_cJSON_GetObjectItem>('cJSON_GetObjectItem'))(
       object,
       string,
     );
   }
 
-  _dart_cJSON_GetObjectItem _cJSON_GetObjectItem;
+  _dart_cJSON_GetObjectItem? _cJSON_GetObjectItem;
 
   ffi.Pointer<cJSON> cJSON_GetObjectItemCaseSensitive(
     ffi.Pointer<cJSON> object,
     ffi.Pointer<ffi.Int8> string,
   ) {
-    _cJSON_GetObjectItemCaseSensitive ??= _dylib.lookupFunction<
+    return (_cJSON_GetObjectItemCaseSensitive ??= _dylib.lookupFunction<
             _c_cJSON_GetObjectItemCaseSensitive,
             _dart_cJSON_GetObjectItemCaseSensitive>(
-        'cJSON_GetObjectItemCaseSensitive');
-    return _cJSON_GetObjectItemCaseSensitive(
+        'cJSON_GetObjectItemCaseSensitive'))(
       object,
       string,
     );
   }
 
-  _dart_cJSON_GetObjectItemCaseSensitive _cJSON_GetObjectItemCaseSensitive;
+  _dart_cJSON_GetObjectItemCaseSensitive? _cJSON_GetObjectItemCaseSensitive;
 
   int cJSON_HasObjectItem(
     ffi.Pointer<cJSON> object,
     ffi.Pointer<ffi.Int8> string,
   ) {
-    _cJSON_HasObjectItem ??= _dylib.lookupFunction<_c_cJSON_HasObjectItem,
-        _dart_cJSON_HasObjectItem>('cJSON_HasObjectItem');
-    return _cJSON_HasObjectItem(
+    return (_cJSON_HasObjectItem ??= _dylib.lookupFunction<
+        _c_cJSON_HasObjectItem,
+        _dart_cJSON_HasObjectItem>('cJSON_HasObjectItem'))(
       object,
       string,
     );
   }
 
-  _dart_cJSON_HasObjectItem _cJSON_HasObjectItem;
+  _dart_cJSON_HasObjectItem? _cJSON_HasObjectItem;
 
   ffi.Pointer<ffi.Int8> cJSON_GetErrorPtr() {
-    _cJSON_GetErrorPtr ??=
+    return (_cJSON_GetErrorPtr ??=
         _dylib.lookupFunction<_c_cJSON_GetErrorPtr, _dart_cJSON_GetErrorPtr>(
-            'cJSON_GetErrorPtr');
-    return _cJSON_GetErrorPtr();
+            'cJSON_GetErrorPtr'))();
   }
 
-  _dart_cJSON_GetErrorPtr _cJSON_GetErrorPtr;
+  _dart_cJSON_GetErrorPtr? _cJSON_GetErrorPtr;
 
   ffi.Pointer<ffi.Int8> cJSON_GetStringValue(
     ffi.Pointer<cJSON> item,
   ) {
-    _cJSON_GetStringValue ??= _dylib.lookupFunction<_c_cJSON_GetStringValue,
-        _dart_cJSON_GetStringValue>('cJSON_GetStringValue');
-    return _cJSON_GetStringValue(
+    return (_cJSON_GetStringValue ??= _dylib.lookupFunction<
+        _c_cJSON_GetStringValue,
+        _dart_cJSON_GetStringValue>('cJSON_GetStringValue'))(
       item,
     );
   }
 
-  _dart_cJSON_GetStringValue _cJSON_GetStringValue;
+  _dart_cJSON_GetStringValue? _cJSON_GetStringValue;
 
   int cJSON_IsInvalid(
     ffi.Pointer<cJSON> item,
   ) {
-    _cJSON_IsInvalid ??=
+    return (_cJSON_IsInvalid ??=
         _dylib.lookupFunction<_c_cJSON_IsInvalid, _dart_cJSON_IsInvalid>(
-            'cJSON_IsInvalid');
-    return _cJSON_IsInvalid(
+            'cJSON_IsInvalid'))(
       item,
     );
   }
 
-  _dart_cJSON_IsInvalid _cJSON_IsInvalid;
+  _dart_cJSON_IsInvalid? _cJSON_IsInvalid;
 
   int cJSON_IsFalse(
     ffi.Pointer<cJSON> item,
   ) {
-    _cJSON_IsFalse ??= _dylib
-        .lookupFunction<_c_cJSON_IsFalse, _dart_cJSON_IsFalse>('cJSON_IsFalse');
-    return _cJSON_IsFalse(
+    return (_cJSON_IsFalse ??=
+        _dylib.lookupFunction<_c_cJSON_IsFalse, _dart_cJSON_IsFalse>(
+            'cJSON_IsFalse'))(
       item,
     );
   }
 
-  _dart_cJSON_IsFalse _cJSON_IsFalse;
+  _dart_cJSON_IsFalse? _cJSON_IsFalse;
 
   int cJSON_IsTrue(
     ffi.Pointer<cJSON> item,
   ) {
-    _cJSON_IsTrue ??= _dylib
-        .lookupFunction<_c_cJSON_IsTrue, _dart_cJSON_IsTrue>('cJSON_IsTrue');
-    return _cJSON_IsTrue(
+    return (_cJSON_IsTrue ??= _dylib
+        .lookupFunction<_c_cJSON_IsTrue, _dart_cJSON_IsTrue>('cJSON_IsTrue'))(
       item,
     );
   }
 
-  _dart_cJSON_IsTrue _cJSON_IsTrue;
+  _dart_cJSON_IsTrue? _cJSON_IsTrue;
 
   int cJSON_IsBool(
     ffi.Pointer<cJSON> item,
   ) {
-    _cJSON_IsBool ??= _dylib
-        .lookupFunction<_c_cJSON_IsBool, _dart_cJSON_IsBool>('cJSON_IsBool');
-    return _cJSON_IsBool(
+    return (_cJSON_IsBool ??= _dylib
+        .lookupFunction<_c_cJSON_IsBool, _dart_cJSON_IsBool>('cJSON_IsBool'))(
       item,
     );
   }
 
-  _dart_cJSON_IsBool _cJSON_IsBool;
+  _dart_cJSON_IsBool? _cJSON_IsBool;
 
   int cJSON_IsNull(
     ffi.Pointer<cJSON> item,
   ) {
-    _cJSON_IsNull ??= _dylib
-        .lookupFunction<_c_cJSON_IsNull, _dart_cJSON_IsNull>('cJSON_IsNull');
-    return _cJSON_IsNull(
+    return (_cJSON_IsNull ??= _dylib
+        .lookupFunction<_c_cJSON_IsNull, _dart_cJSON_IsNull>('cJSON_IsNull'))(
       item,
     );
   }
 
-  _dart_cJSON_IsNull _cJSON_IsNull;
+  _dart_cJSON_IsNull? _cJSON_IsNull;
 
   int cJSON_IsNumber(
     ffi.Pointer<cJSON> item,
   ) {
-    _cJSON_IsNumber ??=
+    return (_cJSON_IsNumber ??=
         _dylib.lookupFunction<_c_cJSON_IsNumber, _dart_cJSON_IsNumber>(
-            'cJSON_IsNumber');
-    return _cJSON_IsNumber(
+            'cJSON_IsNumber'))(
       item,
     );
   }
 
-  _dart_cJSON_IsNumber _cJSON_IsNumber;
+  _dart_cJSON_IsNumber? _cJSON_IsNumber;
 
   int cJSON_IsString(
     ffi.Pointer<cJSON> item,
   ) {
-    _cJSON_IsString ??=
+    return (_cJSON_IsString ??=
         _dylib.lookupFunction<_c_cJSON_IsString, _dart_cJSON_IsString>(
-            'cJSON_IsString');
-    return _cJSON_IsString(
+            'cJSON_IsString'))(
       item,
     );
   }
 
-  _dart_cJSON_IsString _cJSON_IsString;
+  _dart_cJSON_IsString? _cJSON_IsString;
 
   int cJSON_IsArray(
     ffi.Pointer<cJSON> item,
   ) {
-    _cJSON_IsArray ??= _dylib
-        .lookupFunction<_c_cJSON_IsArray, _dart_cJSON_IsArray>('cJSON_IsArray');
-    return _cJSON_IsArray(
+    return (_cJSON_IsArray ??=
+        _dylib.lookupFunction<_c_cJSON_IsArray, _dart_cJSON_IsArray>(
+            'cJSON_IsArray'))(
       item,
     );
   }
 
-  _dart_cJSON_IsArray _cJSON_IsArray;
+  _dart_cJSON_IsArray? _cJSON_IsArray;
 
   int cJSON_IsObject(
     ffi.Pointer<cJSON> item,
   ) {
-    _cJSON_IsObject ??=
+    return (_cJSON_IsObject ??=
         _dylib.lookupFunction<_c_cJSON_IsObject, _dart_cJSON_IsObject>(
-            'cJSON_IsObject');
-    return _cJSON_IsObject(
+            'cJSON_IsObject'))(
       item,
     );
   }
 
-  _dart_cJSON_IsObject _cJSON_IsObject;
+  _dart_cJSON_IsObject? _cJSON_IsObject;
 
   int cJSON_IsRaw(
     ffi.Pointer<cJSON> item,
   ) {
-    _cJSON_IsRaw ??=
-        _dylib.lookupFunction<_c_cJSON_IsRaw, _dart_cJSON_IsRaw>('cJSON_IsRaw');
-    return _cJSON_IsRaw(
+    return (_cJSON_IsRaw ??= _dylib
+        .lookupFunction<_c_cJSON_IsRaw, _dart_cJSON_IsRaw>('cJSON_IsRaw'))(
       item,
     );
   }
 
-  _dart_cJSON_IsRaw _cJSON_IsRaw;
+  _dart_cJSON_IsRaw? _cJSON_IsRaw;
 
   ffi.Pointer<cJSON> cJSON_CreateNull() {
-    _cJSON_CreateNull ??=
+    return (_cJSON_CreateNull ??=
         _dylib.lookupFunction<_c_cJSON_CreateNull, _dart_cJSON_CreateNull>(
-            'cJSON_CreateNull');
-    return _cJSON_CreateNull();
+            'cJSON_CreateNull'))();
   }
 
-  _dart_cJSON_CreateNull _cJSON_CreateNull;
+  _dart_cJSON_CreateNull? _cJSON_CreateNull;
 
   ffi.Pointer<cJSON> cJSON_CreateTrue() {
-    _cJSON_CreateTrue ??=
+    return (_cJSON_CreateTrue ??=
         _dylib.lookupFunction<_c_cJSON_CreateTrue, _dart_cJSON_CreateTrue>(
-            'cJSON_CreateTrue');
-    return _cJSON_CreateTrue();
+            'cJSON_CreateTrue'))();
   }
 
-  _dart_cJSON_CreateTrue _cJSON_CreateTrue;
+  _dart_cJSON_CreateTrue? _cJSON_CreateTrue;
 
   ffi.Pointer<cJSON> cJSON_CreateFalse() {
-    _cJSON_CreateFalse ??=
+    return (_cJSON_CreateFalse ??=
         _dylib.lookupFunction<_c_cJSON_CreateFalse, _dart_cJSON_CreateFalse>(
-            'cJSON_CreateFalse');
-    return _cJSON_CreateFalse();
+            'cJSON_CreateFalse'))();
   }
 
-  _dart_cJSON_CreateFalse _cJSON_CreateFalse;
+  _dart_cJSON_CreateFalse? _cJSON_CreateFalse;
 
   ffi.Pointer<cJSON> cJSON_CreateBool(
     int boolean,
   ) {
-    _cJSON_CreateBool ??=
+    return (_cJSON_CreateBool ??=
         _dylib.lookupFunction<_c_cJSON_CreateBool, _dart_cJSON_CreateBool>(
-            'cJSON_CreateBool');
-    return _cJSON_CreateBool(
+            'cJSON_CreateBool'))(
       boolean,
     );
   }
 
-  _dart_cJSON_CreateBool _cJSON_CreateBool;
+  _dart_cJSON_CreateBool? _cJSON_CreateBool;
 
   ffi.Pointer<cJSON> cJSON_CreateNumber(
     double num,
   ) {
-    _cJSON_CreateNumber ??=
+    return (_cJSON_CreateNumber ??=
         _dylib.lookupFunction<_c_cJSON_CreateNumber, _dart_cJSON_CreateNumber>(
-            'cJSON_CreateNumber');
-    return _cJSON_CreateNumber(
+            'cJSON_CreateNumber'))(
       num,
     );
   }
 
-  _dart_cJSON_CreateNumber _cJSON_CreateNumber;
+  _dart_cJSON_CreateNumber? _cJSON_CreateNumber;
 
   ffi.Pointer<cJSON> cJSON_CreateString(
     ffi.Pointer<ffi.Int8> string,
   ) {
-    _cJSON_CreateString ??=
+    return (_cJSON_CreateString ??=
         _dylib.lookupFunction<_c_cJSON_CreateString, _dart_cJSON_CreateString>(
-            'cJSON_CreateString');
-    return _cJSON_CreateString(
+            'cJSON_CreateString'))(
       string,
     );
   }
 
-  _dart_cJSON_CreateString _cJSON_CreateString;
+  _dart_cJSON_CreateString? _cJSON_CreateString;
 
   ffi.Pointer<cJSON> cJSON_CreateRaw(
     ffi.Pointer<ffi.Int8> raw,
   ) {
-    _cJSON_CreateRaw ??=
+    return (_cJSON_CreateRaw ??=
         _dylib.lookupFunction<_c_cJSON_CreateRaw, _dart_cJSON_CreateRaw>(
-            'cJSON_CreateRaw');
-    return _cJSON_CreateRaw(
+            'cJSON_CreateRaw'))(
       raw,
     );
   }
 
-  _dart_cJSON_CreateRaw _cJSON_CreateRaw;
+  _dart_cJSON_CreateRaw? _cJSON_CreateRaw;
 
   ffi.Pointer<cJSON> cJSON_CreateArray() {
-    _cJSON_CreateArray ??=
+    return (_cJSON_CreateArray ??=
         _dylib.lookupFunction<_c_cJSON_CreateArray, _dart_cJSON_CreateArray>(
-            'cJSON_CreateArray');
-    return _cJSON_CreateArray();
+            'cJSON_CreateArray'))();
   }
 
-  _dart_cJSON_CreateArray _cJSON_CreateArray;
+  _dart_cJSON_CreateArray? _cJSON_CreateArray;
 
   ffi.Pointer<cJSON> cJSON_CreateObject() {
-    _cJSON_CreateObject ??=
+    return (_cJSON_CreateObject ??=
         _dylib.lookupFunction<_c_cJSON_CreateObject, _dart_cJSON_CreateObject>(
-            'cJSON_CreateObject');
-    return _cJSON_CreateObject();
+            'cJSON_CreateObject'))();
   }
 
-  _dart_cJSON_CreateObject _cJSON_CreateObject;
+  _dart_cJSON_CreateObject? _cJSON_CreateObject;
 
   ffi.Pointer<cJSON> cJSON_CreateStringReference(
     ffi.Pointer<ffi.Int8> string,
   ) {
-    _cJSON_CreateStringReference ??= _dylib.lookupFunction<
+    return (_cJSON_CreateStringReference ??= _dylib.lookupFunction<
         _c_cJSON_CreateStringReference,
-        _dart_cJSON_CreateStringReference>('cJSON_CreateStringReference');
-    return _cJSON_CreateStringReference(
+        _dart_cJSON_CreateStringReference>('cJSON_CreateStringReference'))(
       string,
     );
   }
 
-  _dart_cJSON_CreateStringReference _cJSON_CreateStringReference;
+  _dart_cJSON_CreateStringReference? _cJSON_CreateStringReference;
 
   ffi.Pointer<cJSON> cJSON_CreateObjectReference(
     ffi.Pointer<cJSON> child,
   ) {
-    _cJSON_CreateObjectReference ??= _dylib.lookupFunction<
+    return (_cJSON_CreateObjectReference ??= _dylib.lookupFunction<
         _c_cJSON_CreateObjectReference,
-        _dart_cJSON_CreateObjectReference>('cJSON_CreateObjectReference');
-    return _cJSON_CreateObjectReference(
+        _dart_cJSON_CreateObjectReference>('cJSON_CreateObjectReference'))(
       child,
     );
   }
 
-  _dart_cJSON_CreateObjectReference _cJSON_CreateObjectReference;
+  _dart_cJSON_CreateObjectReference? _cJSON_CreateObjectReference;
 
   ffi.Pointer<cJSON> cJSON_CreateArrayReference(
     ffi.Pointer<cJSON> child,
   ) {
-    _cJSON_CreateArrayReference ??= _dylib.lookupFunction<
+    return (_cJSON_CreateArrayReference ??= _dylib.lookupFunction<
         _c_cJSON_CreateArrayReference,
-        _dart_cJSON_CreateArrayReference>('cJSON_CreateArrayReference');
-    return _cJSON_CreateArrayReference(
+        _dart_cJSON_CreateArrayReference>('cJSON_CreateArrayReference'))(
       child,
     );
   }
 
-  _dart_cJSON_CreateArrayReference _cJSON_CreateArrayReference;
+  _dart_cJSON_CreateArrayReference? _cJSON_CreateArrayReference;
 
   ffi.Pointer<cJSON> cJSON_CreateIntArray(
     ffi.Pointer<ffi.Int32> numbers,
     int count,
   ) {
-    _cJSON_CreateIntArray ??= _dylib.lookupFunction<_c_cJSON_CreateIntArray,
-        _dart_cJSON_CreateIntArray>('cJSON_CreateIntArray');
-    return _cJSON_CreateIntArray(
+    return (_cJSON_CreateIntArray ??= _dylib.lookupFunction<
+        _c_cJSON_CreateIntArray,
+        _dart_cJSON_CreateIntArray>('cJSON_CreateIntArray'))(
       numbers,
       count,
     );
   }
 
-  _dart_cJSON_CreateIntArray _cJSON_CreateIntArray;
+  _dart_cJSON_CreateIntArray? _cJSON_CreateIntArray;
 
   ffi.Pointer<cJSON> cJSON_CreateFloatArray(
     ffi.Pointer<ffi.Float> numbers,
     int count,
   ) {
-    _cJSON_CreateFloatArray ??= _dylib.lookupFunction<_c_cJSON_CreateFloatArray,
-        _dart_cJSON_CreateFloatArray>('cJSON_CreateFloatArray');
-    return _cJSON_CreateFloatArray(
+    return (_cJSON_CreateFloatArray ??= _dylib.lookupFunction<
+        _c_cJSON_CreateFloatArray,
+        _dart_cJSON_CreateFloatArray>('cJSON_CreateFloatArray'))(
       numbers,
       count,
     );
   }
 
-  _dart_cJSON_CreateFloatArray _cJSON_CreateFloatArray;
+  _dart_cJSON_CreateFloatArray? _cJSON_CreateFloatArray;
 
   ffi.Pointer<cJSON> cJSON_CreateDoubleArray(
     ffi.Pointer<ffi.Double> numbers,
     int count,
   ) {
-    _cJSON_CreateDoubleArray ??= _dylib.lookupFunction<
+    return (_cJSON_CreateDoubleArray ??= _dylib.lookupFunction<
         _c_cJSON_CreateDoubleArray,
-        _dart_cJSON_CreateDoubleArray>('cJSON_CreateDoubleArray');
-    return _cJSON_CreateDoubleArray(
+        _dart_cJSON_CreateDoubleArray>('cJSON_CreateDoubleArray'))(
       numbers,
       count,
     );
   }
 
-  _dart_cJSON_CreateDoubleArray _cJSON_CreateDoubleArray;
+  _dart_cJSON_CreateDoubleArray? _cJSON_CreateDoubleArray;
 
   ffi.Pointer<cJSON> cJSON_CreateStringArray(
     ffi.Pointer<ffi.Pointer<ffi.Int8>> strings,
     int count,
   ) {
-    _cJSON_CreateStringArray ??= _dylib.lookupFunction<
+    return (_cJSON_CreateStringArray ??= _dylib.lookupFunction<
         _c_cJSON_CreateStringArray,
-        _dart_cJSON_CreateStringArray>('cJSON_CreateStringArray');
-    return _cJSON_CreateStringArray(
+        _dart_cJSON_CreateStringArray>('cJSON_CreateStringArray'))(
       strings,
       count,
     );
   }
 
-  _dart_cJSON_CreateStringArray _cJSON_CreateStringArray;
+  _dart_cJSON_CreateStringArray? _cJSON_CreateStringArray;
 
   void cJSON_AddItemToArray(
     ffi.Pointer<cJSON> array,
     ffi.Pointer<cJSON> item,
   ) {
-    _cJSON_AddItemToArray ??= _dylib.lookupFunction<_c_cJSON_AddItemToArray,
-        _dart_cJSON_AddItemToArray>('cJSON_AddItemToArray');
-    return _cJSON_AddItemToArray(
+    return (_cJSON_AddItemToArray ??= _dylib.lookupFunction<
+        _c_cJSON_AddItemToArray,
+        _dart_cJSON_AddItemToArray>('cJSON_AddItemToArray'))(
       array,
       item,
     );
   }
 
-  _dart_cJSON_AddItemToArray _cJSON_AddItemToArray;
+  _dart_cJSON_AddItemToArray? _cJSON_AddItemToArray;
 
   void cJSON_AddItemToObject(
     ffi.Pointer<cJSON> object,
     ffi.Pointer<ffi.Int8> string,
     ffi.Pointer<cJSON> item,
   ) {
-    _cJSON_AddItemToObject ??= _dylib.lookupFunction<_c_cJSON_AddItemToObject,
-        _dart_cJSON_AddItemToObject>('cJSON_AddItemToObject');
-    return _cJSON_AddItemToObject(
+    return (_cJSON_AddItemToObject ??= _dylib.lookupFunction<
+        _c_cJSON_AddItemToObject,
+        _dart_cJSON_AddItemToObject>('cJSON_AddItemToObject'))(
       object,
       string,
       item,
     );
   }
 
-  _dart_cJSON_AddItemToObject _cJSON_AddItemToObject;
+  _dart_cJSON_AddItemToObject? _cJSON_AddItemToObject;
 
   void cJSON_AddItemToObjectCS(
     ffi.Pointer<cJSON> object,
     ffi.Pointer<ffi.Int8> string,
     ffi.Pointer<cJSON> item,
   ) {
-    _cJSON_AddItemToObjectCS ??= _dylib.lookupFunction<
+    return (_cJSON_AddItemToObjectCS ??= _dylib.lookupFunction<
         _c_cJSON_AddItemToObjectCS,
-        _dart_cJSON_AddItemToObjectCS>('cJSON_AddItemToObjectCS');
-    return _cJSON_AddItemToObjectCS(
+        _dart_cJSON_AddItemToObjectCS>('cJSON_AddItemToObjectCS'))(
       object,
       string,
       item,
     );
   }
 
-  _dart_cJSON_AddItemToObjectCS _cJSON_AddItemToObjectCS;
+  _dart_cJSON_AddItemToObjectCS? _cJSON_AddItemToObjectCS;
 
   void cJSON_AddItemReferenceToArray(
     ffi.Pointer<cJSON> array,
     ffi.Pointer<cJSON> item,
   ) {
-    _cJSON_AddItemReferenceToArray ??= _dylib.lookupFunction<
+    return (_cJSON_AddItemReferenceToArray ??= _dylib.lookupFunction<
         _c_cJSON_AddItemReferenceToArray,
-        _dart_cJSON_AddItemReferenceToArray>('cJSON_AddItemReferenceToArray');
-    return _cJSON_AddItemReferenceToArray(
+        _dart_cJSON_AddItemReferenceToArray>('cJSON_AddItemReferenceToArray'))(
       array,
       item,
     );
   }
 
-  _dart_cJSON_AddItemReferenceToArray _cJSON_AddItemReferenceToArray;
+  _dart_cJSON_AddItemReferenceToArray? _cJSON_AddItemReferenceToArray;
 
   void cJSON_AddItemReferenceToObject(
     ffi.Pointer<cJSON> object,
     ffi.Pointer<ffi.Int8> string,
     ffi.Pointer<cJSON> item,
   ) {
-    _cJSON_AddItemReferenceToObject ??= _dylib.lookupFunction<
-        _c_cJSON_AddItemReferenceToObject,
-        _dart_cJSON_AddItemReferenceToObject>('cJSON_AddItemReferenceToObject');
-    return _cJSON_AddItemReferenceToObject(
+    return (_cJSON_AddItemReferenceToObject ??= _dylib.lookupFunction<
+            _c_cJSON_AddItemReferenceToObject,
+            _dart_cJSON_AddItemReferenceToObject>(
+        'cJSON_AddItemReferenceToObject'))(
       object,
       string,
       item,
     );
   }
 
-  _dart_cJSON_AddItemReferenceToObject _cJSON_AddItemReferenceToObject;
+  _dart_cJSON_AddItemReferenceToObject? _cJSON_AddItemReferenceToObject;
 
   ffi.Pointer<cJSON> cJSON_DetachItemViaPointer(
     ffi.Pointer<cJSON> parent,
     ffi.Pointer<cJSON> item,
   ) {
-    _cJSON_DetachItemViaPointer ??= _dylib.lookupFunction<
+    return (_cJSON_DetachItemViaPointer ??= _dylib.lookupFunction<
         _c_cJSON_DetachItemViaPointer,
-        _dart_cJSON_DetachItemViaPointer>('cJSON_DetachItemViaPointer');
-    return _cJSON_DetachItemViaPointer(
+        _dart_cJSON_DetachItemViaPointer>('cJSON_DetachItemViaPointer'))(
       parent,
       item,
     );
   }
 
-  _dart_cJSON_DetachItemViaPointer _cJSON_DetachItemViaPointer;
+  _dart_cJSON_DetachItemViaPointer? _cJSON_DetachItemViaPointer;
 
   ffi.Pointer<cJSON> cJSON_DetachItemFromArray(
     ffi.Pointer<cJSON> array,
     int which,
   ) {
-    _cJSON_DetachItemFromArray ??= _dylib.lookupFunction<
+    return (_cJSON_DetachItemFromArray ??= _dylib.lookupFunction<
         _c_cJSON_DetachItemFromArray,
-        _dart_cJSON_DetachItemFromArray>('cJSON_DetachItemFromArray');
-    return _cJSON_DetachItemFromArray(
+        _dart_cJSON_DetachItemFromArray>('cJSON_DetachItemFromArray'))(
       array,
       which,
     );
   }
 
-  _dart_cJSON_DetachItemFromArray _cJSON_DetachItemFromArray;
+  _dart_cJSON_DetachItemFromArray? _cJSON_DetachItemFromArray;
 
   void cJSON_DeleteItemFromArray(
     ffi.Pointer<cJSON> array,
     int which,
   ) {
-    _cJSON_DeleteItemFromArray ??= _dylib.lookupFunction<
+    return (_cJSON_DeleteItemFromArray ??= _dylib.lookupFunction<
         _c_cJSON_DeleteItemFromArray,
-        _dart_cJSON_DeleteItemFromArray>('cJSON_DeleteItemFromArray');
-    return _cJSON_DeleteItemFromArray(
+        _dart_cJSON_DeleteItemFromArray>('cJSON_DeleteItemFromArray'))(
       array,
       which,
     );
   }
 
-  _dart_cJSON_DeleteItemFromArray _cJSON_DeleteItemFromArray;
+  _dart_cJSON_DeleteItemFromArray? _cJSON_DeleteItemFromArray;
 
   ffi.Pointer<cJSON> cJSON_DetachItemFromObject(
     ffi.Pointer<cJSON> object,
     ffi.Pointer<ffi.Int8> string,
   ) {
-    _cJSON_DetachItemFromObject ??= _dylib.lookupFunction<
+    return (_cJSON_DetachItemFromObject ??= _dylib.lookupFunction<
         _c_cJSON_DetachItemFromObject,
-        _dart_cJSON_DetachItemFromObject>('cJSON_DetachItemFromObject');
-    return _cJSON_DetachItemFromObject(
+        _dart_cJSON_DetachItemFromObject>('cJSON_DetachItemFromObject'))(
       object,
       string,
     );
   }
 
-  _dart_cJSON_DetachItemFromObject _cJSON_DetachItemFromObject;
+  _dart_cJSON_DetachItemFromObject? _cJSON_DetachItemFromObject;
 
   ffi.Pointer<cJSON> cJSON_DetachItemFromObjectCaseSensitive(
     ffi.Pointer<cJSON> object,
     ffi.Pointer<ffi.Int8> string,
   ) {
-    _cJSON_DetachItemFromObjectCaseSensitive ??= _dylib.lookupFunction<
+    return (_cJSON_DetachItemFromObjectCaseSensitive ??= _dylib.lookupFunction<
             _c_cJSON_DetachItemFromObjectCaseSensitive,
             _dart_cJSON_DetachItemFromObjectCaseSensitive>(
-        'cJSON_DetachItemFromObjectCaseSensitive');
-    return _cJSON_DetachItemFromObjectCaseSensitive(
+        'cJSON_DetachItemFromObjectCaseSensitive'))(
       object,
       string,
     );
   }
 
-  _dart_cJSON_DetachItemFromObjectCaseSensitive
+  _dart_cJSON_DetachItemFromObjectCaseSensitive?
       _cJSON_DetachItemFromObjectCaseSensitive;
 
   void cJSON_DeleteItemFromObject(
     ffi.Pointer<cJSON> object,
     ffi.Pointer<ffi.Int8> string,
   ) {
-    _cJSON_DeleteItemFromObject ??= _dylib.lookupFunction<
+    return (_cJSON_DeleteItemFromObject ??= _dylib.lookupFunction<
         _c_cJSON_DeleteItemFromObject,
-        _dart_cJSON_DeleteItemFromObject>('cJSON_DeleteItemFromObject');
-    return _cJSON_DeleteItemFromObject(
+        _dart_cJSON_DeleteItemFromObject>('cJSON_DeleteItemFromObject'))(
       object,
       string,
     );
   }
 
-  _dart_cJSON_DeleteItemFromObject _cJSON_DeleteItemFromObject;
+  _dart_cJSON_DeleteItemFromObject? _cJSON_DeleteItemFromObject;
 
   void cJSON_DeleteItemFromObjectCaseSensitive(
     ffi.Pointer<cJSON> object,
     ffi.Pointer<ffi.Int8> string,
   ) {
-    _cJSON_DeleteItemFromObjectCaseSensitive ??= _dylib.lookupFunction<
+    return (_cJSON_DeleteItemFromObjectCaseSensitive ??= _dylib.lookupFunction<
             _c_cJSON_DeleteItemFromObjectCaseSensitive,
             _dart_cJSON_DeleteItemFromObjectCaseSensitive>(
-        'cJSON_DeleteItemFromObjectCaseSensitive');
-    return _cJSON_DeleteItemFromObjectCaseSensitive(
+        'cJSON_DeleteItemFromObjectCaseSensitive'))(
       object,
       string,
     );
   }
 
-  _dart_cJSON_DeleteItemFromObjectCaseSensitive
+  _dart_cJSON_DeleteItemFromObjectCaseSensitive?
       _cJSON_DeleteItemFromObjectCaseSensitive;
 
   void cJSON_InsertItemInArray(
@@ -735,332 +695,320 @@
     int which,
     ffi.Pointer<cJSON> newitem,
   ) {
-    _cJSON_InsertItemInArray ??= _dylib.lookupFunction<
+    return (_cJSON_InsertItemInArray ??= _dylib.lookupFunction<
         _c_cJSON_InsertItemInArray,
-        _dart_cJSON_InsertItemInArray>('cJSON_InsertItemInArray');
-    return _cJSON_InsertItemInArray(
+        _dart_cJSON_InsertItemInArray>('cJSON_InsertItemInArray'))(
       array,
       which,
       newitem,
     );
   }
 
-  _dart_cJSON_InsertItemInArray _cJSON_InsertItemInArray;
+  _dart_cJSON_InsertItemInArray? _cJSON_InsertItemInArray;
 
   int cJSON_ReplaceItemViaPointer(
     ffi.Pointer<cJSON> parent,
     ffi.Pointer<cJSON> item,
     ffi.Pointer<cJSON> replacement,
   ) {
-    _cJSON_ReplaceItemViaPointer ??= _dylib.lookupFunction<
+    return (_cJSON_ReplaceItemViaPointer ??= _dylib.lookupFunction<
         _c_cJSON_ReplaceItemViaPointer,
-        _dart_cJSON_ReplaceItemViaPointer>('cJSON_ReplaceItemViaPointer');
-    return _cJSON_ReplaceItemViaPointer(
+        _dart_cJSON_ReplaceItemViaPointer>('cJSON_ReplaceItemViaPointer'))(
       parent,
       item,
       replacement,
     );
   }
 
-  _dart_cJSON_ReplaceItemViaPointer _cJSON_ReplaceItemViaPointer;
+  _dart_cJSON_ReplaceItemViaPointer? _cJSON_ReplaceItemViaPointer;
 
   void cJSON_ReplaceItemInArray(
     ffi.Pointer<cJSON> array,
     int which,
     ffi.Pointer<cJSON> newitem,
   ) {
-    _cJSON_ReplaceItemInArray ??= _dylib.lookupFunction<
+    return (_cJSON_ReplaceItemInArray ??= _dylib.lookupFunction<
         _c_cJSON_ReplaceItemInArray,
-        _dart_cJSON_ReplaceItemInArray>('cJSON_ReplaceItemInArray');
-    return _cJSON_ReplaceItemInArray(
+        _dart_cJSON_ReplaceItemInArray>('cJSON_ReplaceItemInArray'))(
       array,
       which,
       newitem,
     );
   }
 
-  _dart_cJSON_ReplaceItemInArray _cJSON_ReplaceItemInArray;
+  _dart_cJSON_ReplaceItemInArray? _cJSON_ReplaceItemInArray;
 
   void cJSON_ReplaceItemInObject(
     ffi.Pointer<cJSON> object,
     ffi.Pointer<ffi.Int8> string,
     ffi.Pointer<cJSON> newitem,
   ) {
-    _cJSON_ReplaceItemInObject ??= _dylib.lookupFunction<
+    return (_cJSON_ReplaceItemInObject ??= _dylib.lookupFunction<
         _c_cJSON_ReplaceItemInObject,
-        _dart_cJSON_ReplaceItemInObject>('cJSON_ReplaceItemInObject');
-    return _cJSON_ReplaceItemInObject(
+        _dart_cJSON_ReplaceItemInObject>('cJSON_ReplaceItemInObject'))(
       object,
       string,
       newitem,
     );
   }
 
-  _dart_cJSON_ReplaceItemInObject _cJSON_ReplaceItemInObject;
+  _dart_cJSON_ReplaceItemInObject? _cJSON_ReplaceItemInObject;
 
   void cJSON_ReplaceItemInObjectCaseSensitive(
     ffi.Pointer<cJSON> object,
     ffi.Pointer<ffi.Int8> string,
     ffi.Pointer<cJSON> newitem,
   ) {
-    _cJSON_ReplaceItemInObjectCaseSensitive ??= _dylib.lookupFunction<
+    return (_cJSON_ReplaceItemInObjectCaseSensitive ??= _dylib.lookupFunction<
             _c_cJSON_ReplaceItemInObjectCaseSensitive,
             _dart_cJSON_ReplaceItemInObjectCaseSensitive>(
-        'cJSON_ReplaceItemInObjectCaseSensitive');
-    return _cJSON_ReplaceItemInObjectCaseSensitive(
+        'cJSON_ReplaceItemInObjectCaseSensitive'))(
       object,
       string,
       newitem,
     );
   }
 
-  _dart_cJSON_ReplaceItemInObjectCaseSensitive
+  _dart_cJSON_ReplaceItemInObjectCaseSensitive?
       _cJSON_ReplaceItemInObjectCaseSensitive;
 
   ffi.Pointer<cJSON> cJSON_Duplicate(
     ffi.Pointer<cJSON> item,
     int recurse,
   ) {
-    _cJSON_Duplicate ??=
+    return (_cJSON_Duplicate ??=
         _dylib.lookupFunction<_c_cJSON_Duplicate, _dart_cJSON_Duplicate>(
-            'cJSON_Duplicate');
-    return _cJSON_Duplicate(
+            'cJSON_Duplicate'))(
       item,
       recurse,
     );
   }
 
-  _dart_cJSON_Duplicate _cJSON_Duplicate;
+  _dart_cJSON_Duplicate? _cJSON_Duplicate;
 
   int cJSON_Compare(
     ffi.Pointer<cJSON> a,
     ffi.Pointer<cJSON> b,
     int case_sensitive,
   ) {
-    _cJSON_Compare ??= _dylib
-        .lookupFunction<_c_cJSON_Compare, _dart_cJSON_Compare>('cJSON_Compare');
-    return _cJSON_Compare(
+    return (_cJSON_Compare ??=
+        _dylib.lookupFunction<_c_cJSON_Compare, _dart_cJSON_Compare>(
+            'cJSON_Compare'))(
       a,
       b,
       case_sensitive,
     );
   }
 
-  _dart_cJSON_Compare _cJSON_Compare;
+  _dart_cJSON_Compare? _cJSON_Compare;
 
   void cJSON_Minify(
     ffi.Pointer<ffi.Int8> json,
   ) {
-    _cJSON_Minify ??= _dylib
-        .lookupFunction<_c_cJSON_Minify, _dart_cJSON_Minify>('cJSON_Minify');
-    return _cJSON_Minify(
+    return (_cJSON_Minify ??= _dylib
+        .lookupFunction<_c_cJSON_Minify, _dart_cJSON_Minify>('cJSON_Minify'))(
       json,
     );
   }
 
-  _dart_cJSON_Minify _cJSON_Minify;
+  _dart_cJSON_Minify? _cJSON_Minify;
 
   ffi.Pointer<cJSON> cJSON_AddNullToObject(
     ffi.Pointer<cJSON> object,
     ffi.Pointer<ffi.Int8> name,
   ) {
-    _cJSON_AddNullToObject ??= _dylib.lookupFunction<_c_cJSON_AddNullToObject,
-        _dart_cJSON_AddNullToObject>('cJSON_AddNullToObject');
-    return _cJSON_AddNullToObject(
+    return (_cJSON_AddNullToObject ??= _dylib.lookupFunction<
+        _c_cJSON_AddNullToObject,
+        _dart_cJSON_AddNullToObject>('cJSON_AddNullToObject'))(
       object,
       name,
     );
   }
 
-  _dart_cJSON_AddNullToObject _cJSON_AddNullToObject;
+  _dart_cJSON_AddNullToObject? _cJSON_AddNullToObject;
 
   ffi.Pointer<cJSON> cJSON_AddTrueToObject(
     ffi.Pointer<cJSON> object,
     ffi.Pointer<ffi.Int8> name,
   ) {
-    _cJSON_AddTrueToObject ??= _dylib.lookupFunction<_c_cJSON_AddTrueToObject,
-        _dart_cJSON_AddTrueToObject>('cJSON_AddTrueToObject');
-    return _cJSON_AddTrueToObject(
+    return (_cJSON_AddTrueToObject ??= _dylib.lookupFunction<
+        _c_cJSON_AddTrueToObject,
+        _dart_cJSON_AddTrueToObject>('cJSON_AddTrueToObject'))(
       object,
       name,
     );
   }
 
-  _dart_cJSON_AddTrueToObject _cJSON_AddTrueToObject;
+  _dart_cJSON_AddTrueToObject? _cJSON_AddTrueToObject;
 
   ffi.Pointer<cJSON> cJSON_AddFalseToObject(
     ffi.Pointer<cJSON> object,
     ffi.Pointer<ffi.Int8> name,
   ) {
-    _cJSON_AddFalseToObject ??= _dylib.lookupFunction<_c_cJSON_AddFalseToObject,
-        _dart_cJSON_AddFalseToObject>('cJSON_AddFalseToObject');
-    return _cJSON_AddFalseToObject(
+    return (_cJSON_AddFalseToObject ??= _dylib.lookupFunction<
+        _c_cJSON_AddFalseToObject,
+        _dart_cJSON_AddFalseToObject>('cJSON_AddFalseToObject'))(
       object,
       name,
     );
   }
 
-  _dart_cJSON_AddFalseToObject _cJSON_AddFalseToObject;
+  _dart_cJSON_AddFalseToObject? _cJSON_AddFalseToObject;
 
   ffi.Pointer<cJSON> cJSON_AddBoolToObject(
     ffi.Pointer<cJSON> object,
     ffi.Pointer<ffi.Int8> name,
     int boolean,
   ) {
-    _cJSON_AddBoolToObject ??= _dylib.lookupFunction<_c_cJSON_AddBoolToObject,
-        _dart_cJSON_AddBoolToObject>('cJSON_AddBoolToObject');
-    return _cJSON_AddBoolToObject(
+    return (_cJSON_AddBoolToObject ??= _dylib.lookupFunction<
+        _c_cJSON_AddBoolToObject,
+        _dart_cJSON_AddBoolToObject>('cJSON_AddBoolToObject'))(
       object,
       name,
       boolean,
     );
   }
 
-  _dart_cJSON_AddBoolToObject _cJSON_AddBoolToObject;
+  _dart_cJSON_AddBoolToObject? _cJSON_AddBoolToObject;
 
   ffi.Pointer<cJSON> cJSON_AddNumberToObject(
     ffi.Pointer<cJSON> object,
     ffi.Pointer<ffi.Int8> name,
     double number,
   ) {
-    _cJSON_AddNumberToObject ??= _dylib.lookupFunction<
+    return (_cJSON_AddNumberToObject ??= _dylib.lookupFunction<
         _c_cJSON_AddNumberToObject,
-        _dart_cJSON_AddNumberToObject>('cJSON_AddNumberToObject');
-    return _cJSON_AddNumberToObject(
+        _dart_cJSON_AddNumberToObject>('cJSON_AddNumberToObject'))(
       object,
       name,
       number,
     );
   }
 
-  _dart_cJSON_AddNumberToObject _cJSON_AddNumberToObject;
+  _dart_cJSON_AddNumberToObject? _cJSON_AddNumberToObject;
 
   ffi.Pointer<cJSON> cJSON_AddStringToObject(
     ffi.Pointer<cJSON> object,
     ffi.Pointer<ffi.Int8> name,
     ffi.Pointer<ffi.Int8> string,
   ) {
-    _cJSON_AddStringToObject ??= _dylib.lookupFunction<
+    return (_cJSON_AddStringToObject ??= _dylib.lookupFunction<
         _c_cJSON_AddStringToObject,
-        _dart_cJSON_AddStringToObject>('cJSON_AddStringToObject');
-    return _cJSON_AddStringToObject(
+        _dart_cJSON_AddStringToObject>('cJSON_AddStringToObject'))(
       object,
       name,
       string,
     );
   }
 
-  _dart_cJSON_AddStringToObject _cJSON_AddStringToObject;
+  _dart_cJSON_AddStringToObject? _cJSON_AddStringToObject;
 
   ffi.Pointer<cJSON> cJSON_AddRawToObject(
     ffi.Pointer<cJSON> object,
     ffi.Pointer<ffi.Int8> name,
     ffi.Pointer<ffi.Int8> raw,
   ) {
-    _cJSON_AddRawToObject ??= _dylib.lookupFunction<_c_cJSON_AddRawToObject,
-        _dart_cJSON_AddRawToObject>('cJSON_AddRawToObject');
-    return _cJSON_AddRawToObject(
+    return (_cJSON_AddRawToObject ??= _dylib.lookupFunction<
+        _c_cJSON_AddRawToObject,
+        _dart_cJSON_AddRawToObject>('cJSON_AddRawToObject'))(
       object,
       name,
       raw,
     );
   }
 
-  _dart_cJSON_AddRawToObject _cJSON_AddRawToObject;
+  _dart_cJSON_AddRawToObject? _cJSON_AddRawToObject;
 
   ffi.Pointer<cJSON> cJSON_AddObjectToObject(
     ffi.Pointer<cJSON> object,
     ffi.Pointer<ffi.Int8> name,
   ) {
-    _cJSON_AddObjectToObject ??= _dylib.lookupFunction<
+    return (_cJSON_AddObjectToObject ??= _dylib.lookupFunction<
         _c_cJSON_AddObjectToObject,
-        _dart_cJSON_AddObjectToObject>('cJSON_AddObjectToObject');
-    return _cJSON_AddObjectToObject(
+        _dart_cJSON_AddObjectToObject>('cJSON_AddObjectToObject'))(
       object,
       name,
     );
   }
 
-  _dart_cJSON_AddObjectToObject _cJSON_AddObjectToObject;
+  _dart_cJSON_AddObjectToObject? _cJSON_AddObjectToObject;
 
   ffi.Pointer<cJSON> cJSON_AddArrayToObject(
     ffi.Pointer<cJSON> object,
     ffi.Pointer<ffi.Int8> name,
   ) {
-    _cJSON_AddArrayToObject ??= _dylib.lookupFunction<_c_cJSON_AddArrayToObject,
-        _dart_cJSON_AddArrayToObject>('cJSON_AddArrayToObject');
-    return _cJSON_AddArrayToObject(
+    return (_cJSON_AddArrayToObject ??= _dylib.lookupFunction<
+        _c_cJSON_AddArrayToObject,
+        _dart_cJSON_AddArrayToObject>('cJSON_AddArrayToObject'))(
       object,
       name,
     );
   }
 
-  _dart_cJSON_AddArrayToObject _cJSON_AddArrayToObject;
+  _dart_cJSON_AddArrayToObject? _cJSON_AddArrayToObject;
 
   double cJSON_SetNumberHelper(
     ffi.Pointer<cJSON> object,
     double number,
   ) {
-    _cJSON_SetNumberHelper ??= _dylib.lookupFunction<_c_cJSON_SetNumberHelper,
-        _dart_cJSON_SetNumberHelper>('cJSON_SetNumberHelper');
-    return _cJSON_SetNumberHelper(
+    return (_cJSON_SetNumberHelper ??= _dylib.lookupFunction<
+        _c_cJSON_SetNumberHelper,
+        _dart_cJSON_SetNumberHelper>('cJSON_SetNumberHelper'))(
       object,
       number,
     );
   }
 
-  _dart_cJSON_SetNumberHelper _cJSON_SetNumberHelper;
+  _dart_cJSON_SetNumberHelper? _cJSON_SetNumberHelper;
 
   ffi.Pointer<ffi.Void> cJSON_malloc(
     int size,
   ) {
-    _cJSON_malloc ??= _dylib
-        .lookupFunction<_c_cJSON_malloc, _dart_cJSON_malloc>('cJSON_malloc');
-    return _cJSON_malloc(
+    return (_cJSON_malloc ??= _dylib
+        .lookupFunction<_c_cJSON_malloc, _dart_cJSON_malloc>('cJSON_malloc'))(
       size,
     );
   }
 
-  _dart_cJSON_malloc _cJSON_malloc;
+  _dart_cJSON_malloc? _cJSON_malloc;
 
   void cJSON_free(
     ffi.Pointer<ffi.Void> object,
   ) {
-    _cJSON_free ??=
-        _dylib.lookupFunction<_c_cJSON_free, _dart_cJSON_free>('cJSON_free');
-    return _cJSON_free(
+    return (_cJSON_free ??=
+        _dylib.lookupFunction<_c_cJSON_free, _dart_cJSON_free>('cJSON_free'))(
       object,
     );
   }
 
-  _dart_cJSON_free _cJSON_free;
+  _dart_cJSON_free? _cJSON_free;
 }
 
 class cJSON extends ffi.Struct {
-  ffi.Pointer<cJSON> next;
+  external ffi.Pointer<cJSON> next;
 
-  ffi.Pointer<cJSON> prev;
+  external ffi.Pointer<cJSON> prev;
 
-  ffi.Pointer<cJSON> child;
+  external ffi.Pointer<cJSON> child;
 
   @ffi.Int32()
-  int type;
+  external int type;
 
-  ffi.Pointer<ffi.Int8> valuestring;
+  external ffi.Pointer<ffi.Int8> valuestring;
 
   @ffi.Int32()
-  int valueint;
+  external int valueint;
 
   @ffi.Double()
-  double valuedouble;
+  external double valuedouble;
 
-  ffi.Pointer<ffi.Int8> string;
+  external ffi.Pointer<ffi.Int8> string;
 }
 
 class cJSON_Hooks extends ffi.Struct {
-  ffi.Pointer<ffi.NativeFunction<_typedefC_1>> malloc_fn;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_1>> malloc_fn;
 
-  ffi.Pointer<ffi.NativeFunction<_typedefC_2>> free_fn;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_2>> free_fn;
 }
 
 const int CJSON_VERSION_MAJOR = 1;
diff --git a/test/large_integration_tests/_expected_libclang_bindings.dart b/test/large_integration_tests/_expected_libclang_bindings.dart
index 4b6325b..e6cc63e 100644
--- a/test/large_integration_tests/_expected_libclang_bindings.dart
+++ b/test/large_integration_tests/_expected_libclang_bindings.dart
@@ -15,41 +15,40 @@
   void clang_disposeStringSet(
     ffi.Pointer<CXStringSet> set_1,
   ) {
-    _clang_disposeStringSet ??= _dylib.lookupFunction<_c_clang_disposeStringSet,
-        _dart_clang_disposeStringSet>('clang_disposeStringSet');
-    return _clang_disposeStringSet(
+    return (_clang_disposeStringSet ??= _dylib.lookupFunction<
+        _c_clang_disposeStringSet,
+        _dart_clang_disposeStringSet>('clang_disposeStringSet'))(
       set_1,
     );
   }
 
-  _dart_clang_disposeStringSet _clang_disposeStringSet;
+  _dart_clang_disposeStringSet? _clang_disposeStringSet;
 
   /// Return the timestamp for use with Clang's -fbuild-session-timestamp=
   /// option.
   int clang_getBuildSessionTimestamp() {
-    _clang_getBuildSessionTimestamp ??= _dylib.lookupFunction<
-        _c_clang_getBuildSessionTimestamp,
-        _dart_clang_getBuildSessionTimestamp>('clang_getBuildSessionTimestamp');
-    return _clang_getBuildSessionTimestamp();
+    return (_clang_getBuildSessionTimestamp ??= _dylib.lookupFunction<
+            _c_clang_getBuildSessionTimestamp,
+            _dart_clang_getBuildSessionTimestamp>(
+        'clang_getBuildSessionTimestamp'))();
   }
 
-  _dart_clang_getBuildSessionTimestamp _clang_getBuildSessionTimestamp;
+  _dart_clang_getBuildSessionTimestamp? _clang_getBuildSessionTimestamp;
 
   /// Create a CXVirtualFileOverlay object. Must be disposed with
   /// clang_VirtualFileOverlay_dispose().
   ffi.Pointer<CXVirtualFileOverlayImpl> clang_VirtualFileOverlay_create(
     int options,
   ) {
-    _clang_VirtualFileOverlay_create ??= _dylib.lookupFunction<
+    return (_clang_VirtualFileOverlay_create ??= _dylib.lookupFunction<
             _c_clang_VirtualFileOverlay_create,
             _dart_clang_VirtualFileOverlay_create>(
-        'clang_VirtualFileOverlay_create');
-    return _clang_VirtualFileOverlay_create(
+        'clang_VirtualFileOverlay_create'))(
       options,
     );
   }
 
-  _dart_clang_VirtualFileOverlay_create _clang_VirtualFileOverlay_create;
+  _dart_clang_VirtualFileOverlay_create? _clang_VirtualFileOverlay_create;
 
   /// Map an absolute virtual file path to an absolute real one. The virtual
   /// path must be canonicalized (not contain "."/"..").
@@ -58,18 +57,17 @@
     ffi.Pointer<ffi.Int8> virtualPath,
     ffi.Pointer<ffi.Int8> realPath,
   ) {
-    _clang_VirtualFileOverlay_addFileMapping ??= _dylib.lookupFunction<
+    return (_clang_VirtualFileOverlay_addFileMapping ??= _dylib.lookupFunction<
             _c_clang_VirtualFileOverlay_addFileMapping,
             _dart_clang_VirtualFileOverlay_addFileMapping>(
-        'clang_VirtualFileOverlay_addFileMapping');
-    return _clang_VirtualFileOverlay_addFileMapping(
+        'clang_VirtualFileOverlay_addFileMapping'))(
       arg0,
       virtualPath,
       realPath,
     );
   }
 
-  _dart_clang_VirtualFileOverlay_addFileMapping
+  _dart_clang_VirtualFileOverlay_addFileMapping?
       _clang_VirtualFileOverlay_addFileMapping;
 
   /// Set the case sensitivity for the CXVirtualFileOverlay object. The
@@ -79,17 +77,16 @@
     ffi.Pointer<CXVirtualFileOverlayImpl> arg0,
     int caseSensitive,
   ) {
-    _clang_VirtualFileOverlay_setCaseSensitivity ??= _dylib.lookupFunction<
-            _c_clang_VirtualFileOverlay_setCaseSensitivity,
-            _dart_clang_VirtualFileOverlay_setCaseSensitivity>(
-        'clang_VirtualFileOverlay_setCaseSensitivity');
-    return _clang_VirtualFileOverlay_setCaseSensitivity(
+    return (_clang_VirtualFileOverlay_setCaseSensitivity ??=
+        _dylib.lookupFunction<_c_clang_VirtualFileOverlay_setCaseSensitivity,
+                _dart_clang_VirtualFileOverlay_setCaseSensitivity>(
+            'clang_VirtualFileOverlay_setCaseSensitivity'))(
       arg0,
       caseSensitive,
     );
   }
 
-  _dart_clang_VirtualFileOverlay_setCaseSensitivity
+  _dart_clang_VirtualFileOverlay_setCaseSensitivity?
       _clang_VirtualFileOverlay_setCaseSensitivity;
 
   /// Write out the CXVirtualFileOverlay object to a char buffer.
@@ -99,11 +96,10 @@
     ffi.Pointer<ffi.Pointer<ffi.Int8>> out_buffer_ptr,
     ffi.Pointer<ffi.Uint32> out_buffer_size,
   ) {
-    _clang_VirtualFileOverlay_writeToBuffer ??= _dylib.lookupFunction<
+    return (_clang_VirtualFileOverlay_writeToBuffer ??= _dylib.lookupFunction<
             _c_clang_VirtualFileOverlay_writeToBuffer,
             _dart_clang_VirtualFileOverlay_writeToBuffer>(
-        'clang_VirtualFileOverlay_writeToBuffer');
-    return _clang_VirtualFileOverlay_writeToBuffer(
+        'clang_VirtualFileOverlay_writeToBuffer'))(
       arg0,
       options,
       out_buffer_ptr,
@@ -111,7 +107,7 @@
     );
   }
 
-  _dart_clang_VirtualFileOverlay_writeToBuffer
+  _dart_clang_VirtualFileOverlay_writeToBuffer?
       _clang_VirtualFileOverlay_writeToBuffer;
 
   /// free memory allocated by libclang, such as the buffer returned by
@@ -119,62 +115,59 @@
   void clang_free(
     ffi.Pointer<ffi.Void> buffer,
   ) {
-    _clang_free ??=
-        _dylib.lookupFunction<_c_clang_free, _dart_clang_free>('clang_free');
-    return _clang_free(
+    return (_clang_free ??=
+        _dylib.lookupFunction<_c_clang_free, _dart_clang_free>('clang_free'))(
       buffer,
     );
   }
 
-  _dart_clang_free _clang_free;
+  _dart_clang_free? _clang_free;
 
   /// Dispose a CXVirtualFileOverlay object.
   void clang_VirtualFileOverlay_dispose(
     ffi.Pointer<CXVirtualFileOverlayImpl> arg0,
   ) {
-    _clang_VirtualFileOverlay_dispose ??= _dylib.lookupFunction<
+    return (_clang_VirtualFileOverlay_dispose ??= _dylib.lookupFunction<
             _c_clang_VirtualFileOverlay_dispose,
             _dart_clang_VirtualFileOverlay_dispose>(
-        'clang_VirtualFileOverlay_dispose');
-    return _clang_VirtualFileOverlay_dispose(
+        'clang_VirtualFileOverlay_dispose'))(
       arg0,
     );
   }
 
-  _dart_clang_VirtualFileOverlay_dispose _clang_VirtualFileOverlay_dispose;
+  _dart_clang_VirtualFileOverlay_dispose? _clang_VirtualFileOverlay_dispose;
 
   /// Create a CXModuleMapDescriptor object. Must be disposed with
   /// clang_ModuleMapDescriptor_dispose().
   ffi.Pointer<CXModuleMapDescriptorImpl> clang_ModuleMapDescriptor_create(
     int options,
   ) {
-    _clang_ModuleMapDescriptor_create ??= _dylib.lookupFunction<
+    return (_clang_ModuleMapDescriptor_create ??= _dylib.lookupFunction<
             _c_clang_ModuleMapDescriptor_create,
             _dart_clang_ModuleMapDescriptor_create>(
-        'clang_ModuleMapDescriptor_create');
-    return _clang_ModuleMapDescriptor_create(
+        'clang_ModuleMapDescriptor_create'))(
       options,
     );
   }
 
-  _dart_clang_ModuleMapDescriptor_create _clang_ModuleMapDescriptor_create;
+  _dart_clang_ModuleMapDescriptor_create? _clang_ModuleMapDescriptor_create;
 
   /// Sets the framework module name that the module.map describes.
   int clang_ModuleMapDescriptor_setFrameworkModuleName(
     ffi.Pointer<CXModuleMapDescriptorImpl> arg0,
     ffi.Pointer<ffi.Int8> name,
   ) {
-    _clang_ModuleMapDescriptor_setFrameworkModuleName ??= _dylib.lookupFunction<
-            _c_clang_ModuleMapDescriptor_setFrameworkModuleName,
-            _dart_clang_ModuleMapDescriptor_setFrameworkModuleName>(
-        'clang_ModuleMapDescriptor_setFrameworkModuleName');
-    return _clang_ModuleMapDescriptor_setFrameworkModuleName(
+    return (_clang_ModuleMapDescriptor_setFrameworkModuleName ??=
+        _dylib.lookupFunction<
+                _c_clang_ModuleMapDescriptor_setFrameworkModuleName,
+                _dart_clang_ModuleMapDescriptor_setFrameworkModuleName>(
+            'clang_ModuleMapDescriptor_setFrameworkModuleName'))(
       arg0,
       name,
     );
   }
 
-  _dart_clang_ModuleMapDescriptor_setFrameworkModuleName
+  _dart_clang_ModuleMapDescriptor_setFrameworkModuleName?
       _clang_ModuleMapDescriptor_setFrameworkModuleName;
 
   /// Sets the umbrealla header name that the module.map describes.
@@ -182,17 +175,16 @@
     ffi.Pointer<CXModuleMapDescriptorImpl> arg0,
     ffi.Pointer<ffi.Int8> name,
   ) {
-    _clang_ModuleMapDescriptor_setUmbrellaHeader ??= _dylib.lookupFunction<
-            _c_clang_ModuleMapDescriptor_setUmbrellaHeader,
-            _dart_clang_ModuleMapDescriptor_setUmbrellaHeader>(
-        'clang_ModuleMapDescriptor_setUmbrellaHeader');
-    return _clang_ModuleMapDescriptor_setUmbrellaHeader(
+    return (_clang_ModuleMapDescriptor_setUmbrellaHeader ??=
+        _dylib.lookupFunction<_c_clang_ModuleMapDescriptor_setUmbrellaHeader,
+                _dart_clang_ModuleMapDescriptor_setUmbrellaHeader>(
+            'clang_ModuleMapDescriptor_setUmbrellaHeader'))(
       arg0,
       name,
     );
   }
 
-  _dart_clang_ModuleMapDescriptor_setUmbrellaHeader
+  _dart_clang_ModuleMapDescriptor_setUmbrellaHeader?
       _clang_ModuleMapDescriptor_setUmbrellaHeader;
 
   /// Write out the CXModuleMapDescriptor object to a char buffer.
@@ -202,11 +194,10 @@
     ffi.Pointer<ffi.Pointer<ffi.Int8>> out_buffer_ptr,
     ffi.Pointer<ffi.Uint32> out_buffer_size,
   ) {
-    _clang_ModuleMapDescriptor_writeToBuffer ??= _dylib.lookupFunction<
+    return (_clang_ModuleMapDescriptor_writeToBuffer ??= _dylib.lookupFunction<
             _c_clang_ModuleMapDescriptor_writeToBuffer,
             _dart_clang_ModuleMapDescriptor_writeToBuffer>(
-        'clang_ModuleMapDescriptor_writeToBuffer');
-    return _clang_ModuleMapDescriptor_writeToBuffer(
+        'clang_ModuleMapDescriptor_writeToBuffer'))(
       arg0,
       options,
       out_buffer_ptr,
@@ -214,130 +205,125 @@
     );
   }
 
-  _dart_clang_ModuleMapDescriptor_writeToBuffer
+  _dart_clang_ModuleMapDescriptor_writeToBuffer?
       _clang_ModuleMapDescriptor_writeToBuffer;
 
   /// Dispose a CXModuleMapDescriptor object.
   void clang_ModuleMapDescriptor_dispose(
     ffi.Pointer<CXModuleMapDescriptorImpl> arg0,
   ) {
-    _clang_ModuleMapDescriptor_dispose ??= _dylib.lookupFunction<
+    return (_clang_ModuleMapDescriptor_dispose ??= _dylib.lookupFunction<
             _c_clang_ModuleMapDescriptor_dispose,
             _dart_clang_ModuleMapDescriptor_dispose>(
-        'clang_ModuleMapDescriptor_dispose');
-    return _clang_ModuleMapDescriptor_dispose(
+        'clang_ModuleMapDescriptor_dispose'))(
       arg0,
     );
   }
 
-  _dart_clang_ModuleMapDescriptor_dispose _clang_ModuleMapDescriptor_dispose;
+  _dart_clang_ModuleMapDescriptor_dispose? _clang_ModuleMapDescriptor_dispose;
 
   /// Provides a shared context for creating translation units.
   ffi.Pointer<ffi.Void> clang_createIndex(
     int excludeDeclarationsFromPCH,
     int displayDiagnostics,
   ) {
-    _clang_createIndex ??=
+    return (_clang_createIndex ??=
         _dylib.lookupFunction<_c_clang_createIndex, _dart_clang_createIndex>(
-            'clang_createIndex');
-    return _clang_createIndex(
+            'clang_createIndex'))(
       excludeDeclarationsFromPCH,
       displayDiagnostics,
     );
   }
 
-  _dart_clang_createIndex _clang_createIndex;
+  _dart_clang_createIndex? _clang_createIndex;
 
   /// Destroy the given index.
   void clang_disposeIndex(
     ffi.Pointer<ffi.Void> index,
   ) {
-    _clang_disposeIndex ??=
+    return (_clang_disposeIndex ??=
         _dylib.lookupFunction<_c_clang_disposeIndex, _dart_clang_disposeIndex>(
-            'clang_disposeIndex');
-    return _clang_disposeIndex(
+            'clang_disposeIndex'))(
       index,
     );
   }
 
-  _dart_clang_disposeIndex _clang_disposeIndex;
+  _dart_clang_disposeIndex? _clang_disposeIndex;
 
   /// Sets general options associated with a CXIndex.
   void clang_CXIndex_setGlobalOptions(
     ffi.Pointer<ffi.Void> arg0,
     int options,
   ) {
-    _clang_CXIndex_setGlobalOptions ??= _dylib.lookupFunction<
-        _c_clang_CXIndex_setGlobalOptions,
-        _dart_clang_CXIndex_setGlobalOptions>('clang_CXIndex_setGlobalOptions');
-    return _clang_CXIndex_setGlobalOptions(
+    return (_clang_CXIndex_setGlobalOptions ??= _dylib.lookupFunction<
+            _c_clang_CXIndex_setGlobalOptions,
+            _dart_clang_CXIndex_setGlobalOptions>(
+        'clang_CXIndex_setGlobalOptions'))(
       arg0,
       options,
     );
   }
 
-  _dart_clang_CXIndex_setGlobalOptions _clang_CXIndex_setGlobalOptions;
+  _dart_clang_CXIndex_setGlobalOptions? _clang_CXIndex_setGlobalOptions;
 
   /// Gets the general options associated with a CXIndex.
   int clang_CXIndex_getGlobalOptions(
     ffi.Pointer<ffi.Void> arg0,
   ) {
-    _clang_CXIndex_getGlobalOptions ??= _dylib.lookupFunction<
-        _c_clang_CXIndex_getGlobalOptions,
-        _dart_clang_CXIndex_getGlobalOptions>('clang_CXIndex_getGlobalOptions');
-    return _clang_CXIndex_getGlobalOptions(
+    return (_clang_CXIndex_getGlobalOptions ??= _dylib.lookupFunction<
+            _c_clang_CXIndex_getGlobalOptions,
+            _dart_clang_CXIndex_getGlobalOptions>(
+        'clang_CXIndex_getGlobalOptions'))(
       arg0,
     );
   }
 
-  _dart_clang_CXIndex_getGlobalOptions _clang_CXIndex_getGlobalOptions;
+  _dart_clang_CXIndex_getGlobalOptions? _clang_CXIndex_getGlobalOptions;
 
   /// Sets the invocation emission path option in a CXIndex.
   void clang_CXIndex_setInvocationEmissionPathOption(
     ffi.Pointer<ffi.Void> arg0,
     ffi.Pointer<ffi.Int8> Path,
   ) {
-    _clang_CXIndex_setInvocationEmissionPathOption ??= _dylib.lookupFunction<
-            _c_clang_CXIndex_setInvocationEmissionPathOption,
-            _dart_clang_CXIndex_setInvocationEmissionPathOption>(
-        'clang_CXIndex_setInvocationEmissionPathOption');
-    return _clang_CXIndex_setInvocationEmissionPathOption(
+    return (_clang_CXIndex_setInvocationEmissionPathOption ??=
+        _dylib.lookupFunction<_c_clang_CXIndex_setInvocationEmissionPathOption,
+                _dart_clang_CXIndex_setInvocationEmissionPathOption>(
+            'clang_CXIndex_setInvocationEmissionPathOption'))(
       arg0,
       Path,
     );
   }
 
-  _dart_clang_CXIndex_setInvocationEmissionPathOption
+  _dart_clang_CXIndex_setInvocationEmissionPathOption?
       _clang_CXIndex_setInvocationEmissionPathOption;
 
   /// Retrieve the last modification time of the given file.
   int clang_getFileTime(
     ffi.Pointer<ffi.Void> SFile,
   ) {
-    _clang_getFileTime ??=
+    return (_clang_getFileTime ??=
         _dylib.lookupFunction<_c_clang_getFileTime, _dart_clang_getFileTime>(
-            'clang_getFileTime');
-    return _clang_getFileTime(
+            'clang_getFileTime'))(
       SFile,
     );
   }
 
-  _dart_clang_getFileTime _clang_getFileTime;
+  _dart_clang_getFileTime? _clang_getFileTime;
 
   /// Retrieve the unique ID for the given file.
   int clang_getFileUniqueID(
     ffi.Pointer<ffi.Void> file,
     ffi.Pointer<CXFileUniqueID> outID,
   ) {
-    _clang_getFileUniqueID ??= _dylib.lookupFunction<_c_clang_getFileUniqueID,
-        _dart_clang_getFileUniqueID>('clang_getFileUniqueID');
-    return _clang_getFileUniqueID(
+    return (_clang_getFileUniqueID ??= _dylib.lookupFunction<
+        _c_clang_getFileUniqueID,
+        _dart_clang_getFileUniqueID>('clang_getFileUniqueID'))(
       file,
       outID,
     );
   }
 
-  _dart_clang_getFileUniqueID _clang_getFileUniqueID;
+  _dart_clang_getFileUniqueID? _clang_getFileUniqueID;
 
   /// Determine whether the given header is guarded against multiple inclusions,
   /// either with the conventional #ifndef/#define/#endif macro guards or with
@@ -346,32 +332,31 @@
     ffi.Pointer<CXTranslationUnitImpl> tu,
     ffi.Pointer<ffi.Void> file,
   ) {
-    _clang_isFileMultipleIncludeGuarded ??= _dylib.lookupFunction<
+    return (_clang_isFileMultipleIncludeGuarded ??= _dylib.lookupFunction<
             _c_clang_isFileMultipleIncludeGuarded,
             _dart_clang_isFileMultipleIncludeGuarded>(
-        'clang_isFileMultipleIncludeGuarded');
-    return _clang_isFileMultipleIncludeGuarded(
+        'clang_isFileMultipleIncludeGuarded'))(
       tu,
       file,
     );
   }
 
-  _dart_clang_isFileMultipleIncludeGuarded _clang_isFileMultipleIncludeGuarded;
+  _dart_clang_isFileMultipleIncludeGuarded? _clang_isFileMultipleIncludeGuarded;
 
   /// Retrieve a file handle within the given translation unit.
   ffi.Pointer<ffi.Void> clang_getFile(
     ffi.Pointer<CXTranslationUnitImpl> tu,
     ffi.Pointer<ffi.Int8> file_name,
   ) {
-    _clang_getFile ??= _dylib
-        .lookupFunction<_c_clang_getFile, _dart_clang_getFile>('clang_getFile');
-    return _clang_getFile(
+    return (_clang_getFile ??=
+        _dylib.lookupFunction<_c_clang_getFile, _dart_clang_getFile>(
+            'clang_getFile'))(
       tu,
       file_name,
     );
   }
 
-  _dart_clang_getFile _clang_getFile;
+  _dart_clang_getFile? _clang_getFile;
 
   /// Retrieve the buffer associated with the given file.
   ffi.Pointer<ffi.Int8> clang_getFileContents(
@@ -379,16 +364,16 @@
     ffi.Pointer<ffi.Void> file,
     ffi.Pointer<ffi.Uint64> size,
   ) {
-    _clang_getFileContents ??= _dylib.lookupFunction<_c_clang_getFileContents,
-        _dart_clang_getFileContents>('clang_getFileContents');
-    return _clang_getFileContents(
+    return (_clang_getFileContents ??= _dylib.lookupFunction<
+        _c_clang_getFileContents,
+        _dart_clang_getFileContents>('clang_getFileContents'))(
       tu,
       file,
       size,
     );
   }
 
-  _dart_clang_getFileContents _clang_getFileContents;
+  _dart_clang_getFileContents? _clang_getFileContents;
 
   /// Returns non-zero if the file1 and file2 point to the same file, or they
   /// are both NULL.
@@ -396,89 +381,84 @@
     ffi.Pointer<ffi.Void> file1,
     ffi.Pointer<ffi.Void> file2,
   ) {
-    _clang_File_isEqual ??=
+    return (_clang_File_isEqual ??=
         _dylib.lookupFunction<_c_clang_File_isEqual, _dart_clang_File_isEqual>(
-            'clang_File_isEqual');
-    return _clang_File_isEqual(
+            'clang_File_isEqual'))(
       file1,
       file2,
     );
   }
 
-  _dart_clang_File_isEqual _clang_File_isEqual;
+  _dart_clang_File_isEqual? _clang_File_isEqual;
 
   /// Retrieve all ranges that were skipped by the preprocessor.
   ffi.Pointer<CXSourceRangeList> clang_getSkippedRanges(
     ffi.Pointer<CXTranslationUnitImpl> tu,
     ffi.Pointer<ffi.Void> file,
   ) {
-    _clang_getSkippedRanges ??= _dylib.lookupFunction<_c_clang_getSkippedRanges,
-        _dart_clang_getSkippedRanges>('clang_getSkippedRanges');
-    return _clang_getSkippedRanges(
+    return (_clang_getSkippedRanges ??= _dylib.lookupFunction<
+        _c_clang_getSkippedRanges,
+        _dart_clang_getSkippedRanges>('clang_getSkippedRanges'))(
       tu,
       file,
     );
   }
 
-  _dart_clang_getSkippedRanges _clang_getSkippedRanges;
+  _dart_clang_getSkippedRanges? _clang_getSkippedRanges;
 
   /// Retrieve all ranges from all files that were skipped by the preprocessor.
   ffi.Pointer<CXSourceRangeList> clang_getAllSkippedRanges(
     ffi.Pointer<CXTranslationUnitImpl> tu,
   ) {
-    _clang_getAllSkippedRanges ??= _dylib.lookupFunction<
+    return (_clang_getAllSkippedRanges ??= _dylib.lookupFunction<
         _c_clang_getAllSkippedRanges,
-        _dart_clang_getAllSkippedRanges>('clang_getAllSkippedRanges');
-    return _clang_getAllSkippedRanges(
+        _dart_clang_getAllSkippedRanges>('clang_getAllSkippedRanges'))(
       tu,
     );
   }
 
-  _dart_clang_getAllSkippedRanges _clang_getAllSkippedRanges;
+  _dart_clang_getAllSkippedRanges? _clang_getAllSkippedRanges;
 
   /// Destroy the given CXSourceRangeList.
   void clang_disposeSourceRangeList(
     ffi.Pointer<CXSourceRangeList> ranges,
   ) {
-    _clang_disposeSourceRangeList ??= _dylib.lookupFunction<
+    return (_clang_disposeSourceRangeList ??= _dylib.lookupFunction<
         _c_clang_disposeSourceRangeList,
-        _dart_clang_disposeSourceRangeList>('clang_disposeSourceRangeList');
-    return _clang_disposeSourceRangeList(
+        _dart_clang_disposeSourceRangeList>('clang_disposeSourceRangeList'))(
       ranges,
     );
   }
 
-  _dart_clang_disposeSourceRangeList _clang_disposeSourceRangeList;
+  _dart_clang_disposeSourceRangeList? _clang_disposeSourceRangeList;
 
   /// Determine the number of diagnostics in a CXDiagnosticSet.
   int clang_getNumDiagnosticsInSet(
     ffi.Pointer<ffi.Void> Diags,
   ) {
-    _clang_getNumDiagnosticsInSet ??= _dylib.lookupFunction<
+    return (_clang_getNumDiagnosticsInSet ??= _dylib.lookupFunction<
         _c_clang_getNumDiagnosticsInSet,
-        _dart_clang_getNumDiagnosticsInSet>('clang_getNumDiagnosticsInSet');
-    return _clang_getNumDiagnosticsInSet(
+        _dart_clang_getNumDiagnosticsInSet>('clang_getNumDiagnosticsInSet'))(
       Diags,
     );
   }
 
-  _dart_clang_getNumDiagnosticsInSet _clang_getNumDiagnosticsInSet;
+  _dart_clang_getNumDiagnosticsInSet? _clang_getNumDiagnosticsInSet;
 
   /// Retrieve a diagnostic associated with the given CXDiagnosticSet.
   ffi.Pointer<ffi.Void> clang_getDiagnosticInSet(
     ffi.Pointer<ffi.Void> Diags,
     int Index,
   ) {
-    _clang_getDiagnosticInSet ??= _dylib.lookupFunction<
+    return (_clang_getDiagnosticInSet ??= _dylib.lookupFunction<
         _c_clang_getDiagnosticInSet,
-        _dart_clang_getDiagnosticInSet>('clang_getDiagnosticInSet');
-    return _clang_getDiagnosticInSet(
+        _dart_clang_getDiagnosticInSet>('clang_getDiagnosticInSet'))(
       Diags,
       Index,
     );
   }
 
-  _dart_clang_getDiagnosticInSet _clang_getDiagnosticInSet;
+  _dart_clang_getDiagnosticInSet? _clang_getDiagnosticInSet;
 
   /// Deserialize a set of diagnostics from a Clang diagnostics bitcode file.
   ffi.Pointer<ffi.Void> clang_loadDiagnostics(
@@ -486,173 +466,163 @@
     ffi.Pointer<ffi.Int32> error,
     ffi.Pointer<CXString> errorString,
   ) {
-    _clang_loadDiagnostics ??= _dylib.lookupFunction<_c_clang_loadDiagnostics,
-        _dart_clang_loadDiagnostics>('clang_loadDiagnostics');
-    return _clang_loadDiagnostics(
+    return (_clang_loadDiagnostics ??= _dylib.lookupFunction<
+        _c_clang_loadDiagnostics,
+        _dart_clang_loadDiagnostics>('clang_loadDiagnostics'))(
       file,
       error,
       errorString,
     );
   }
 
-  _dart_clang_loadDiagnostics _clang_loadDiagnostics;
+  _dart_clang_loadDiagnostics? _clang_loadDiagnostics;
 
   /// Release a CXDiagnosticSet and all of its contained diagnostics.
   void clang_disposeDiagnosticSet(
     ffi.Pointer<ffi.Void> Diags,
   ) {
-    _clang_disposeDiagnosticSet ??= _dylib.lookupFunction<
+    return (_clang_disposeDiagnosticSet ??= _dylib.lookupFunction<
         _c_clang_disposeDiagnosticSet,
-        _dart_clang_disposeDiagnosticSet>('clang_disposeDiagnosticSet');
-    return _clang_disposeDiagnosticSet(
+        _dart_clang_disposeDiagnosticSet>('clang_disposeDiagnosticSet'))(
       Diags,
     );
   }
 
-  _dart_clang_disposeDiagnosticSet _clang_disposeDiagnosticSet;
+  _dart_clang_disposeDiagnosticSet? _clang_disposeDiagnosticSet;
 
   /// Retrieve the child diagnostics of a CXDiagnostic.
   ffi.Pointer<ffi.Void> clang_getChildDiagnostics(
     ffi.Pointer<ffi.Void> D,
   ) {
-    _clang_getChildDiagnostics ??= _dylib.lookupFunction<
+    return (_clang_getChildDiagnostics ??= _dylib.lookupFunction<
         _c_clang_getChildDiagnostics,
-        _dart_clang_getChildDiagnostics>('clang_getChildDiagnostics');
-    return _clang_getChildDiagnostics(
+        _dart_clang_getChildDiagnostics>('clang_getChildDiagnostics'))(
       D,
     );
   }
 
-  _dart_clang_getChildDiagnostics _clang_getChildDiagnostics;
+  _dart_clang_getChildDiagnostics? _clang_getChildDiagnostics;
 
   /// Determine the number of diagnostics produced for the given translation
   /// unit.
   int clang_getNumDiagnostics(
     ffi.Pointer<CXTranslationUnitImpl> Unit,
   ) {
-    _clang_getNumDiagnostics ??= _dylib.lookupFunction<
+    return (_clang_getNumDiagnostics ??= _dylib.lookupFunction<
         _c_clang_getNumDiagnostics,
-        _dart_clang_getNumDiagnostics>('clang_getNumDiagnostics');
-    return _clang_getNumDiagnostics(
+        _dart_clang_getNumDiagnostics>('clang_getNumDiagnostics'))(
       Unit,
     );
   }
 
-  _dart_clang_getNumDiagnostics _clang_getNumDiagnostics;
+  _dart_clang_getNumDiagnostics? _clang_getNumDiagnostics;
 
   /// Retrieve a diagnostic associated with the given translation unit.
   ffi.Pointer<ffi.Void> clang_getDiagnostic(
     ffi.Pointer<CXTranslationUnitImpl> Unit,
     int Index,
   ) {
-    _clang_getDiagnostic ??= _dylib.lookupFunction<_c_clang_getDiagnostic,
-        _dart_clang_getDiagnostic>('clang_getDiagnostic');
-    return _clang_getDiagnostic(
+    return (_clang_getDiagnostic ??= _dylib.lookupFunction<
+        _c_clang_getDiagnostic,
+        _dart_clang_getDiagnostic>('clang_getDiagnostic'))(
       Unit,
       Index,
     );
   }
 
-  _dart_clang_getDiagnostic _clang_getDiagnostic;
+  _dart_clang_getDiagnostic? _clang_getDiagnostic;
 
   /// Retrieve the complete set of diagnostics associated with a translation
   /// unit.
   ffi.Pointer<ffi.Void> clang_getDiagnosticSetFromTU(
     ffi.Pointer<CXTranslationUnitImpl> Unit,
   ) {
-    _clang_getDiagnosticSetFromTU ??= _dylib.lookupFunction<
+    return (_clang_getDiagnosticSetFromTU ??= _dylib.lookupFunction<
         _c_clang_getDiagnosticSetFromTU,
-        _dart_clang_getDiagnosticSetFromTU>('clang_getDiagnosticSetFromTU');
-    return _clang_getDiagnosticSetFromTU(
+        _dart_clang_getDiagnosticSetFromTU>('clang_getDiagnosticSetFromTU'))(
       Unit,
     );
   }
 
-  _dart_clang_getDiagnosticSetFromTU _clang_getDiagnosticSetFromTU;
+  _dart_clang_getDiagnosticSetFromTU? _clang_getDiagnosticSetFromTU;
 
   /// Destroy a diagnostic.
   void clang_disposeDiagnostic(
     ffi.Pointer<ffi.Void> Diagnostic,
   ) {
-    _clang_disposeDiagnostic ??= _dylib.lookupFunction<
+    return (_clang_disposeDiagnostic ??= _dylib.lookupFunction<
         _c_clang_disposeDiagnostic,
-        _dart_clang_disposeDiagnostic>('clang_disposeDiagnostic');
-    return _clang_disposeDiagnostic(
+        _dart_clang_disposeDiagnostic>('clang_disposeDiagnostic'))(
       Diagnostic,
     );
   }
 
-  _dart_clang_disposeDiagnostic _clang_disposeDiagnostic;
+  _dart_clang_disposeDiagnostic? _clang_disposeDiagnostic;
 
   /// Retrieve the set of display options most similar to the default behavior
   /// of the clang compiler.
   int clang_defaultDiagnosticDisplayOptions() {
-    _clang_defaultDiagnosticDisplayOptions ??= _dylib.lookupFunction<
+    return (_clang_defaultDiagnosticDisplayOptions ??= _dylib.lookupFunction<
             _c_clang_defaultDiagnosticDisplayOptions,
             _dart_clang_defaultDiagnosticDisplayOptions>(
-        'clang_defaultDiagnosticDisplayOptions');
-    return _clang_defaultDiagnosticDisplayOptions();
+        'clang_defaultDiagnosticDisplayOptions'))();
   }
 
-  _dart_clang_defaultDiagnosticDisplayOptions
+  _dart_clang_defaultDiagnosticDisplayOptions?
       _clang_defaultDiagnosticDisplayOptions;
 
   /// Determine the severity of the given diagnostic.
   int clang_getDiagnosticSeverity(
     ffi.Pointer<ffi.Void> arg0,
   ) {
-    _clang_getDiagnosticSeverity ??= _dylib.lookupFunction<
+    return (_clang_getDiagnosticSeverity ??= _dylib.lookupFunction<
         _c_clang_getDiagnosticSeverity,
-        _dart_clang_getDiagnosticSeverity>('clang_getDiagnosticSeverity');
-    return _clang_getDiagnosticSeverity(
+        _dart_clang_getDiagnosticSeverity>('clang_getDiagnosticSeverity'))(
       arg0,
     );
   }
 
-  _dart_clang_getDiagnosticSeverity _clang_getDiagnosticSeverity;
+  _dart_clang_getDiagnosticSeverity? _clang_getDiagnosticSeverity;
 
   /// Retrieve the category number for this diagnostic.
   int clang_getDiagnosticCategory(
     ffi.Pointer<ffi.Void> arg0,
   ) {
-    _clang_getDiagnosticCategory ??= _dylib.lookupFunction<
+    return (_clang_getDiagnosticCategory ??= _dylib.lookupFunction<
         _c_clang_getDiagnosticCategory,
-        _dart_clang_getDiagnosticCategory>('clang_getDiagnosticCategory');
-    return _clang_getDiagnosticCategory(
+        _dart_clang_getDiagnosticCategory>('clang_getDiagnosticCategory'))(
       arg0,
     );
   }
 
-  _dart_clang_getDiagnosticCategory _clang_getDiagnosticCategory;
+  _dart_clang_getDiagnosticCategory? _clang_getDiagnosticCategory;
 
   /// Determine the number of source ranges associated with the given
   /// diagnostic.
   int clang_getDiagnosticNumRanges(
     ffi.Pointer<ffi.Void> arg0,
   ) {
-    _clang_getDiagnosticNumRanges ??= _dylib.lookupFunction<
+    return (_clang_getDiagnosticNumRanges ??= _dylib.lookupFunction<
         _c_clang_getDiagnosticNumRanges,
-        _dart_clang_getDiagnosticNumRanges>('clang_getDiagnosticNumRanges');
-    return _clang_getDiagnosticNumRanges(
+        _dart_clang_getDiagnosticNumRanges>('clang_getDiagnosticNumRanges'))(
       arg0,
     );
   }
 
-  _dart_clang_getDiagnosticNumRanges _clang_getDiagnosticNumRanges;
+  _dart_clang_getDiagnosticNumRanges? _clang_getDiagnosticNumRanges;
 
   /// Determine the number of fix-it hints associated with the given diagnostic.
   int clang_getDiagnosticNumFixIts(
     ffi.Pointer<ffi.Void> Diagnostic,
   ) {
-    _clang_getDiagnosticNumFixIts ??= _dylib.lookupFunction<
+    return (_clang_getDiagnosticNumFixIts ??= _dylib.lookupFunction<
         _c_clang_getDiagnosticNumFixIts,
-        _dart_clang_getDiagnosticNumFixIts>('clang_getDiagnosticNumFixIts');
-    return _clang_getDiagnosticNumFixIts(
+        _dart_clang_getDiagnosticNumFixIts>('clang_getDiagnosticNumFixIts'))(
       Diagnostic,
     );
   }
 
-  _dart_clang_getDiagnosticNumFixIts _clang_getDiagnosticNumFixIts;
+  _dart_clang_getDiagnosticNumFixIts? _clang_getDiagnosticNumFixIts;
 
   /// Return the CXTranslationUnit for a given source file and the provided
   /// command line arguments one would pass to the compiler.
@@ -664,11 +634,10 @@
     int num_unsaved_files,
     ffi.Pointer<CXUnsavedFile> unsaved_files,
   ) {
-    _clang_createTranslationUnitFromSourceFile ??= _dylib.lookupFunction<
-            _c_clang_createTranslationUnitFromSourceFile,
-            _dart_clang_createTranslationUnitFromSourceFile>(
-        'clang_createTranslationUnitFromSourceFile');
-    return _clang_createTranslationUnitFromSourceFile(
+    return (_clang_createTranslationUnitFromSourceFile ??=
+        _dylib.lookupFunction<_c_clang_createTranslationUnitFromSourceFile,
+                _dart_clang_createTranslationUnitFromSourceFile>(
+            'clang_createTranslationUnitFromSourceFile'))(
       CIdx,
       source_filename,
       num_clang_command_line_args,
@@ -678,7 +647,7 @@
     );
   }
 
-  _dart_clang_createTranslationUnitFromSourceFile
+  _dart_clang_createTranslationUnitFromSourceFile?
       _clang_createTranslationUnitFromSourceFile;
 
   /// Same as clang_createTranslationUnit2, but returns the CXTranslationUnit
@@ -688,16 +657,15 @@
     ffi.Pointer<ffi.Void> CIdx,
     ffi.Pointer<ffi.Int8> ast_filename,
   ) {
-    _clang_createTranslationUnit ??= _dylib.lookupFunction<
+    return (_clang_createTranslationUnit ??= _dylib.lookupFunction<
         _c_clang_createTranslationUnit,
-        _dart_clang_createTranslationUnit>('clang_createTranslationUnit');
-    return _clang_createTranslationUnit(
+        _dart_clang_createTranslationUnit>('clang_createTranslationUnit'))(
       CIdx,
       ast_filename,
     );
   }
 
-  _dart_clang_createTranslationUnit _clang_createTranslationUnit;
+  _dart_clang_createTranslationUnit? _clang_createTranslationUnit;
 
   /// Create a translation unit from an AST file ( -emit-ast).
   int clang_createTranslationUnit2(
@@ -705,29 +673,27 @@
     ffi.Pointer<ffi.Int8> ast_filename,
     ffi.Pointer<ffi.Pointer<CXTranslationUnitImpl>> out_TU,
   ) {
-    _clang_createTranslationUnit2 ??= _dylib.lookupFunction<
+    return (_clang_createTranslationUnit2 ??= _dylib.lookupFunction<
         _c_clang_createTranslationUnit2,
-        _dart_clang_createTranslationUnit2>('clang_createTranslationUnit2');
-    return _clang_createTranslationUnit2(
+        _dart_clang_createTranslationUnit2>('clang_createTranslationUnit2'))(
       CIdx,
       ast_filename,
       out_TU,
     );
   }
 
-  _dart_clang_createTranslationUnit2 _clang_createTranslationUnit2;
+  _dart_clang_createTranslationUnit2? _clang_createTranslationUnit2;
 
   /// Returns the set of flags that is suitable for parsing a translation unit
   /// that is being edited.
   int clang_defaultEditingTranslationUnitOptions() {
-    _clang_defaultEditingTranslationUnitOptions ??= _dylib.lookupFunction<
-            _c_clang_defaultEditingTranslationUnitOptions,
-            _dart_clang_defaultEditingTranslationUnitOptions>(
-        'clang_defaultEditingTranslationUnitOptions');
-    return _clang_defaultEditingTranslationUnitOptions();
+    return (_clang_defaultEditingTranslationUnitOptions ??=
+        _dylib.lookupFunction<_c_clang_defaultEditingTranslationUnitOptions,
+                _dart_clang_defaultEditingTranslationUnitOptions>(
+            'clang_defaultEditingTranslationUnitOptions'))();
   }
 
-  _dart_clang_defaultEditingTranslationUnitOptions
+  _dart_clang_defaultEditingTranslationUnitOptions?
       _clang_defaultEditingTranslationUnitOptions;
 
   /// Same as clang_parseTranslationUnit2, but returns the CXTranslationUnit
@@ -742,10 +708,9 @@
     int num_unsaved_files,
     int options,
   ) {
-    _clang_parseTranslationUnit ??= _dylib.lookupFunction<
+    return (_clang_parseTranslationUnit ??= _dylib.lookupFunction<
         _c_clang_parseTranslationUnit,
-        _dart_clang_parseTranslationUnit>('clang_parseTranslationUnit');
-    return _clang_parseTranslationUnit(
+        _dart_clang_parseTranslationUnit>('clang_parseTranslationUnit'))(
       CIdx,
       source_filename,
       command_line_args,
@@ -756,7 +721,7 @@
     );
   }
 
-  _dart_clang_parseTranslationUnit _clang_parseTranslationUnit;
+  _dart_clang_parseTranslationUnit? _clang_parseTranslationUnit;
 
   /// Parse the given source file and the translation unit corresponding to that
   /// file.
@@ -770,10 +735,9 @@
     int options,
     ffi.Pointer<ffi.Pointer<CXTranslationUnitImpl>> out_TU,
   ) {
-    _clang_parseTranslationUnit2 ??= _dylib.lookupFunction<
+    return (_clang_parseTranslationUnit2 ??= _dylib.lookupFunction<
         _c_clang_parseTranslationUnit2,
-        _dart_clang_parseTranslationUnit2>('clang_parseTranslationUnit2');
-    return _clang_parseTranslationUnit2(
+        _dart_clang_parseTranslationUnit2>('clang_parseTranslationUnit2'))(
       CIdx,
       source_filename,
       command_line_args,
@@ -785,7 +749,7 @@
     );
   }
 
-  _dart_clang_parseTranslationUnit2 _clang_parseTranslationUnit2;
+  _dart_clang_parseTranslationUnit2? _clang_parseTranslationUnit2;
 
   /// Same as clang_parseTranslationUnit2 but requires a full command line for
   /// command_line_args including argv[0]. This is useful if the standard
@@ -800,11 +764,10 @@
     int options,
     ffi.Pointer<ffi.Pointer<CXTranslationUnitImpl>> out_TU,
   ) {
-    _clang_parseTranslationUnit2FullArgv ??= _dylib.lookupFunction<
+    return (_clang_parseTranslationUnit2FullArgv ??= _dylib.lookupFunction<
             _c_clang_parseTranslationUnit2FullArgv,
             _dart_clang_parseTranslationUnit2FullArgv>(
-        'clang_parseTranslationUnit2FullArgv');
-    return _clang_parseTranslationUnit2FullArgv(
+        'clang_parseTranslationUnit2FullArgv'))(
       CIdx,
       source_filename,
       command_line_args,
@@ -816,22 +779,21 @@
     );
   }
 
-  _dart_clang_parseTranslationUnit2FullArgv
+  _dart_clang_parseTranslationUnit2FullArgv?
       _clang_parseTranslationUnit2FullArgv;
 
   /// Returns the set of flags that is suitable for saving a translation unit.
   int clang_defaultSaveOptions(
     ffi.Pointer<CXTranslationUnitImpl> TU,
   ) {
-    _clang_defaultSaveOptions ??= _dylib.lookupFunction<
+    return (_clang_defaultSaveOptions ??= _dylib.lookupFunction<
         _c_clang_defaultSaveOptions,
-        _dart_clang_defaultSaveOptions>('clang_defaultSaveOptions');
-    return _clang_defaultSaveOptions(
+        _dart_clang_defaultSaveOptions>('clang_defaultSaveOptions'))(
       TU,
     );
   }
 
-  _dart_clang_defaultSaveOptions _clang_defaultSaveOptions;
+  _dart_clang_defaultSaveOptions? _clang_defaultSaveOptions;
 
   /// Saves a translation unit into a serialized representation of that
   /// translation unit on disk.
@@ -840,60 +802,56 @@
     ffi.Pointer<ffi.Int8> FileName,
     int options,
   ) {
-    _clang_saveTranslationUnit ??= _dylib.lookupFunction<
+    return (_clang_saveTranslationUnit ??= _dylib.lookupFunction<
         _c_clang_saveTranslationUnit,
-        _dart_clang_saveTranslationUnit>('clang_saveTranslationUnit');
-    return _clang_saveTranslationUnit(
+        _dart_clang_saveTranslationUnit>('clang_saveTranslationUnit'))(
       TU,
       FileName,
       options,
     );
   }
 
-  _dart_clang_saveTranslationUnit _clang_saveTranslationUnit;
+  _dart_clang_saveTranslationUnit? _clang_saveTranslationUnit;
 
   /// Suspend a translation unit in order to free memory associated with it.
   int clang_suspendTranslationUnit(
     ffi.Pointer<CXTranslationUnitImpl> arg0,
   ) {
-    _clang_suspendTranslationUnit ??= _dylib.lookupFunction<
+    return (_clang_suspendTranslationUnit ??= _dylib.lookupFunction<
         _c_clang_suspendTranslationUnit,
-        _dart_clang_suspendTranslationUnit>('clang_suspendTranslationUnit');
-    return _clang_suspendTranslationUnit(
+        _dart_clang_suspendTranslationUnit>('clang_suspendTranslationUnit'))(
       arg0,
     );
   }
 
-  _dart_clang_suspendTranslationUnit _clang_suspendTranslationUnit;
+  _dart_clang_suspendTranslationUnit? _clang_suspendTranslationUnit;
 
   /// Destroy the specified CXTranslationUnit object.
   void clang_disposeTranslationUnit(
     ffi.Pointer<CXTranslationUnitImpl> arg0,
   ) {
-    _clang_disposeTranslationUnit ??= _dylib.lookupFunction<
+    return (_clang_disposeTranslationUnit ??= _dylib.lookupFunction<
         _c_clang_disposeTranslationUnit,
-        _dart_clang_disposeTranslationUnit>('clang_disposeTranslationUnit');
-    return _clang_disposeTranslationUnit(
+        _dart_clang_disposeTranslationUnit>('clang_disposeTranslationUnit'))(
       arg0,
     );
   }
 
-  _dart_clang_disposeTranslationUnit _clang_disposeTranslationUnit;
+  _dart_clang_disposeTranslationUnit? _clang_disposeTranslationUnit;
 
   /// Returns the set of flags that is suitable for reparsing a translation
   /// unit.
   int clang_defaultReparseOptions(
     ffi.Pointer<CXTranslationUnitImpl> TU,
   ) {
-    _clang_defaultReparseOptions ??= _dylib.lookupFunction<
+    return (_clang_defaultReparseOptions ??= _dylib.lookupFunction<
         _c_clang_defaultReparseOptions,
-        _dart_clang_defaultReparseOptions>('clang_defaultReparseOptions');
-    return _clang_defaultReparseOptions(
+        _dart_clang_defaultReparseOptions>('clang_defaultReparseOptions'))(
       TU,
     );
   }
 
-  _dart_clang_defaultReparseOptions _clang_defaultReparseOptions;
+  _dart_clang_defaultReparseOptions? _clang_defaultReparseOptions;
 
   /// Reparse the source files that produced this translation unit.
   int clang_reparseTranslationUnit(
@@ -902,10 +860,9 @@
     ffi.Pointer<CXUnsavedFile> unsaved_files,
     int options,
   ) {
-    _clang_reparseTranslationUnit ??= _dylib.lookupFunction<
+    return (_clang_reparseTranslationUnit ??= _dylib.lookupFunction<
         _c_clang_reparseTranslationUnit,
-        _dart_clang_reparseTranslationUnit>('clang_reparseTranslationUnit');
-    return _clang_reparseTranslationUnit(
+        _dart_clang_reparseTranslationUnit>('clang_reparseTranslationUnit'))(
       TU,
       num_unsaved_files,
       unsaved_files,
@@ -913,264 +870,249 @@
     );
   }
 
-  _dart_clang_reparseTranslationUnit _clang_reparseTranslationUnit;
+  _dart_clang_reparseTranslationUnit? _clang_reparseTranslationUnit;
 
   /// Returns the human-readable null-terminated C string that represents the
   /// name of the memory category. This string should never be freed.
   ffi.Pointer<ffi.Int8> clang_getTUResourceUsageName(
     int kind,
   ) {
-    _clang_getTUResourceUsageName ??= _dylib.lookupFunction<
+    return (_clang_getTUResourceUsageName ??= _dylib.lookupFunction<
         _c_clang_getTUResourceUsageName,
-        _dart_clang_getTUResourceUsageName>('clang_getTUResourceUsageName');
-    return _clang_getTUResourceUsageName(
+        _dart_clang_getTUResourceUsageName>('clang_getTUResourceUsageName'))(
       kind,
     );
   }
 
-  _dart_clang_getTUResourceUsageName _clang_getTUResourceUsageName;
+  _dart_clang_getTUResourceUsageName? _clang_getTUResourceUsageName;
 
   /// Get target information for this translation unit.
   ffi.Pointer<CXTargetInfoImpl> clang_getTranslationUnitTargetInfo(
     ffi.Pointer<CXTranslationUnitImpl> CTUnit,
   ) {
-    _clang_getTranslationUnitTargetInfo ??= _dylib.lookupFunction<
+    return (_clang_getTranslationUnitTargetInfo ??= _dylib.lookupFunction<
             _c_clang_getTranslationUnitTargetInfo,
             _dart_clang_getTranslationUnitTargetInfo>(
-        'clang_getTranslationUnitTargetInfo');
-    return _clang_getTranslationUnitTargetInfo(
+        'clang_getTranslationUnitTargetInfo'))(
       CTUnit,
     );
   }
 
-  _dart_clang_getTranslationUnitTargetInfo _clang_getTranslationUnitTargetInfo;
+  _dart_clang_getTranslationUnitTargetInfo? _clang_getTranslationUnitTargetInfo;
 
   /// Destroy the CXTargetInfo object.
   void clang_TargetInfo_dispose(
     ffi.Pointer<CXTargetInfoImpl> Info,
   ) {
-    _clang_TargetInfo_dispose ??= _dylib.lookupFunction<
+    return (_clang_TargetInfo_dispose ??= _dylib.lookupFunction<
         _c_clang_TargetInfo_dispose,
-        _dart_clang_TargetInfo_dispose>('clang_TargetInfo_dispose');
-    return _clang_TargetInfo_dispose(
+        _dart_clang_TargetInfo_dispose>('clang_TargetInfo_dispose'))(
       Info,
     );
   }
 
-  _dart_clang_TargetInfo_dispose _clang_TargetInfo_dispose;
+  _dart_clang_TargetInfo_dispose? _clang_TargetInfo_dispose;
 
   /// Get the pointer width of the target in bits.
   int clang_TargetInfo_getPointerWidth(
     ffi.Pointer<CXTargetInfoImpl> Info,
   ) {
-    _clang_TargetInfo_getPointerWidth ??= _dylib.lookupFunction<
+    return (_clang_TargetInfo_getPointerWidth ??= _dylib.lookupFunction<
             _c_clang_TargetInfo_getPointerWidth,
             _dart_clang_TargetInfo_getPointerWidth>(
-        'clang_TargetInfo_getPointerWidth');
-    return _clang_TargetInfo_getPointerWidth(
+        'clang_TargetInfo_getPointerWidth'))(
       Info,
     );
   }
 
-  _dart_clang_TargetInfo_getPointerWidth _clang_TargetInfo_getPointerWidth;
+  _dart_clang_TargetInfo_getPointerWidth? _clang_TargetInfo_getPointerWidth;
 
   /// Determine whether the given cursor kind represents a declaration.
   int clang_isDeclaration(
     int arg0,
   ) {
-    _clang_isDeclaration ??= _dylib.lookupFunction<_c_clang_isDeclaration,
-        _dart_clang_isDeclaration>('clang_isDeclaration');
-    return _clang_isDeclaration(
+    return (_clang_isDeclaration ??= _dylib.lookupFunction<
+        _c_clang_isDeclaration,
+        _dart_clang_isDeclaration>('clang_isDeclaration'))(
       arg0,
     );
   }
 
-  _dart_clang_isDeclaration _clang_isDeclaration;
+  _dart_clang_isDeclaration? _clang_isDeclaration;
 
   /// Determine whether the given cursor kind represents a simple reference.
   int clang_isReference(
     int arg0,
   ) {
-    _clang_isReference ??=
+    return (_clang_isReference ??=
         _dylib.lookupFunction<_c_clang_isReference, _dart_clang_isReference>(
-            'clang_isReference');
-    return _clang_isReference(
+            'clang_isReference'))(
       arg0,
     );
   }
 
-  _dart_clang_isReference _clang_isReference;
+  _dart_clang_isReference? _clang_isReference;
 
   /// Determine whether the given cursor kind represents an expression.
   int clang_isExpression(
     int arg0,
   ) {
-    _clang_isExpression ??=
+    return (_clang_isExpression ??=
         _dylib.lookupFunction<_c_clang_isExpression, _dart_clang_isExpression>(
-            'clang_isExpression');
-    return _clang_isExpression(
+            'clang_isExpression'))(
       arg0,
     );
   }
 
-  _dart_clang_isExpression _clang_isExpression;
+  _dart_clang_isExpression? _clang_isExpression;
 
   /// Determine whether the given cursor kind represents a statement.
   int clang_isStatement(
     int arg0,
   ) {
-    _clang_isStatement ??=
+    return (_clang_isStatement ??=
         _dylib.lookupFunction<_c_clang_isStatement, _dart_clang_isStatement>(
-            'clang_isStatement');
-    return _clang_isStatement(
+            'clang_isStatement'))(
       arg0,
     );
   }
 
-  _dart_clang_isStatement _clang_isStatement;
+  _dart_clang_isStatement? _clang_isStatement;
 
   /// Determine whether the given cursor kind represents an attribute.
   int clang_isAttribute(
     int arg0,
   ) {
-    _clang_isAttribute ??=
+    return (_clang_isAttribute ??=
         _dylib.lookupFunction<_c_clang_isAttribute, _dart_clang_isAttribute>(
-            'clang_isAttribute');
-    return _clang_isAttribute(
+            'clang_isAttribute'))(
       arg0,
     );
   }
 
-  _dart_clang_isAttribute _clang_isAttribute;
+  _dart_clang_isAttribute? _clang_isAttribute;
 
   /// Determine whether the given cursor kind represents an invalid cursor.
   int clang_isInvalid(
     int arg0,
   ) {
-    _clang_isInvalid ??=
+    return (_clang_isInvalid ??=
         _dylib.lookupFunction<_c_clang_isInvalid, _dart_clang_isInvalid>(
-            'clang_isInvalid');
-    return _clang_isInvalid(
+            'clang_isInvalid'))(
       arg0,
     );
   }
 
-  _dart_clang_isInvalid _clang_isInvalid;
+  _dart_clang_isInvalid? _clang_isInvalid;
 
   /// Determine whether the given cursor kind represents a translation unit.
   int clang_isTranslationUnit(
     int arg0,
   ) {
-    _clang_isTranslationUnit ??= _dylib.lookupFunction<
+    return (_clang_isTranslationUnit ??= _dylib.lookupFunction<
         _c_clang_isTranslationUnit,
-        _dart_clang_isTranslationUnit>('clang_isTranslationUnit');
-    return _clang_isTranslationUnit(
+        _dart_clang_isTranslationUnit>('clang_isTranslationUnit'))(
       arg0,
     );
   }
 
-  _dart_clang_isTranslationUnit _clang_isTranslationUnit;
+  _dart_clang_isTranslationUnit? _clang_isTranslationUnit;
 
   /// * Determine whether the given cursor represents a preprocessing element,
   /// such as a preprocessor directive or macro instantiation.
   int clang_isPreprocessing(
     int arg0,
   ) {
-    _clang_isPreprocessing ??= _dylib.lookupFunction<_c_clang_isPreprocessing,
-        _dart_clang_isPreprocessing>('clang_isPreprocessing');
-    return _clang_isPreprocessing(
+    return (_clang_isPreprocessing ??= _dylib.lookupFunction<
+        _c_clang_isPreprocessing,
+        _dart_clang_isPreprocessing>('clang_isPreprocessing'))(
       arg0,
     );
   }
 
-  _dart_clang_isPreprocessing _clang_isPreprocessing;
+  _dart_clang_isPreprocessing? _clang_isPreprocessing;
 
   /// * Determine whether the given cursor represents a currently unexposed
   /// piece of the AST (e.g., CXCursor_UnexposedStmt).
   int clang_isUnexposed(
     int arg0,
   ) {
-    _clang_isUnexposed ??=
+    return (_clang_isUnexposed ??=
         _dylib.lookupFunction<_c_clang_isUnexposed, _dart_clang_isUnexposed>(
-            'clang_isUnexposed');
-    return _clang_isUnexposed(
+            'clang_isUnexposed'))(
       arg0,
     );
   }
 
-  _dart_clang_isUnexposed _clang_isUnexposed;
+  _dart_clang_isUnexposed? _clang_isUnexposed;
 
   /// Free the memory associated with a CXPlatformAvailability structure.
   void clang_disposeCXPlatformAvailability(
     ffi.Pointer<CXPlatformAvailability> availability,
   ) {
-    _clang_disposeCXPlatformAvailability ??= _dylib.lookupFunction<
+    return (_clang_disposeCXPlatformAvailability ??= _dylib.lookupFunction<
             _c_clang_disposeCXPlatformAvailability,
             _dart_clang_disposeCXPlatformAvailability>(
-        'clang_disposeCXPlatformAvailability');
-    return _clang_disposeCXPlatformAvailability(
+        'clang_disposeCXPlatformAvailability'))(
       availability,
     );
   }
 
-  _dart_clang_disposeCXPlatformAvailability
+  _dart_clang_disposeCXPlatformAvailability?
       _clang_disposeCXPlatformAvailability;
 
   /// Creates an empty CXCursorSet.
   ffi.Pointer<CXCursorSetImpl> clang_createCXCursorSet() {
-    _clang_createCXCursorSet ??= _dylib.lookupFunction<
+    return (_clang_createCXCursorSet ??= _dylib.lookupFunction<
         _c_clang_createCXCursorSet,
-        _dart_clang_createCXCursorSet>('clang_createCXCursorSet');
-    return _clang_createCXCursorSet();
+        _dart_clang_createCXCursorSet>('clang_createCXCursorSet'))();
   }
 
-  _dart_clang_createCXCursorSet _clang_createCXCursorSet;
+  _dart_clang_createCXCursorSet? _clang_createCXCursorSet;
 
   /// Disposes a CXCursorSet and releases its associated memory.
   void clang_disposeCXCursorSet(
     ffi.Pointer<CXCursorSetImpl> cset,
   ) {
-    _clang_disposeCXCursorSet ??= _dylib.lookupFunction<
+    return (_clang_disposeCXCursorSet ??= _dylib.lookupFunction<
         _c_clang_disposeCXCursorSet,
-        _dart_clang_disposeCXCursorSet>('clang_disposeCXCursorSet');
-    return _clang_disposeCXCursorSet(
+        _dart_clang_disposeCXCursorSet>('clang_disposeCXCursorSet'))(
       cset,
     );
   }
 
-  _dart_clang_disposeCXCursorSet _clang_disposeCXCursorSet;
+  _dart_clang_disposeCXCursorSet? _clang_disposeCXCursorSet;
 
   /// Free the set of overridden cursors returned by
   /// clang_getOverriddenCursors().
   void clang_disposeOverriddenCursors(
     ffi.Pointer<CXCursor> overridden,
   ) {
-    _clang_disposeOverriddenCursors ??= _dylib.lookupFunction<
-        _c_clang_disposeOverriddenCursors,
-        _dart_clang_disposeOverriddenCursors>('clang_disposeOverriddenCursors');
-    return _clang_disposeOverriddenCursors(
+    return (_clang_disposeOverriddenCursors ??= _dylib.lookupFunction<
+            _c_clang_disposeOverriddenCursors,
+            _dart_clang_disposeOverriddenCursors>(
+        'clang_disposeOverriddenCursors'))(
       overridden,
     );
   }
 
-  _dart_clang_disposeOverriddenCursors _clang_disposeOverriddenCursors;
+  _dart_clang_disposeOverriddenCursors? _clang_disposeOverriddenCursors;
 
   /// Get a property value for the given printing policy.
   int clang_PrintingPolicy_getProperty(
     ffi.Pointer<ffi.Void> Policy,
     int Property,
   ) {
-    _clang_PrintingPolicy_getProperty ??= _dylib.lookupFunction<
+    return (_clang_PrintingPolicy_getProperty ??= _dylib.lookupFunction<
             _c_clang_PrintingPolicy_getProperty,
             _dart_clang_PrintingPolicy_getProperty>(
-        'clang_PrintingPolicy_getProperty');
-    return _clang_PrintingPolicy_getProperty(
+        'clang_PrintingPolicy_getProperty'))(
       Policy,
       Property,
     );
   }
 
-  _dart_clang_PrintingPolicy_getProperty _clang_PrintingPolicy_getProperty;
+  _dart_clang_PrintingPolicy_getProperty? _clang_PrintingPolicy_getProperty;
 
   /// Set a property value for the given printing policy.
   void clang_PrintingPolicy_setProperty(
@@ -1178,32 +1120,30 @@
     int Property,
     int Value,
   ) {
-    _clang_PrintingPolicy_setProperty ??= _dylib.lookupFunction<
+    return (_clang_PrintingPolicy_setProperty ??= _dylib.lookupFunction<
             _c_clang_PrintingPolicy_setProperty,
             _dart_clang_PrintingPolicy_setProperty>(
-        'clang_PrintingPolicy_setProperty');
-    return _clang_PrintingPolicy_setProperty(
+        'clang_PrintingPolicy_setProperty'))(
       Policy,
       Property,
       Value,
     );
   }
 
-  _dart_clang_PrintingPolicy_setProperty _clang_PrintingPolicy_setProperty;
+  _dart_clang_PrintingPolicy_setProperty? _clang_PrintingPolicy_setProperty;
 
   /// Release a printing policy.
   void clang_PrintingPolicy_dispose(
     ffi.Pointer<ffi.Void> Policy,
   ) {
-    _clang_PrintingPolicy_dispose ??= _dylib.lookupFunction<
+    return (_clang_PrintingPolicy_dispose ??= _dylib.lookupFunction<
         _c_clang_PrintingPolicy_dispose,
-        _dart_clang_PrintingPolicy_dispose>('clang_PrintingPolicy_dispose');
-    return _clang_PrintingPolicy_dispose(
+        _dart_clang_PrintingPolicy_dispose>('clang_PrintingPolicy_dispose'))(
       Policy,
     );
   }
 
-  _dart_clang_PrintingPolicy_dispose _clang_PrintingPolicy_dispose;
+  _dart_clang_PrintingPolicy_dispose? _clang_PrintingPolicy_dispose;
 
   /// Given a CXFile header file, return the module that contains it, if one
   /// exists.
@@ -1211,73 +1151,71 @@
     ffi.Pointer<CXTranslationUnitImpl> arg0,
     ffi.Pointer<ffi.Void> arg1,
   ) {
-    _clang_getModuleForFile ??= _dylib.lookupFunction<_c_clang_getModuleForFile,
-        _dart_clang_getModuleForFile>('clang_getModuleForFile');
-    return _clang_getModuleForFile(
+    return (_clang_getModuleForFile ??= _dylib.lookupFunction<
+        _c_clang_getModuleForFile,
+        _dart_clang_getModuleForFile>('clang_getModuleForFile'))(
       arg0,
       arg1,
     );
   }
 
-  _dart_clang_getModuleForFile _clang_getModuleForFile;
+  _dart_clang_getModuleForFile? _clang_getModuleForFile;
 
   /// Returns the module file where the provided module object came from.
   ffi.Pointer<ffi.Void> clang_Module_getASTFile(
     ffi.Pointer<ffi.Void> Module,
   ) {
-    _clang_Module_getASTFile ??= _dylib.lookupFunction<
+    return (_clang_Module_getASTFile ??= _dylib.lookupFunction<
         _c_clang_Module_getASTFile,
-        _dart_clang_Module_getASTFile>('clang_Module_getASTFile');
-    return _clang_Module_getASTFile(
+        _dart_clang_Module_getASTFile>('clang_Module_getASTFile'))(
       Module,
     );
   }
 
-  _dart_clang_Module_getASTFile _clang_Module_getASTFile;
+  _dart_clang_Module_getASTFile? _clang_Module_getASTFile;
 
   /// Returns the parent of a sub-module or NULL if the given module is
   /// top-level, e.g. for 'std.vector' it will return the 'std' module.
   ffi.Pointer<ffi.Void> clang_Module_getParent(
     ffi.Pointer<ffi.Void> Module,
   ) {
-    _clang_Module_getParent ??= _dylib.lookupFunction<_c_clang_Module_getParent,
-        _dart_clang_Module_getParent>('clang_Module_getParent');
-    return _clang_Module_getParent(
+    return (_clang_Module_getParent ??= _dylib.lookupFunction<
+        _c_clang_Module_getParent,
+        _dart_clang_Module_getParent>('clang_Module_getParent'))(
       Module,
     );
   }
 
-  _dart_clang_Module_getParent _clang_Module_getParent;
+  _dart_clang_Module_getParent? _clang_Module_getParent;
 
   /// Returns non-zero if the module is a system one.
   int clang_Module_isSystem(
     ffi.Pointer<ffi.Void> Module,
   ) {
-    _clang_Module_isSystem ??= _dylib.lookupFunction<_c_clang_Module_isSystem,
-        _dart_clang_Module_isSystem>('clang_Module_isSystem');
-    return _clang_Module_isSystem(
+    return (_clang_Module_isSystem ??= _dylib.lookupFunction<
+        _c_clang_Module_isSystem,
+        _dart_clang_Module_isSystem>('clang_Module_isSystem'))(
       Module,
     );
   }
 
-  _dart_clang_Module_isSystem _clang_Module_isSystem;
+  _dart_clang_Module_isSystem? _clang_Module_isSystem;
 
   /// Returns the number of top level headers associated with this module.
   int clang_Module_getNumTopLevelHeaders(
     ffi.Pointer<CXTranslationUnitImpl> arg0,
     ffi.Pointer<ffi.Void> Module,
   ) {
-    _clang_Module_getNumTopLevelHeaders ??= _dylib.lookupFunction<
+    return (_clang_Module_getNumTopLevelHeaders ??= _dylib.lookupFunction<
             _c_clang_Module_getNumTopLevelHeaders,
             _dart_clang_Module_getNumTopLevelHeaders>(
-        'clang_Module_getNumTopLevelHeaders');
-    return _clang_Module_getNumTopLevelHeaders(
+        'clang_Module_getNumTopLevelHeaders'))(
       arg0,
       Module,
     );
   }
 
-  _dart_clang_Module_getNumTopLevelHeaders _clang_Module_getNumTopLevelHeaders;
+  _dart_clang_Module_getNumTopLevelHeaders? _clang_Module_getNumTopLevelHeaders;
 
   /// Returns the specified top level header associated with the module.
   ffi.Pointer<ffi.Void> clang_Module_getTopLevelHeader(
@@ -1285,17 +1223,17 @@
     ffi.Pointer<ffi.Void> Module,
     int Index,
   ) {
-    _clang_Module_getTopLevelHeader ??= _dylib.lookupFunction<
-        _c_clang_Module_getTopLevelHeader,
-        _dart_clang_Module_getTopLevelHeader>('clang_Module_getTopLevelHeader');
-    return _clang_Module_getTopLevelHeader(
+    return (_clang_Module_getTopLevelHeader ??= _dylib.lookupFunction<
+            _c_clang_Module_getTopLevelHeader,
+            _dart_clang_Module_getTopLevelHeader>(
+        'clang_Module_getTopLevelHeader'))(
       arg0,
       Module,
       Index,
     );
   }
 
-  _dart_clang_Module_getTopLevelHeader _clang_Module_getTopLevelHeader;
+  _dart_clang_Module_getTopLevelHeader? _clang_Module_getTopLevelHeader;
 
   /// Annotate the given set of tokens by providing cursors for each token that
   /// can be mapped to a specific entity within the abstract syntax tree.
@@ -1305,9 +1243,9 @@
     int NumTokens,
     ffi.Pointer<CXCursor> Cursors,
   ) {
-    _clang_annotateTokens ??= _dylib.lookupFunction<_c_clang_annotateTokens,
-        _dart_clang_annotateTokens>('clang_annotateTokens');
-    return _clang_annotateTokens(
+    return (_clang_annotateTokens ??= _dylib.lookupFunction<
+        _c_clang_annotateTokens,
+        _dart_clang_annotateTokens>('clang_annotateTokens'))(
       TU,
       Tokens,
       NumTokens,
@@ -1315,7 +1253,7 @@
     );
   }
 
-  _dart_clang_annotateTokens _clang_annotateTokens;
+  _dart_clang_annotateTokens? _clang_annotateTokens;
 
   /// Free the given set of tokens.
   void clang_disposeTokens(
@@ -1323,57 +1261,55 @@
     ffi.Pointer<CXToken> Tokens,
     int NumTokens,
   ) {
-    _clang_disposeTokens ??= _dylib.lookupFunction<_c_clang_disposeTokens,
-        _dart_clang_disposeTokens>('clang_disposeTokens');
-    return _clang_disposeTokens(
+    return (_clang_disposeTokens ??= _dylib.lookupFunction<
+        _c_clang_disposeTokens,
+        _dart_clang_disposeTokens>('clang_disposeTokens'))(
       TU,
       Tokens,
       NumTokens,
     );
   }
 
-  _dart_clang_disposeTokens _clang_disposeTokens;
+  _dart_clang_disposeTokens? _clang_disposeTokens;
 
   void clang_enableStackTraces() {
-    _clang_enableStackTraces ??= _dylib.lookupFunction<
+    return (_clang_enableStackTraces ??= _dylib.lookupFunction<
         _c_clang_enableStackTraces,
-        _dart_clang_enableStackTraces>('clang_enableStackTraces');
-    return _clang_enableStackTraces();
+        _dart_clang_enableStackTraces>('clang_enableStackTraces'))();
   }
 
-  _dart_clang_enableStackTraces _clang_enableStackTraces;
+  _dart_clang_enableStackTraces? _clang_enableStackTraces;
 
   void clang_executeOnThread(
     ffi.Pointer<ffi.NativeFunction<_typedefC_1>> fn,
     ffi.Pointer<ffi.Void> user_data,
     int stack_size,
   ) {
-    _clang_executeOnThread ??= _dylib.lookupFunction<_c_clang_executeOnThread,
-        _dart_clang_executeOnThread>('clang_executeOnThread');
-    return _clang_executeOnThread(
+    return (_clang_executeOnThread ??= _dylib.lookupFunction<
+        _c_clang_executeOnThread,
+        _dart_clang_executeOnThread>('clang_executeOnThread'))(
       fn,
       user_data,
       stack_size,
     );
   }
 
-  _dart_clang_executeOnThread _clang_executeOnThread;
+  _dart_clang_executeOnThread? _clang_executeOnThread;
 
   /// Determine the kind of a particular chunk within a completion string.
   int clang_getCompletionChunkKind(
     ffi.Pointer<ffi.Void> completion_string,
     int chunk_number,
   ) {
-    _clang_getCompletionChunkKind ??= _dylib.lookupFunction<
+    return (_clang_getCompletionChunkKind ??= _dylib.lookupFunction<
         _c_clang_getCompletionChunkKind,
-        _dart_clang_getCompletionChunkKind>('clang_getCompletionChunkKind');
-    return _clang_getCompletionChunkKind(
+        _dart_clang_getCompletionChunkKind>('clang_getCompletionChunkKind'))(
       completion_string,
       chunk_number,
     );
   }
 
-  _dart_clang_getCompletionChunkKind _clang_getCompletionChunkKind;
+  _dart_clang_getCompletionChunkKind? _clang_getCompletionChunkKind;
 
   /// Retrieve the completion string associated with a particular chunk within a
   /// completion string.
@@ -1381,106 +1317,99 @@
     ffi.Pointer<ffi.Void> completion_string,
     int chunk_number,
   ) {
-    _clang_getCompletionChunkCompletionString ??= _dylib.lookupFunction<
+    return (_clang_getCompletionChunkCompletionString ??= _dylib.lookupFunction<
             _c_clang_getCompletionChunkCompletionString,
             _dart_clang_getCompletionChunkCompletionString>(
-        'clang_getCompletionChunkCompletionString');
-    return _clang_getCompletionChunkCompletionString(
+        'clang_getCompletionChunkCompletionString'))(
       completion_string,
       chunk_number,
     );
   }
 
-  _dart_clang_getCompletionChunkCompletionString
+  _dart_clang_getCompletionChunkCompletionString?
       _clang_getCompletionChunkCompletionString;
 
   /// Retrieve the number of chunks in the given code-completion string.
   int clang_getNumCompletionChunks(
     ffi.Pointer<ffi.Void> completion_string,
   ) {
-    _clang_getNumCompletionChunks ??= _dylib.lookupFunction<
+    return (_clang_getNumCompletionChunks ??= _dylib.lookupFunction<
         _c_clang_getNumCompletionChunks,
-        _dart_clang_getNumCompletionChunks>('clang_getNumCompletionChunks');
-    return _clang_getNumCompletionChunks(
+        _dart_clang_getNumCompletionChunks>('clang_getNumCompletionChunks'))(
       completion_string,
     );
   }
 
-  _dart_clang_getNumCompletionChunks _clang_getNumCompletionChunks;
+  _dart_clang_getNumCompletionChunks? _clang_getNumCompletionChunks;
 
   /// Determine the priority of this code completion.
   int clang_getCompletionPriority(
     ffi.Pointer<ffi.Void> completion_string,
   ) {
-    _clang_getCompletionPriority ??= _dylib.lookupFunction<
+    return (_clang_getCompletionPriority ??= _dylib.lookupFunction<
         _c_clang_getCompletionPriority,
-        _dart_clang_getCompletionPriority>('clang_getCompletionPriority');
-    return _clang_getCompletionPriority(
+        _dart_clang_getCompletionPriority>('clang_getCompletionPriority'))(
       completion_string,
     );
   }
 
-  _dart_clang_getCompletionPriority _clang_getCompletionPriority;
+  _dart_clang_getCompletionPriority? _clang_getCompletionPriority;
 
   /// Determine the availability of the entity that this code-completion string
   /// refers to.
   int clang_getCompletionAvailability(
     ffi.Pointer<ffi.Void> completion_string,
   ) {
-    _clang_getCompletionAvailability ??= _dylib.lookupFunction<
+    return (_clang_getCompletionAvailability ??= _dylib.lookupFunction<
             _c_clang_getCompletionAvailability,
             _dart_clang_getCompletionAvailability>(
-        'clang_getCompletionAvailability');
-    return _clang_getCompletionAvailability(
+        'clang_getCompletionAvailability'))(
       completion_string,
     );
   }
 
-  _dart_clang_getCompletionAvailability _clang_getCompletionAvailability;
+  _dart_clang_getCompletionAvailability? _clang_getCompletionAvailability;
 
   /// Retrieve the number of annotations associated with the given completion
   /// string.
   int clang_getCompletionNumAnnotations(
     ffi.Pointer<ffi.Void> completion_string,
   ) {
-    _clang_getCompletionNumAnnotations ??= _dylib.lookupFunction<
+    return (_clang_getCompletionNumAnnotations ??= _dylib.lookupFunction<
             _c_clang_getCompletionNumAnnotations,
             _dart_clang_getCompletionNumAnnotations>(
-        'clang_getCompletionNumAnnotations');
-    return _clang_getCompletionNumAnnotations(
+        'clang_getCompletionNumAnnotations'))(
       completion_string,
     );
   }
 
-  _dart_clang_getCompletionNumAnnotations _clang_getCompletionNumAnnotations;
+  _dart_clang_getCompletionNumAnnotations? _clang_getCompletionNumAnnotations;
 
   /// Retrieve the number of fix-its for the given completion index.
   int clang_getCompletionNumFixIts(
     ffi.Pointer<CXCodeCompleteResults> results,
     int completion_index,
   ) {
-    _clang_getCompletionNumFixIts ??= _dylib.lookupFunction<
+    return (_clang_getCompletionNumFixIts ??= _dylib.lookupFunction<
         _c_clang_getCompletionNumFixIts,
-        _dart_clang_getCompletionNumFixIts>('clang_getCompletionNumFixIts');
-    return _clang_getCompletionNumFixIts(
+        _dart_clang_getCompletionNumFixIts>('clang_getCompletionNumFixIts'))(
       results,
       completion_index,
     );
   }
 
-  _dart_clang_getCompletionNumFixIts _clang_getCompletionNumFixIts;
+  _dart_clang_getCompletionNumFixIts? _clang_getCompletionNumFixIts;
 
   /// Returns a default set of code-completion options that can be passed to
   /// clang_codeCompleteAt().
   int clang_defaultCodeCompleteOptions() {
-    _clang_defaultCodeCompleteOptions ??= _dylib.lookupFunction<
+    return (_clang_defaultCodeCompleteOptions ??= _dylib.lookupFunction<
             _c_clang_defaultCodeCompleteOptions,
             _dart_clang_defaultCodeCompleteOptions>(
-        'clang_defaultCodeCompleteOptions');
-    return _clang_defaultCodeCompleteOptions();
+        'clang_defaultCodeCompleteOptions'))();
   }
 
-  _dart_clang_defaultCodeCompleteOptions _clang_defaultCodeCompleteOptions;
+  _dart_clang_defaultCodeCompleteOptions? _clang_defaultCodeCompleteOptions;
 
   /// Perform code completion at a given location in a translation unit.
   ffi.Pointer<CXCodeCompleteResults> clang_codeCompleteAt(
@@ -1492,9 +1421,9 @@
     int num_unsaved_files,
     int options,
   ) {
-    _clang_codeCompleteAt ??= _dylib.lookupFunction<_c_clang_codeCompleteAt,
-        _dart_clang_codeCompleteAt>('clang_codeCompleteAt');
-    return _clang_codeCompleteAt(
+    return (_clang_codeCompleteAt ??= _dylib.lookupFunction<
+        _c_clang_codeCompleteAt,
+        _dart_clang_codeCompleteAt>('clang_codeCompleteAt'))(
       TU,
       complete_filename,
       complete_line,
@@ -1505,55 +1434,52 @@
     );
   }
 
-  _dart_clang_codeCompleteAt _clang_codeCompleteAt;
+  _dart_clang_codeCompleteAt? _clang_codeCompleteAt;
 
   /// Sort the code-completion results in case-insensitive alphabetical order.
   void clang_sortCodeCompletionResults(
     ffi.Pointer<CXCompletionResult> Results,
     int NumResults,
   ) {
-    _clang_sortCodeCompletionResults ??= _dylib.lookupFunction<
+    return (_clang_sortCodeCompletionResults ??= _dylib.lookupFunction<
             _c_clang_sortCodeCompletionResults,
             _dart_clang_sortCodeCompletionResults>(
-        'clang_sortCodeCompletionResults');
-    return _clang_sortCodeCompletionResults(
+        'clang_sortCodeCompletionResults'))(
       Results,
       NumResults,
     );
   }
 
-  _dart_clang_sortCodeCompletionResults _clang_sortCodeCompletionResults;
+  _dart_clang_sortCodeCompletionResults? _clang_sortCodeCompletionResults;
 
   /// Free the given set of code-completion results.
   void clang_disposeCodeCompleteResults(
     ffi.Pointer<CXCodeCompleteResults> Results,
   ) {
-    _clang_disposeCodeCompleteResults ??= _dylib.lookupFunction<
+    return (_clang_disposeCodeCompleteResults ??= _dylib.lookupFunction<
             _c_clang_disposeCodeCompleteResults,
             _dart_clang_disposeCodeCompleteResults>(
-        'clang_disposeCodeCompleteResults');
-    return _clang_disposeCodeCompleteResults(
+        'clang_disposeCodeCompleteResults'))(
       Results,
     );
   }
 
-  _dart_clang_disposeCodeCompleteResults _clang_disposeCodeCompleteResults;
+  _dart_clang_disposeCodeCompleteResults? _clang_disposeCodeCompleteResults;
 
   /// Determine the number of diagnostics produced prior to the location where
   /// code completion was performed.
   int clang_codeCompleteGetNumDiagnostics(
     ffi.Pointer<CXCodeCompleteResults> Results,
   ) {
-    _clang_codeCompleteGetNumDiagnostics ??= _dylib.lookupFunction<
+    return (_clang_codeCompleteGetNumDiagnostics ??= _dylib.lookupFunction<
             _c_clang_codeCompleteGetNumDiagnostics,
             _dart_clang_codeCompleteGetNumDiagnostics>(
-        'clang_codeCompleteGetNumDiagnostics');
-    return _clang_codeCompleteGetNumDiagnostics(
+        'clang_codeCompleteGetNumDiagnostics'))(
       Results,
     );
   }
 
-  _dart_clang_codeCompleteGetNumDiagnostics
+  _dart_clang_codeCompleteGetNumDiagnostics?
       _clang_codeCompleteGetNumDiagnostics;
 
   /// Retrieve a diagnostic associated with the given code completion.
@@ -1561,32 +1487,30 @@
     ffi.Pointer<CXCodeCompleteResults> Results,
     int Index,
   ) {
-    _clang_codeCompleteGetDiagnostic ??= _dylib.lookupFunction<
+    return (_clang_codeCompleteGetDiagnostic ??= _dylib.lookupFunction<
             _c_clang_codeCompleteGetDiagnostic,
             _dart_clang_codeCompleteGetDiagnostic>(
-        'clang_codeCompleteGetDiagnostic');
-    return _clang_codeCompleteGetDiagnostic(
+        'clang_codeCompleteGetDiagnostic'))(
       Results,
       Index,
     );
   }
 
-  _dart_clang_codeCompleteGetDiagnostic _clang_codeCompleteGetDiagnostic;
+  _dart_clang_codeCompleteGetDiagnostic? _clang_codeCompleteGetDiagnostic;
 
   /// Determines what completions are appropriate for the context the given code
   /// completion.
   int clang_codeCompleteGetContexts(
     ffi.Pointer<CXCodeCompleteResults> Results,
   ) {
-    _clang_codeCompleteGetContexts ??= _dylib.lookupFunction<
+    return (_clang_codeCompleteGetContexts ??= _dylib.lookupFunction<
         _c_clang_codeCompleteGetContexts,
-        _dart_clang_codeCompleteGetContexts>('clang_codeCompleteGetContexts');
-    return _clang_codeCompleteGetContexts(
+        _dart_clang_codeCompleteGetContexts>('clang_codeCompleteGetContexts'))(
       Results,
     );
   }
 
-  _dart_clang_codeCompleteGetContexts _clang_codeCompleteGetContexts;
+  _dart_clang_codeCompleteGetContexts? _clang_codeCompleteGetContexts;
 
   /// Returns the cursor kind for the container for the current code completion
   /// context. The container is only guaranteed to be set for contexts where a
@@ -1596,31 +1520,29 @@
     ffi.Pointer<CXCodeCompleteResults> Results,
     ffi.Pointer<ffi.Uint32> IsIncomplete,
   ) {
-    _clang_codeCompleteGetContainerKind ??= _dylib.lookupFunction<
+    return (_clang_codeCompleteGetContainerKind ??= _dylib.lookupFunction<
             _c_clang_codeCompleteGetContainerKind,
             _dart_clang_codeCompleteGetContainerKind>(
-        'clang_codeCompleteGetContainerKind');
-    return _clang_codeCompleteGetContainerKind(
+        'clang_codeCompleteGetContainerKind'))(
       Results,
       IsIncomplete,
     );
   }
 
-  _dart_clang_codeCompleteGetContainerKind _clang_codeCompleteGetContainerKind;
+  _dart_clang_codeCompleteGetContainerKind? _clang_codeCompleteGetContainerKind;
 
   /// Enable/disable crash recovery.
   void clang_toggleCrashRecovery(
     int isEnabled,
   ) {
-    _clang_toggleCrashRecovery ??= _dylib.lookupFunction<
+    return (_clang_toggleCrashRecovery ??= _dylib.lookupFunction<
         _c_clang_toggleCrashRecovery,
-        _dart_clang_toggleCrashRecovery>('clang_toggleCrashRecovery');
-    return _clang_toggleCrashRecovery(
+        _dart_clang_toggleCrashRecovery>('clang_toggleCrashRecovery'))(
       isEnabled,
     );
   }
 
-  _dart_clang_toggleCrashRecovery _clang_toggleCrashRecovery;
+  _dart_clang_toggleCrashRecovery? _clang_toggleCrashRecovery;
 
   /// Visit the set of preprocessor inclusions in a translation unit. The
   /// visitor function is called with the provided data for every included file.
@@ -1631,44 +1553,42 @@
     ffi.Pointer<ffi.NativeFunction<CXInclusionVisitor>> visitor,
     ffi.Pointer<ffi.Void> client_data,
   ) {
-    _clang_getInclusions ??= _dylib.lookupFunction<_c_clang_getInclusions,
-        _dart_clang_getInclusions>('clang_getInclusions');
-    return _clang_getInclusions(
+    return (_clang_getInclusions ??= _dylib.lookupFunction<
+        _c_clang_getInclusions,
+        _dart_clang_getInclusions>('clang_getInclusions'))(
       tu,
       visitor,
       client_data,
     );
   }
 
-  _dart_clang_getInclusions _clang_getInclusions;
+  _dart_clang_getInclusions? _clang_getInclusions;
 
   /// Returns the kind of the evaluated result.
   int clang_EvalResult_getKind(
     ffi.Pointer<ffi.Void> E,
   ) {
-    _clang_EvalResult_getKind ??= _dylib.lookupFunction<
+    return (_clang_EvalResult_getKind ??= _dylib.lookupFunction<
         _c_clang_EvalResult_getKind,
-        _dart_clang_EvalResult_getKind>('clang_EvalResult_getKind');
-    return _clang_EvalResult_getKind(
+        _dart_clang_EvalResult_getKind>('clang_EvalResult_getKind'))(
       E,
     );
   }
 
-  _dart_clang_EvalResult_getKind _clang_EvalResult_getKind;
+  _dart_clang_EvalResult_getKind? _clang_EvalResult_getKind;
 
   /// Returns the evaluation result as integer if the kind is Int.
   int clang_EvalResult_getAsInt(
     ffi.Pointer<ffi.Void> E,
   ) {
-    _clang_EvalResult_getAsInt ??= _dylib.lookupFunction<
+    return (_clang_EvalResult_getAsInt ??= _dylib.lookupFunction<
         _c_clang_EvalResult_getAsInt,
-        _dart_clang_EvalResult_getAsInt>('clang_EvalResult_getAsInt');
-    return _clang_EvalResult_getAsInt(
+        _dart_clang_EvalResult_getAsInt>('clang_EvalResult_getAsInt'))(
       E,
     );
   }
 
-  _dart_clang_EvalResult_getAsInt _clang_EvalResult_getAsInt;
+  _dart_clang_EvalResult_getAsInt? _clang_EvalResult_getAsInt;
 
   /// Returns the evaluation result as a long long integer if the kind is Int.
   /// This prevents overflows that may happen if the result is returned with
@@ -1676,59 +1596,58 @@
   int clang_EvalResult_getAsLongLong(
     ffi.Pointer<ffi.Void> E,
   ) {
-    _clang_EvalResult_getAsLongLong ??= _dylib.lookupFunction<
-        _c_clang_EvalResult_getAsLongLong,
-        _dart_clang_EvalResult_getAsLongLong>('clang_EvalResult_getAsLongLong');
-    return _clang_EvalResult_getAsLongLong(
+    return (_clang_EvalResult_getAsLongLong ??= _dylib.lookupFunction<
+            _c_clang_EvalResult_getAsLongLong,
+            _dart_clang_EvalResult_getAsLongLong>(
+        'clang_EvalResult_getAsLongLong'))(
       E,
     );
   }
 
-  _dart_clang_EvalResult_getAsLongLong _clang_EvalResult_getAsLongLong;
+  _dart_clang_EvalResult_getAsLongLong? _clang_EvalResult_getAsLongLong;
 
   /// Returns a non-zero value if the kind is Int and the evaluation result
   /// resulted in an unsigned integer.
   int clang_EvalResult_isUnsignedInt(
     ffi.Pointer<ffi.Void> E,
   ) {
-    _clang_EvalResult_isUnsignedInt ??= _dylib.lookupFunction<
-        _c_clang_EvalResult_isUnsignedInt,
-        _dart_clang_EvalResult_isUnsignedInt>('clang_EvalResult_isUnsignedInt');
-    return _clang_EvalResult_isUnsignedInt(
+    return (_clang_EvalResult_isUnsignedInt ??= _dylib.lookupFunction<
+            _c_clang_EvalResult_isUnsignedInt,
+            _dart_clang_EvalResult_isUnsignedInt>(
+        'clang_EvalResult_isUnsignedInt'))(
       E,
     );
   }
 
-  _dart_clang_EvalResult_isUnsignedInt _clang_EvalResult_isUnsignedInt;
+  _dart_clang_EvalResult_isUnsignedInt? _clang_EvalResult_isUnsignedInt;
 
   /// Returns the evaluation result as an unsigned integer if the kind is Int
   /// and clang_EvalResult_isUnsignedInt is non-zero.
   int clang_EvalResult_getAsUnsigned(
     ffi.Pointer<ffi.Void> E,
   ) {
-    _clang_EvalResult_getAsUnsigned ??= _dylib.lookupFunction<
-        _c_clang_EvalResult_getAsUnsigned,
-        _dart_clang_EvalResult_getAsUnsigned>('clang_EvalResult_getAsUnsigned');
-    return _clang_EvalResult_getAsUnsigned(
+    return (_clang_EvalResult_getAsUnsigned ??= _dylib.lookupFunction<
+            _c_clang_EvalResult_getAsUnsigned,
+            _dart_clang_EvalResult_getAsUnsigned>(
+        'clang_EvalResult_getAsUnsigned'))(
       E,
     );
   }
 
-  _dart_clang_EvalResult_getAsUnsigned _clang_EvalResult_getAsUnsigned;
+  _dart_clang_EvalResult_getAsUnsigned? _clang_EvalResult_getAsUnsigned;
 
   /// Returns the evaluation result as double if the kind is double.
   double clang_EvalResult_getAsDouble(
     ffi.Pointer<ffi.Void> E,
   ) {
-    _clang_EvalResult_getAsDouble ??= _dylib.lookupFunction<
+    return (_clang_EvalResult_getAsDouble ??= _dylib.lookupFunction<
         _c_clang_EvalResult_getAsDouble,
-        _dart_clang_EvalResult_getAsDouble>('clang_EvalResult_getAsDouble');
-    return _clang_EvalResult_getAsDouble(
+        _dart_clang_EvalResult_getAsDouble>('clang_EvalResult_getAsDouble'))(
       E,
     );
   }
 
-  _dart_clang_EvalResult_getAsDouble _clang_EvalResult_getAsDouble;
+  _dart_clang_EvalResult_getAsDouble? _clang_EvalResult_getAsDouble;
 
   /// Returns the evaluation result as a constant string if the kind is other
   /// than Int or float. User must not free this pointer, instead call
@@ -1737,73 +1656,69 @@
   ffi.Pointer<ffi.Int8> clang_EvalResult_getAsStr(
     ffi.Pointer<ffi.Void> E,
   ) {
-    _clang_EvalResult_getAsStr ??= _dylib.lookupFunction<
+    return (_clang_EvalResult_getAsStr ??= _dylib.lookupFunction<
         _c_clang_EvalResult_getAsStr,
-        _dart_clang_EvalResult_getAsStr>('clang_EvalResult_getAsStr');
-    return _clang_EvalResult_getAsStr(
+        _dart_clang_EvalResult_getAsStr>('clang_EvalResult_getAsStr'))(
       E,
     );
   }
 
-  _dart_clang_EvalResult_getAsStr _clang_EvalResult_getAsStr;
+  _dart_clang_EvalResult_getAsStr? _clang_EvalResult_getAsStr;
 
   /// Disposes the created Eval memory.
   void clang_EvalResult_dispose(
     ffi.Pointer<ffi.Void> E,
   ) {
-    _clang_EvalResult_dispose ??= _dylib.lookupFunction<
+    return (_clang_EvalResult_dispose ??= _dylib.lookupFunction<
         _c_clang_EvalResult_dispose,
-        _dart_clang_EvalResult_dispose>('clang_EvalResult_dispose');
-    return _clang_EvalResult_dispose(
+        _dart_clang_EvalResult_dispose>('clang_EvalResult_dispose'))(
       E,
     );
   }
 
-  _dart_clang_EvalResult_dispose _clang_EvalResult_dispose;
+  _dart_clang_EvalResult_dispose? _clang_EvalResult_dispose;
 
   /// Retrieve a remapping.
   ffi.Pointer<ffi.Void> clang_getRemappings(
     ffi.Pointer<ffi.Int8> path,
   ) {
-    _clang_getRemappings ??= _dylib.lookupFunction<_c_clang_getRemappings,
-        _dart_clang_getRemappings>('clang_getRemappings');
-    return _clang_getRemappings(
+    return (_clang_getRemappings ??= _dylib.lookupFunction<
+        _c_clang_getRemappings,
+        _dart_clang_getRemappings>('clang_getRemappings'))(
       path,
     );
   }
 
-  _dart_clang_getRemappings _clang_getRemappings;
+  _dart_clang_getRemappings? _clang_getRemappings;
 
   /// Retrieve a remapping.
   ffi.Pointer<ffi.Void> clang_getRemappingsFromFileList(
     ffi.Pointer<ffi.Pointer<ffi.Int8>> filePaths,
     int numFiles,
   ) {
-    _clang_getRemappingsFromFileList ??= _dylib.lookupFunction<
+    return (_clang_getRemappingsFromFileList ??= _dylib.lookupFunction<
             _c_clang_getRemappingsFromFileList,
             _dart_clang_getRemappingsFromFileList>(
-        'clang_getRemappingsFromFileList');
-    return _clang_getRemappingsFromFileList(
+        'clang_getRemappingsFromFileList'))(
       filePaths,
       numFiles,
     );
   }
 
-  _dart_clang_getRemappingsFromFileList _clang_getRemappingsFromFileList;
+  _dart_clang_getRemappingsFromFileList? _clang_getRemappingsFromFileList;
 
   /// Determine the number of remappings.
   int clang_remap_getNumFiles(
     ffi.Pointer<ffi.Void> arg0,
   ) {
-    _clang_remap_getNumFiles ??= _dylib.lookupFunction<
+    return (_clang_remap_getNumFiles ??= _dylib.lookupFunction<
         _c_clang_remap_getNumFiles,
-        _dart_clang_remap_getNumFiles>('clang_remap_getNumFiles');
-    return _clang_remap_getNumFiles(
+        _dart_clang_remap_getNumFiles>('clang_remap_getNumFiles'))(
       arg0,
     );
   }
 
-  _dart_clang_remap_getNumFiles _clang_remap_getNumFiles;
+  _dart_clang_remap_getNumFiles? _clang_remap_getNumFiles;
 
   /// Get the original and the associated filename from the remapping.
   void clang_remap_getFilenames(
@@ -1812,10 +1727,9 @@
     ffi.Pointer<CXString> original,
     ffi.Pointer<CXString> transformed,
   ) {
-    _clang_remap_getFilenames ??= _dylib.lookupFunction<
+    return (_clang_remap_getFilenames ??= _dylib.lookupFunction<
         _c_clang_remap_getFilenames,
-        _dart_clang_remap_getFilenames>('clang_remap_getFilenames');
-    return _clang_remap_getFilenames(
+        _dart_clang_remap_getFilenames>('clang_remap_getFilenames'))(
       arg0,
       index,
       original,
@@ -1823,230 +1737,218 @@
     );
   }
 
-  _dart_clang_remap_getFilenames _clang_remap_getFilenames;
+  _dart_clang_remap_getFilenames? _clang_remap_getFilenames;
 
   /// Dispose the remapping.
   void clang_remap_dispose(
     ffi.Pointer<ffi.Void> arg0,
   ) {
-    _clang_remap_dispose ??= _dylib.lookupFunction<_c_clang_remap_dispose,
-        _dart_clang_remap_dispose>('clang_remap_dispose');
-    return _clang_remap_dispose(
+    return (_clang_remap_dispose ??= _dylib.lookupFunction<
+        _c_clang_remap_dispose,
+        _dart_clang_remap_dispose>('clang_remap_dispose'))(
       arg0,
     );
   }
 
-  _dart_clang_remap_dispose _clang_remap_dispose;
+  _dart_clang_remap_dispose? _clang_remap_dispose;
 
   int clang_index_isEntityObjCContainerKind(
     int arg0,
   ) {
-    _clang_index_isEntityObjCContainerKind ??= _dylib.lookupFunction<
+    return (_clang_index_isEntityObjCContainerKind ??= _dylib.lookupFunction<
             _c_clang_index_isEntityObjCContainerKind,
             _dart_clang_index_isEntityObjCContainerKind>(
-        'clang_index_isEntityObjCContainerKind');
-    return _clang_index_isEntityObjCContainerKind(
+        'clang_index_isEntityObjCContainerKind'))(
       arg0,
     );
   }
 
-  _dart_clang_index_isEntityObjCContainerKind
+  _dart_clang_index_isEntityObjCContainerKind?
       _clang_index_isEntityObjCContainerKind;
 
   ffi.Pointer<CXIdxObjCContainerDeclInfo> clang_index_getObjCContainerDeclInfo(
     ffi.Pointer<CXIdxDeclInfo> arg0,
   ) {
-    _clang_index_getObjCContainerDeclInfo ??= _dylib.lookupFunction<
+    return (_clang_index_getObjCContainerDeclInfo ??= _dylib.lookupFunction<
             _c_clang_index_getObjCContainerDeclInfo,
             _dart_clang_index_getObjCContainerDeclInfo>(
-        'clang_index_getObjCContainerDeclInfo');
-    return _clang_index_getObjCContainerDeclInfo(
+        'clang_index_getObjCContainerDeclInfo'))(
       arg0,
     );
   }
 
-  _dart_clang_index_getObjCContainerDeclInfo
+  _dart_clang_index_getObjCContainerDeclInfo?
       _clang_index_getObjCContainerDeclInfo;
 
   ffi.Pointer<CXIdxObjCInterfaceDeclInfo> clang_index_getObjCInterfaceDeclInfo(
     ffi.Pointer<CXIdxDeclInfo> arg0,
   ) {
-    _clang_index_getObjCInterfaceDeclInfo ??= _dylib.lookupFunction<
+    return (_clang_index_getObjCInterfaceDeclInfo ??= _dylib.lookupFunction<
             _c_clang_index_getObjCInterfaceDeclInfo,
             _dart_clang_index_getObjCInterfaceDeclInfo>(
-        'clang_index_getObjCInterfaceDeclInfo');
-    return _clang_index_getObjCInterfaceDeclInfo(
+        'clang_index_getObjCInterfaceDeclInfo'))(
       arg0,
     );
   }
 
-  _dart_clang_index_getObjCInterfaceDeclInfo
+  _dart_clang_index_getObjCInterfaceDeclInfo?
       _clang_index_getObjCInterfaceDeclInfo;
 
   ffi.Pointer<CXIdxObjCCategoryDeclInfo> clang_index_getObjCCategoryDeclInfo(
     ffi.Pointer<CXIdxDeclInfo> arg0,
   ) {
-    _clang_index_getObjCCategoryDeclInfo ??= _dylib.lookupFunction<
+    return (_clang_index_getObjCCategoryDeclInfo ??= _dylib.lookupFunction<
             _c_clang_index_getObjCCategoryDeclInfo,
             _dart_clang_index_getObjCCategoryDeclInfo>(
-        'clang_index_getObjCCategoryDeclInfo');
-    return _clang_index_getObjCCategoryDeclInfo(
+        'clang_index_getObjCCategoryDeclInfo'))(
       arg0,
     );
   }
 
-  _dart_clang_index_getObjCCategoryDeclInfo
+  _dart_clang_index_getObjCCategoryDeclInfo?
       _clang_index_getObjCCategoryDeclInfo;
 
   ffi.Pointer<CXIdxObjCProtocolRefListInfo>
       clang_index_getObjCProtocolRefListInfo(
     ffi.Pointer<CXIdxDeclInfo> arg0,
   ) {
-    _clang_index_getObjCProtocolRefListInfo ??= _dylib.lookupFunction<
+    return (_clang_index_getObjCProtocolRefListInfo ??= _dylib.lookupFunction<
             _c_clang_index_getObjCProtocolRefListInfo,
             _dart_clang_index_getObjCProtocolRefListInfo>(
-        'clang_index_getObjCProtocolRefListInfo');
-    return _clang_index_getObjCProtocolRefListInfo(
+        'clang_index_getObjCProtocolRefListInfo'))(
       arg0,
     );
   }
 
-  _dart_clang_index_getObjCProtocolRefListInfo
+  _dart_clang_index_getObjCProtocolRefListInfo?
       _clang_index_getObjCProtocolRefListInfo;
 
   ffi.Pointer<CXIdxObjCPropertyDeclInfo> clang_index_getObjCPropertyDeclInfo(
     ffi.Pointer<CXIdxDeclInfo> arg0,
   ) {
-    _clang_index_getObjCPropertyDeclInfo ??= _dylib.lookupFunction<
+    return (_clang_index_getObjCPropertyDeclInfo ??= _dylib.lookupFunction<
             _c_clang_index_getObjCPropertyDeclInfo,
             _dart_clang_index_getObjCPropertyDeclInfo>(
-        'clang_index_getObjCPropertyDeclInfo');
-    return _clang_index_getObjCPropertyDeclInfo(
+        'clang_index_getObjCPropertyDeclInfo'))(
       arg0,
     );
   }
 
-  _dart_clang_index_getObjCPropertyDeclInfo
+  _dart_clang_index_getObjCPropertyDeclInfo?
       _clang_index_getObjCPropertyDeclInfo;
 
   ffi.Pointer<CXIdxIBOutletCollectionAttrInfo>
       clang_index_getIBOutletCollectionAttrInfo(
     ffi.Pointer<CXIdxAttrInfo> arg0,
   ) {
-    _clang_index_getIBOutletCollectionAttrInfo ??= _dylib.lookupFunction<
-            _c_clang_index_getIBOutletCollectionAttrInfo,
-            _dart_clang_index_getIBOutletCollectionAttrInfo>(
-        'clang_index_getIBOutletCollectionAttrInfo');
-    return _clang_index_getIBOutletCollectionAttrInfo(
+    return (_clang_index_getIBOutletCollectionAttrInfo ??=
+        _dylib.lookupFunction<_c_clang_index_getIBOutletCollectionAttrInfo,
+                _dart_clang_index_getIBOutletCollectionAttrInfo>(
+            'clang_index_getIBOutletCollectionAttrInfo'))(
       arg0,
     );
   }
 
-  _dart_clang_index_getIBOutletCollectionAttrInfo
+  _dart_clang_index_getIBOutletCollectionAttrInfo?
       _clang_index_getIBOutletCollectionAttrInfo;
 
   ffi.Pointer<CXIdxCXXClassDeclInfo> clang_index_getCXXClassDeclInfo(
     ffi.Pointer<CXIdxDeclInfo> arg0,
   ) {
-    _clang_index_getCXXClassDeclInfo ??= _dylib.lookupFunction<
+    return (_clang_index_getCXXClassDeclInfo ??= _dylib.lookupFunction<
             _c_clang_index_getCXXClassDeclInfo,
             _dart_clang_index_getCXXClassDeclInfo>(
-        'clang_index_getCXXClassDeclInfo');
-    return _clang_index_getCXXClassDeclInfo(
+        'clang_index_getCXXClassDeclInfo'))(
       arg0,
     );
   }
 
-  _dart_clang_index_getCXXClassDeclInfo _clang_index_getCXXClassDeclInfo;
+  _dart_clang_index_getCXXClassDeclInfo? _clang_index_getCXXClassDeclInfo;
 
   /// For retrieving a custom CXIdxClientContainer attached to a container.
   ffi.Pointer<ffi.Void> clang_index_getClientContainer(
     ffi.Pointer<CXIdxContainerInfo> arg0,
   ) {
-    _clang_index_getClientContainer ??= _dylib.lookupFunction<
-        _c_clang_index_getClientContainer,
-        _dart_clang_index_getClientContainer>('clang_index_getClientContainer');
-    return _clang_index_getClientContainer(
+    return (_clang_index_getClientContainer ??= _dylib.lookupFunction<
+            _c_clang_index_getClientContainer,
+            _dart_clang_index_getClientContainer>(
+        'clang_index_getClientContainer'))(
       arg0,
     );
   }
 
-  _dart_clang_index_getClientContainer _clang_index_getClientContainer;
+  _dart_clang_index_getClientContainer? _clang_index_getClientContainer;
 
   /// For setting a custom CXIdxClientContainer attached to a container.
   void clang_index_setClientContainer(
     ffi.Pointer<CXIdxContainerInfo> arg0,
     ffi.Pointer<ffi.Void> arg1,
   ) {
-    _clang_index_setClientContainer ??= _dylib.lookupFunction<
-        _c_clang_index_setClientContainer,
-        _dart_clang_index_setClientContainer>('clang_index_setClientContainer');
-    return _clang_index_setClientContainer(
+    return (_clang_index_setClientContainer ??= _dylib.lookupFunction<
+            _c_clang_index_setClientContainer,
+            _dart_clang_index_setClientContainer>(
+        'clang_index_setClientContainer'))(
       arg0,
       arg1,
     );
   }
 
-  _dart_clang_index_setClientContainer _clang_index_setClientContainer;
+  _dart_clang_index_setClientContainer? _clang_index_setClientContainer;
 
   /// For retrieving a custom CXIdxClientEntity attached to an entity.
   ffi.Pointer<ffi.Void> clang_index_getClientEntity(
     ffi.Pointer<CXIdxEntityInfo> arg0,
   ) {
-    _clang_index_getClientEntity ??= _dylib.lookupFunction<
+    return (_clang_index_getClientEntity ??= _dylib.lookupFunction<
         _c_clang_index_getClientEntity,
-        _dart_clang_index_getClientEntity>('clang_index_getClientEntity');
-    return _clang_index_getClientEntity(
+        _dart_clang_index_getClientEntity>('clang_index_getClientEntity'))(
       arg0,
     );
   }
 
-  _dart_clang_index_getClientEntity _clang_index_getClientEntity;
+  _dart_clang_index_getClientEntity? _clang_index_getClientEntity;
 
   /// For setting a custom CXIdxClientEntity attached to an entity.
   void clang_index_setClientEntity(
     ffi.Pointer<CXIdxEntityInfo> arg0,
     ffi.Pointer<ffi.Void> arg1,
   ) {
-    _clang_index_setClientEntity ??= _dylib.lookupFunction<
+    return (_clang_index_setClientEntity ??= _dylib.lookupFunction<
         _c_clang_index_setClientEntity,
-        _dart_clang_index_setClientEntity>('clang_index_setClientEntity');
-    return _clang_index_setClientEntity(
+        _dart_clang_index_setClientEntity>('clang_index_setClientEntity'))(
       arg0,
       arg1,
     );
   }
 
-  _dart_clang_index_setClientEntity _clang_index_setClientEntity;
+  _dart_clang_index_setClientEntity? _clang_index_setClientEntity;
 
   /// An indexing action/session, to be applied to one or multiple translation
   /// units.
   ffi.Pointer<ffi.Void> clang_IndexAction_create(
     ffi.Pointer<ffi.Void> CIdx,
   ) {
-    _clang_IndexAction_create ??= _dylib.lookupFunction<
+    return (_clang_IndexAction_create ??= _dylib.lookupFunction<
         _c_clang_IndexAction_create,
-        _dart_clang_IndexAction_create>('clang_IndexAction_create');
-    return _clang_IndexAction_create(
+        _dart_clang_IndexAction_create>('clang_IndexAction_create'))(
       CIdx,
     );
   }
 
-  _dart_clang_IndexAction_create _clang_IndexAction_create;
+  _dart_clang_IndexAction_create? _clang_IndexAction_create;
 
   /// Destroy the given index action.
   void clang_IndexAction_dispose(
     ffi.Pointer<ffi.Void> arg0,
   ) {
-    _clang_IndexAction_dispose ??= _dylib.lookupFunction<
+    return (_clang_IndexAction_dispose ??= _dylib.lookupFunction<
         _c_clang_IndexAction_dispose,
-        _dart_clang_IndexAction_dispose>('clang_IndexAction_dispose');
-    return _clang_IndexAction_dispose(
+        _dart_clang_IndexAction_dispose>('clang_IndexAction_dispose'))(
       arg0,
     );
   }
 
-  _dart_clang_IndexAction_dispose _clang_IndexAction_dispose;
+  _dart_clang_IndexAction_dispose? _clang_IndexAction_dispose;
 
   /// Index the given source file and the translation unit corresponding to that
   /// file via callbacks implemented through #IndexerCallbacks.
@@ -2064,9 +1966,9 @@
     ffi.Pointer<ffi.Pointer<CXTranslationUnitImpl>> out_TU,
     int TU_options,
   ) {
-    _clang_indexSourceFile ??= _dylib.lookupFunction<_c_clang_indexSourceFile,
-        _dart_clang_indexSourceFile>('clang_indexSourceFile');
-    return _clang_indexSourceFile(
+    return (_clang_indexSourceFile ??= _dylib.lookupFunction<
+        _c_clang_indexSourceFile,
+        _dart_clang_indexSourceFile>('clang_indexSourceFile'))(
       arg0,
       client_data,
       index_callbacks,
@@ -2082,7 +1984,7 @@
     );
   }
 
-  _dart_clang_indexSourceFile _clang_indexSourceFile;
+  _dart_clang_indexSourceFile? _clang_indexSourceFile;
 
   /// Same as clang_indexSourceFile but requires a full command line for
   /// command_line_args including argv[0]. This is useful if the standard
@@ -2101,10 +2003,9 @@
     ffi.Pointer<ffi.Pointer<CXTranslationUnitImpl>> out_TU,
     int TU_options,
   ) {
-    _clang_indexSourceFileFullArgv ??= _dylib.lookupFunction<
+    return (_clang_indexSourceFileFullArgv ??= _dylib.lookupFunction<
         _c_clang_indexSourceFileFullArgv,
-        _dart_clang_indexSourceFileFullArgv>('clang_indexSourceFileFullArgv');
-    return _clang_indexSourceFileFullArgv(
+        _dart_clang_indexSourceFileFullArgv>('clang_indexSourceFileFullArgv'))(
       arg0,
       client_data,
       index_callbacks,
@@ -2120,7 +2021,7 @@
     );
   }
 
-  _dart_clang_indexSourceFileFullArgv _clang_indexSourceFileFullArgv;
+  _dart_clang_indexSourceFileFullArgv? _clang_indexSourceFileFullArgv;
 
   /// Index the given translation unit via callbacks implemented through
   /// #IndexerCallbacks.
@@ -2132,10 +2033,9 @@
     int index_options,
     ffi.Pointer<CXTranslationUnitImpl> arg5,
   ) {
-    _clang_indexTranslationUnit ??= _dylib.lookupFunction<
+    return (_clang_indexTranslationUnit ??= _dylib.lookupFunction<
         _c_clang_indexTranslationUnit,
-        _dart_clang_indexTranslationUnit>('clang_indexTranslationUnit');
-    return _clang_indexTranslationUnit(
+        _dart_clang_indexTranslationUnit>('clang_indexTranslationUnit'))(
       arg0,
       client_data,
       index_callbacks,
@@ -2145,7 +2045,7 @@
     );
   }
 
-  _dart_clang_indexTranslationUnit _clang_indexTranslationUnit;
+  _dart_clang_indexTranslationUnit? _clang_indexTranslationUnit;
 }
 
 /// Error codes returned by libclang routines.
@@ -2168,17 +2068,17 @@
 
 /// A character string.
 class CXString extends ffi.Struct {
-  ffi.Pointer<ffi.Void> data;
+  external ffi.Pointer<ffi.Void> data;
 
   @ffi.Uint32()
-  int private_flags;
+  external int private_flags;
 }
 
 class CXStringSet extends ffi.Struct {
-  ffi.Pointer<CXString> Strings;
+  external ffi.Pointer<CXString> Strings;
 
   @ffi.Uint32()
-  int Count;
+  external int Count;
 }
 
 class CXVirtualFileOverlayImpl extends ffi.Struct {}
@@ -2192,14 +2092,14 @@
 /// Provides the contents of a file that has not yet been saved to disk.
 class CXUnsavedFile extends ffi.Struct {
   /// The file whose contents have not yet been saved.
-  ffi.Pointer<ffi.Int8> Filename;
+  external ffi.Pointer<ffi.Int8> Filename;
 
   /// A buffer containing the unsaved contents of this file.
-  ffi.Pointer<ffi.Int8> Contents;
+  external ffi.Pointer<ffi.Int8> Contents;
 
   /// The length of the unsaved contents of this buffer.
   @ffi.Uint64()
-  int Length;
+  external int Length;
 }
 
 /// Describes the availability of a particular entity, which indicates whether
@@ -2226,18 +2126,18 @@
   /// The major version number, e.g., the '10' in '10.7.3'. A negative value
   /// indicates that there is no version number at all.
   @ffi.Int32()
-  int Major;
+  external int Major;
 
   /// The minor version number, e.g., the '7' in '10.7.3'. This value will be
   /// negative if no minor version number was provided, e.g., for version '10'.
   @ffi.Int32()
-  int Minor;
+  external int Minor;
 
   /// The subminor version number, e.g., the '3' in '10.7.3'. This value will be
   /// negative if no minor or subminor version number was provided, e.g., in
   /// version '10' or '10.7'.
   @ffi.Int32()
-  int Subminor;
+  external int Subminor;
 }
 
 /// Describes the exception specification of a cursor.
@@ -2294,11 +2194,11 @@
 /// across an indexing session.
 class CXFileUniqueID extends ffi.Struct {
   @ffi.Uint64()
-  int _unique_data_item_0;
+  external int _unique_data_item_0;
   @ffi.Uint64()
-  int _unique_data_item_1;
+  external int _unique_data_item_1;
   @ffi.Uint64()
-  int _unique_data_item_2;
+  external int _unique_data_item_2;
 
   /// Helper for array `data`.
   ArrayHelper_CXFileUniqueID_data_level0 get data =>
@@ -2355,14 +2255,14 @@
 
 /// Identifies a specific source location within a translation unit.
 class CXSourceLocation extends ffi.Struct {
-  ffi.Pointer<ffi.Void> _unique_ptr_data_item_0;
-  ffi.Pointer<ffi.Void> _unique_ptr_data_item_1;
+  external ffi.Pointer<ffi.Void> _unique_ptr_data_item_0;
+  external ffi.Pointer<ffi.Void> _unique_ptr_data_item_1;
 
   /// Helper for array `ptr_data`.
   ArrayHelper_CXSourceLocation_ptr_data_level0 get ptr_data =>
       ArrayHelper_CXSourceLocation_ptr_data_level0(this, [2], 0, 0);
   @ffi.Uint32()
-  int int_data;
+  external int int_data;
 }
 
 /// Helper for array `ptr_data` in struct `CXSourceLocation`.
@@ -2410,17 +2310,17 @@
 
 /// Identifies a half-open character range in the source code.
 class CXSourceRange extends ffi.Struct {
-  ffi.Pointer<ffi.Void> _unique_ptr_data_item_0;
-  ffi.Pointer<ffi.Void> _unique_ptr_data_item_1;
+  external ffi.Pointer<ffi.Void> _unique_ptr_data_item_0;
+  external ffi.Pointer<ffi.Void> _unique_ptr_data_item_1;
 
   /// Helper for array `ptr_data`.
   ArrayHelper_CXSourceRange_ptr_data_level0 get ptr_data =>
       ArrayHelper_CXSourceRange_ptr_data_level0(this, [2], 0, 0);
   @ffi.Uint32()
-  int begin_int_data;
+  external int begin_int_data;
 
   @ffi.Uint32()
-  int end_int_data;
+  external int end_int_data;
 }
 
 /// Helper for array `ptr_data` in struct `CXSourceRange`.
@@ -2470,10 +2370,10 @@
 class CXSourceRangeList extends ffi.Struct {
   /// The number of ranges in the ranges array.
   @ffi.Uint32()
-  int count;
+  external int count;
 
   /// An array of CXSourceRanges.
-  ffi.Pointer<CXSourceRange> ranges;
+  external ffi.Pointer<CXSourceRange> ranges;
 }
 
 /// Describes the severity of a particular diagnostic.
@@ -2656,20 +2556,20 @@
 
 class CXTUResourceUsageEntry extends ffi.Struct {
   @ffi.Int32()
-  int kind;
+  external int kind;
 
   @ffi.Uint64()
-  int amount;
+  external int amount;
 }
 
 /// The memory usage of a CXTranslationUnit, broken into categories.
 class CXTUResourceUsage extends ffi.Struct {
-  ffi.Pointer<ffi.Void> data;
+  external ffi.Pointer<ffi.Void> data;
 
   @ffi.Uint32()
-  int numEntries;
+  external int numEntries;
 
-  ffi.Pointer<CXTUResourceUsageEntry> entries;
+  external ffi.Pointer<CXTUResourceUsageEntry> entries;
 }
 
 /// Describes the kind of entity that a cursor refers to.
@@ -3328,14 +3228,14 @@
 /// translation unit.
 class CXCursor extends ffi.Struct {
   @ffi.Int32()
-  int kind;
+  external int kind;
 
   @ffi.Int32()
-  int xdata;
+  external int xdata;
 
-  ffi.Pointer<ffi.Void> _unique_data_item_0;
-  ffi.Pointer<ffi.Void> _unique_data_item_1;
-  ffi.Pointer<ffi.Void> _unique_data_item_2;
+  external ffi.Pointer<ffi.Void> _unique_data_item_0;
+  external ffi.Pointer<ffi.Void> _unique_data_item_1;
+  external ffi.Pointer<ffi.Void> _unique_data_item_2;
 
   /// Helper for array `data`.
   ArrayHelper_CXCursor_data_level0 get data =>
@@ -3602,10 +3502,10 @@
 /// The type of an element in the abstract syntax tree.
 class CXType extends ffi.Struct {
   @ffi.Int32()
-  int kind;
+  external int kind;
 
-  ffi.Pointer<ffi.Void> _unique_data_item_0;
-  ffi.Pointer<ffi.Void> _unique_data_item_1;
+  external ffi.Pointer<ffi.Void> _unique_data_item_0;
+  external ffi.Pointer<ffi.Void> _unique_data_item_1;
 
   /// Helper for array `data`.
   ArrayHelper_CXType_data_level0 get data =>
@@ -3849,18 +3749,18 @@
 /// Describes a single preprocessing token.
 class CXToken extends ffi.Struct {
   @ffi.Uint32()
-  int _unique_int_data_item_0;
+  external int _unique_int_data_item_0;
   @ffi.Uint32()
-  int _unique_int_data_item_1;
+  external int _unique_int_data_item_1;
   @ffi.Uint32()
-  int _unique_int_data_item_2;
+  external int _unique_int_data_item_2;
   @ffi.Uint32()
-  int _unique_int_data_item_3;
+  external int _unique_int_data_item_3;
 
   /// Helper for array `int_data`.
   ArrayHelper_CXToken_int_data_level0 get int_data =>
       ArrayHelper_CXToken_int_data_level0(this, [4], 0, 0);
-  ffi.Pointer<ffi.Void> ptr_data;
+  external ffi.Pointer<ffi.Void> ptr_data;
 }
 
 /// Helper for array `int_data` in struct `CXToken`.
@@ -3920,11 +3820,11 @@
 class CXCompletionResult extends ffi.Struct {
   /// The kind of entity that this completion refers to.
   @ffi.Int32()
-  int CursorKind;
+  external int CursorKind;
 
   /// The code-completion string that describes how to insert this
   /// code-completion result into the editing buffer.
-  ffi.Pointer<ffi.Void> CompletionString;
+  external ffi.Pointer<ffi.Void> CompletionString;
 }
 
 /// Describes a single piece of text within a code-completion string.
@@ -4003,11 +3903,11 @@
 /// Contains the results of code-completion.
 class CXCodeCompleteResults extends ffi.Struct {
   /// The code-completion results.
-  ffi.Pointer<CXCompletionResult> Results;
+  external ffi.Pointer<CXCompletionResult> Results;
 
   /// The number of code-completion results stored in the Results array.
   @ffi.Uint32()
-  int NumResults;
+  external int NumResults;
 }
 
 /// Flags that can be passed to clang_codeCompleteAt() to modify its behavior.
@@ -4158,14 +4058,14 @@
 
 /// Source location passed to index callbacks.
 class CXIdxLoc extends ffi.Struct {
-  ffi.Pointer<ffi.Void> _unique_ptr_data_item_0;
-  ffi.Pointer<ffi.Void> _unique_ptr_data_item_1;
+  external ffi.Pointer<ffi.Void> _unique_ptr_data_item_0;
+  external ffi.Pointer<ffi.Void> _unique_ptr_data_item_1;
 
   /// Helper for array `ptr_data`.
   ArrayHelper_CXIdxLoc_ptr_data_level0 get ptr_data =>
       ArrayHelper_CXIdxLoc_ptr_data_level0(this, [2], 0, 0);
   @ffi.Uint32()
-  int int_data;
+  external int int_data;
 }
 
 /// Helper for array `ptr_data` in struct `CXIdxLoc`.
@@ -4294,10 +4194,10 @@
 }
 
 class CXIdxObjCContainerDeclInfo extends ffi.Struct {
-  ffi.Pointer<CXIdxDeclInfo> declInfo;
+  external ffi.Pointer<CXIdxDeclInfo> declInfo;
 
   @ffi.Int32()
-  int kind;
+  external int kind;
 }
 
 class CXIdxBaseClassInfo extends ffi.Struct {}
@@ -4305,37 +4205,37 @@
 class CXIdxObjCProtocolRefInfo extends ffi.Struct {}
 
 class CXIdxObjCProtocolRefListInfo extends ffi.Struct {
-  ffi.Pointer<ffi.Pointer<CXIdxObjCProtocolRefInfo>> protocols;
+  external ffi.Pointer<ffi.Pointer<CXIdxObjCProtocolRefInfo>> protocols;
 
   @ffi.Uint32()
-  int numProtocols;
+  external int numProtocols;
 }
 
 class CXIdxObjCInterfaceDeclInfo extends ffi.Struct {
-  ffi.Pointer<CXIdxObjCContainerDeclInfo> containerInfo;
+  external ffi.Pointer<CXIdxObjCContainerDeclInfo> containerInfo;
 
-  ffi.Pointer<CXIdxBaseClassInfo> superInfo;
+  external ffi.Pointer<CXIdxBaseClassInfo> superInfo;
 
-  ffi.Pointer<CXIdxObjCProtocolRefListInfo> protocols;
+  external ffi.Pointer<CXIdxObjCProtocolRefListInfo> protocols;
 }
 
 class CXIdxObjCCategoryDeclInfo extends ffi.Struct {}
 
 class CXIdxObjCPropertyDeclInfo extends ffi.Struct {
-  ffi.Pointer<CXIdxDeclInfo> declInfo;
+  external ffi.Pointer<CXIdxDeclInfo> declInfo;
 
-  ffi.Pointer<CXIdxEntityInfo> getter;
+  external ffi.Pointer<CXIdxEntityInfo> getter;
 
-  ffi.Pointer<CXIdxEntityInfo> setter;
+  external ffi.Pointer<CXIdxEntityInfo> setter;
 }
 
 class CXIdxCXXClassDeclInfo extends ffi.Struct {
-  ffi.Pointer<CXIdxDeclInfo> declInfo;
+  external ffi.Pointer<CXIdxDeclInfo> declInfo;
 
-  ffi.Pointer<ffi.Pointer<CXIdxBaseClassInfo>> bases;
+  external ffi.Pointer<ffi.Pointer<CXIdxBaseClassInfo>> bases;
 
   @ffi.Uint32()
-  int numBases;
+  external int numBases;
 }
 
 /// Data for IndexerCallbacks#indexEntityReference.
@@ -4370,26 +4270,26 @@
 class IndexerCallbacks extends ffi.Struct {
   /// Called periodically to check whether indexing should be aborted. Should
   /// return 0 to continue, and non-zero to abort.
-  ffi.Pointer<ffi.NativeFunction<_typedefC_2>> abortQuery;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_2>> abortQuery;
 
   /// Called at the end of indexing; passes the complete diagnostic set.
-  ffi.Pointer<ffi.NativeFunction<_typedefC_3>> diagnostic;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_3>> diagnostic;
 
-  ffi.Pointer<ffi.NativeFunction<_typedefC_4>> enteredMainFile;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_4>> enteredMainFile;
 
   /// Called when a file gets #included/#imported.
-  ffi.Pointer<ffi.NativeFunction<_typedefC_5>> ppIncludedFile;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_5>> ppIncludedFile;
 
   /// Called when a AST file (PCH or module) gets imported.
-  ffi.Pointer<ffi.NativeFunction<_typedefC_6>> importedASTFile;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_6>> importedASTFile;
 
   /// Called at the beginning of indexing a translation unit.
-  ffi.Pointer<ffi.NativeFunction<_typedefC_7>> startedTranslationUnit;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_7>> startedTranslationUnit;
 
-  ffi.Pointer<ffi.NativeFunction<_typedefC_8>> indexDeclaration;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_8>> indexDeclaration;
 
   /// Called to index a reference of an entity.
-  ffi.Pointer<ffi.NativeFunction<_typedefC_9>> indexEntityReference;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_9>> indexEntityReference;
 }
 
 abstract class CXIndexOptFlags {
diff --git a/test/large_integration_tests/_expected_sqlite_bindings.dart b/test/large_integration_tests/_expected_sqlite_bindings.dart
index 7ca15ad..7ea5be8 100644
--- a/test/large_integration_tests/_expected_sqlite_bindings.dart
+++ b/test/large_integration_tests/_expected_sqlite_bindings.dart
@@ -12,57 +12,52 @@
   SQLite(ffi.DynamicLibrary dynamicLibrary) : _dylib = dynamicLibrary;
 
   ffi.Pointer<ffi.Int8> sqlite3_libversion() {
-    _sqlite3_libversion ??=
+    return (_sqlite3_libversion ??=
         _dylib.lookupFunction<_c_sqlite3_libversion, _dart_sqlite3_libversion>(
-            'sqlite3_libversion');
-    return _sqlite3_libversion();
+            'sqlite3_libversion'))();
   }
 
-  _dart_sqlite3_libversion _sqlite3_libversion;
+  _dart_sqlite3_libversion? _sqlite3_libversion;
 
   ffi.Pointer<ffi.Int8> sqlite3_sourceid() {
-    _sqlite3_sourceid ??=
+    return (_sqlite3_sourceid ??=
         _dylib.lookupFunction<_c_sqlite3_sourceid, _dart_sqlite3_sourceid>(
-            'sqlite3_sourceid');
-    return _sqlite3_sourceid();
+            'sqlite3_sourceid'))();
   }
 
-  _dart_sqlite3_sourceid _sqlite3_sourceid;
+  _dart_sqlite3_sourceid? _sqlite3_sourceid;
 
   int sqlite3_libversion_number() {
-    _sqlite3_libversion_number ??= _dylib.lookupFunction<
+    return (_sqlite3_libversion_number ??= _dylib.lookupFunction<
         _c_sqlite3_libversion_number,
-        _dart_sqlite3_libversion_number>('sqlite3_libversion_number');
-    return _sqlite3_libversion_number();
+        _dart_sqlite3_libversion_number>('sqlite3_libversion_number'))();
   }
 
-  _dart_sqlite3_libversion_number _sqlite3_libversion_number;
+  _dart_sqlite3_libversion_number? _sqlite3_libversion_number;
 
   int sqlite3_compileoption_used(
     ffi.Pointer<ffi.Int8> zOptName,
   ) {
-    _sqlite3_compileoption_used ??= _dylib.lookupFunction<
+    return (_sqlite3_compileoption_used ??= _dylib.lookupFunction<
         _c_sqlite3_compileoption_used,
-        _dart_sqlite3_compileoption_used>('sqlite3_compileoption_used');
-    return _sqlite3_compileoption_used(
+        _dart_sqlite3_compileoption_used>('sqlite3_compileoption_used'))(
       zOptName,
     );
   }
 
-  _dart_sqlite3_compileoption_used _sqlite3_compileoption_used;
+  _dart_sqlite3_compileoption_used? _sqlite3_compileoption_used;
 
   ffi.Pointer<ffi.Int8> sqlite3_compileoption_get(
     int N,
   ) {
-    _sqlite3_compileoption_get ??= _dylib.lookupFunction<
+    return (_sqlite3_compileoption_get ??= _dylib.lookupFunction<
         _c_sqlite3_compileoption_get,
-        _dart_sqlite3_compileoption_get>('sqlite3_compileoption_get');
-    return _sqlite3_compileoption_get(
+        _dart_sqlite3_compileoption_get>('sqlite3_compileoption_get'))(
       N,
     );
   }
 
-  _dart_sqlite3_compileoption_get _sqlite3_compileoption_get;
+  _dart_sqlite3_compileoption_get? _sqlite3_compileoption_get;
 
   /// CAPI3REF: Test To See If The Library Is Threadsafe
   ///
@@ -99,13 +94,12 @@
   ///
   /// See the [threading mode] documentation for additional information.
   int sqlite3_threadsafe() {
-    _sqlite3_threadsafe ??=
+    return (_sqlite3_threadsafe ??=
         _dylib.lookupFunction<_c_sqlite3_threadsafe, _dart_sqlite3_threadsafe>(
-            'sqlite3_threadsafe');
-    return _sqlite3_threadsafe();
+            'sqlite3_threadsafe'))();
   }
 
-  _dart_sqlite3_threadsafe _sqlite3_threadsafe;
+  _dart_sqlite3_threadsafe? _sqlite3_threadsafe;
 
   /// CAPI3REF: Closing A Database Connection
   /// DESTRUCTOR: sqlite3
@@ -146,27 +140,26 @@
   int sqlite3_close(
     ffi.Pointer<sqlite3> arg0,
   ) {
-    _sqlite3_close ??= _dylib
-        .lookupFunction<_c_sqlite3_close, _dart_sqlite3_close>('sqlite3_close');
-    return _sqlite3_close(
+    return (_sqlite3_close ??=
+        _dylib.lookupFunction<_c_sqlite3_close, _dart_sqlite3_close>(
+            'sqlite3_close'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_close _sqlite3_close;
+  _dart_sqlite3_close? _sqlite3_close;
 
   int sqlite3_close_v2(
     ffi.Pointer<sqlite3> arg0,
   ) {
-    _sqlite3_close_v2 ??=
+    return (_sqlite3_close_v2 ??=
         _dylib.lookupFunction<_c_sqlite3_close_v2, _dart_sqlite3_close_v2>(
-            'sqlite3_close_v2');
-    return _sqlite3_close_v2(
+            'sqlite3_close_v2'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_close_v2 _sqlite3_close_v2;
+  _dart_sqlite3_close_v2? _sqlite3_close_v2;
 
   /// CAPI3REF: One-Step Query Execution Interface
   /// METHOD: sqlite3
@@ -235,9 +228,8 @@
     ffi.Pointer<ffi.Void> arg3,
     ffi.Pointer<ffi.Pointer<ffi.Int8>> errmsg,
   ) {
-    _sqlite3_exec ??= _dylib
-        .lookupFunction<_c_sqlite3_exec, _dart_sqlite3_exec>('sqlite3_exec');
-    return _sqlite3_exec(
+    return (_sqlite3_exec ??= _dylib
+        .lookupFunction<_c_sqlite3_exec, _dart_sqlite3_exec>('sqlite3_exec'))(
       arg0,
       sql,
       callback,
@@ -246,7 +238,7 @@
     );
   }
 
-  _dart_sqlite3_exec _sqlite3_exec;
+  _dart_sqlite3_exec? _sqlite3_exec;
 
   /// CAPI3REF: Initialize The SQLite Library
   ///
@@ -322,40 +314,36 @@
   /// must return [SQLITE_OK] on success and some other [error code] upon
   /// failure.
   int sqlite3_initialize() {
-    _sqlite3_initialize ??=
+    return (_sqlite3_initialize ??=
         _dylib.lookupFunction<_c_sqlite3_initialize, _dart_sqlite3_initialize>(
-            'sqlite3_initialize');
-    return _sqlite3_initialize();
+            'sqlite3_initialize'))();
   }
 
-  _dart_sqlite3_initialize _sqlite3_initialize;
+  _dart_sqlite3_initialize? _sqlite3_initialize;
 
   int sqlite3_shutdown() {
-    _sqlite3_shutdown ??=
+    return (_sqlite3_shutdown ??=
         _dylib.lookupFunction<_c_sqlite3_shutdown, _dart_sqlite3_shutdown>(
-            'sqlite3_shutdown');
-    return _sqlite3_shutdown();
+            'sqlite3_shutdown'))();
   }
 
-  _dart_sqlite3_shutdown _sqlite3_shutdown;
+  _dart_sqlite3_shutdown? _sqlite3_shutdown;
 
   int sqlite3_os_init() {
-    _sqlite3_os_init ??=
+    return (_sqlite3_os_init ??=
         _dylib.lookupFunction<_c_sqlite3_os_init, _dart_sqlite3_os_init>(
-            'sqlite3_os_init');
-    return _sqlite3_os_init();
+            'sqlite3_os_init'))();
   }
 
-  _dart_sqlite3_os_init _sqlite3_os_init;
+  _dart_sqlite3_os_init? _sqlite3_os_init;
 
   int sqlite3_os_end() {
-    _sqlite3_os_end ??=
+    return (_sqlite3_os_end ??=
         _dylib.lookupFunction<_c_sqlite3_os_end, _dart_sqlite3_os_end>(
-            'sqlite3_os_end');
-    return _sqlite3_os_end();
+            'sqlite3_os_end'))();
   }
 
-  _dart_sqlite3_os_end _sqlite3_os_end;
+  _dart_sqlite3_os_end? _sqlite3_os_end;
 
   /// CAPI3REF: Configuring The SQLite Library
   ///
@@ -389,15 +377,14 @@
   int sqlite3_config(
     int arg0,
   ) {
-    _sqlite3_config ??=
+    return (_sqlite3_config ??=
         _dylib.lookupFunction<_c_sqlite3_config, _dart_sqlite3_config>(
-            'sqlite3_config');
-    return _sqlite3_config(
+            'sqlite3_config'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_config _sqlite3_config;
+  _dart_sqlite3_config? _sqlite3_config;
 
   /// CAPI3REF: Configure database connections
   /// METHOD: sqlite3
@@ -418,16 +405,15 @@
     ffi.Pointer<sqlite3> arg0,
     int op,
   ) {
-    _sqlite3_db_config ??=
+    return (_sqlite3_db_config ??=
         _dylib.lookupFunction<_c_sqlite3_db_config, _dart_sqlite3_db_config>(
-            'sqlite3_db_config');
-    return _sqlite3_db_config(
+            'sqlite3_db_config'))(
       arg0,
       op,
     );
   }
 
-  _dart_sqlite3_db_config _sqlite3_db_config;
+  _dart_sqlite3_db_config? _sqlite3_db_config;
 
   /// CAPI3REF: Enable Or Disable Extended Result Codes
   /// METHOD: sqlite3
@@ -439,16 +425,15 @@
     ffi.Pointer<sqlite3> arg0,
     int onoff,
   ) {
-    _sqlite3_extended_result_codes ??= _dylib.lookupFunction<
+    return (_sqlite3_extended_result_codes ??= _dylib.lookupFunction<
         _c_sqlite3_extended_result_codes,
-        _dart_sqlite3_extended_result_codes>('sqlite3_extended_result_codes');
-    return _sqlite3_extended_result_codes(
+        _dart_sqlite3_extended_result_codes>('sqlite3_extended_result_codes'))(
       arg0,
       onoff,
     );
   }
 
-  _dart_sqlite3_extended_result_codes _sqlite3_extended_result_codes;
+  _dart_sqlite3_extended_result_codes? _sqlite3_extended_result_codes;
 
   /// CAPI3REF: Last Insert Rowid
   /// METHOD: sqlite3
@@ -511,15 +496,14 @@
   int sqlite3_last_insert_rowid(
     ffi.Pointer<sqlite3> arg0,
   ) {
-    _sqlite3_last_insert_rowid ??= _dylib.lookupFunction<
+    return (_sqlite3_last_insert_rowid ??= _dylib.lookupFunction<
         _c_sqlite3_last_insert_rowid,
-        _dart_sqlite3_last_insert_rowid>('sqlite3_last_insert_rowid');
-    return _sqlite3_last_insert_rowid(
+        _dart_sqlite3_last_insert_rowid>('sqlite3_last_insert_rowid'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_last_insert_rowid _sqlite3_last_insert_rowid;
+  _dart_sqlite3_last_insert_rowid? _sqlite3_last_insert_rowid;
 
   /// CAPI3REF: Set the Last Insert Rowid value.
   /// METHOD: sqlite3
@@ -531,16 +515,15 @@
     ffi.Pointer<sqlite3> arg0,
     int arg1,
   ) {
-    _sqlite3_set_last_insert_rowid ??= _dylib.lookupFunction<
+    return (_sqlite3_set_last_insert_rowid ??= _dylib.lookupFunction<
         _c_sqlite3_set_last_insert_rowid,
-        _dart_sqlite3_set_last_insert_rowid>('sqlite3_set_last_insert_rowid');
-    return _sqlite3_set_last_insert_rowid(
+        _dart_sqlite3_set_last_insert_rowid>('sqlite3_set_last_insert_rowid'))(
       arg0,
       arg1,
     );
   }
 
-  _dart_sqlite3_set_last_insert_rowid _sqlite3_set_last_insert_rowid;
+  _dart_sqlite3_set_last_insert_rowid? _sqlite3_set_last_insert_rowid;
 
   /// CAPI3REF: Count The Number Of Rows Modified
   /// METHOD: sqlite3
@@ -599,15 +582,14 @@
   int sqlite3_changes(
     ffi.Pointer<sqlite3> arg0,
   ) {
-    _sqlite3_changes ??=
+    return (_sqlite3_changes ??=
         _dylib.lookupFunction<_c_sqlite3_changes, _dart_sqlite3_changes>(
-            'sqlite3_changes');
-    return _sqlite3_changes(
+            'sqlite3_changes'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_changes _sqlite3_changes;
+  _dart_sqlite3_changes? _sqlite3_changes;
 
   /// CAPI3REF: Total Number Of Rows Modified
   /// METHOD: sqlite3
@@ -645,14 +627,14 @@
   int sqlite3_total_changes(
     ffi.Pointer<sqlite3> arg0,
   ) {
-    _sqlite3_total_changes ??= _dylib.lookupFunction<_c_sqlite3_total_changes,
-        _dart_sqlite3_total_changes>('sqlite3_total_changes');
-    return _sqlite3_total_changes(
+    return (_sqlite3_total_changes ??= _dylib.lookupFunction<
+        _c_sqlite3_total_changes,
+        _dart_sqlite3_total_changes>('sqlite3_total_changes'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_total_changes _sqlite3_total_changes;
+  _dart_sqlite3_total_changes? _sqlite3_total_changes;
 
   /// CAPI3REF: Interrupt A Long-Running Query
   /// METHOD: sqlite3
@@ -690,15 +672,14 @@
   void sqlite3_interrupt(
     ffi.Pointer<sqlite3> arg0,
   ) {
-    _sqlite3_interrupt ??=
+    return (_sqlite3_interrupt ??=
         _dylib.lookupFunction<_c_sqlite3_interrupt, _dart_sqlite3_interrupt>(
-            'sqlite3_interrupt');
-    return _sqlite3_interrupt(
+            'sqlite3_interrupt'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_interrupt _sqlite3_interrupt;
+  _dart_sqlite3_interrupt? _sqlite3_interrupt;
 
   /// CAPI3REF: Determine If An SQL Statement Is Complete
   ///
@@ -734,28 +715,26 @@
   int sqlite3_complete(
     ffi.Pointer<ffi.Int8> sql,
   ) {
-    _sqlite3_complete ??=
+    return (_sqlite3_complete ??=
         _dylib.lookupFunction<_c_sqlite3_complete, _dart_sqlite3_complete>(
-            'sqlite3_complete');
-    return _sqlite3_complete(
+            'sqlite3_complete'))(
       sql,
     );
   }
 
-  _dart_sqlite3_complete _sqlite3_complete;
+  _dart_sqlite3_complete? _sqlite3_complete;
 
   int sqlite3_complete16(
     ffi.Pointer<ffi.Void> sql,
   ) {
-    _sqlite3_complete16 ??=
+    return (_sqlite3_complete16 ??=
         _dylib.lookupFunction<_c_sqlite3_complete16, _dart_sqlite3_complete16>(
-            'sqlite3_complete16');
-    return _sqlite3_complete16(
+            'sqlite3_complete16'))(
       sql,
     );
   }
 
-  _dart_sqlite3_complete16 _sqlite3_complete16;
+  _dart_sqlite3_complete16? _sqlite3_complete16;
 
   /// CAPI3REF: Register A Callback To Handle SQLITE_BUSY Errors
   /// KEYWORDS: {busy-handler callback} {busy handler}
@@ -819,16 +798,16 @@
     ffi.Pointer<ffi.NativeFunction<_typedefC_20>> arg1,
     ffi.Pointer<ffi.Void> arg2,
   ) {
-    _sqlite3_busy_handler ??= _dylib.lookupFunction<_c_sqlite3_busy_handler,
-        _dart_sqlite3_busy_handler>('sqlite3_busy_handler');
-    return _sqlite3_busy_handler(
+    return (_sqlite3_busy_handler ??= _dylib.lookupFunction<
+        _c_sqlite3_busy_handler,
+        _dart_sqlite3_busy_handler>('sqlite3_busy_handler'))(
       arg0,
       arg1,
       arg2,
     );
   }
 
-  _dart_sqlite3_busy_handler _sqlite3_busy_handler;
+  _dart_sqlite3_busy_handler? _sqlite3_busy_handler;
 
   /// CAPI3REF: Set A Busy Timeout
   /// METHOD: sqlite3
@@ -853,15 +832,15 @@
     ffi.Pointer<sqlite3> arg0,
     int ms,
   ) {
-    _sqlite3_busy_timeout ??= _dylib.lookupFunction<_c_sqlite3_busy_timeout,
-        _dart_sqlite3_busy_timeout>('sqlite3_busy_timeout');
-    return _sqlite3_busy_timeout(
+    return (_sqlite3_busy_timeout ??= _dylib.lookupFunction<
+        _c_sqlite3_busy_timeout,
+        _dart_sqlite3_busy_timeout>('sqlite3_busy_timeout'))(
       arg0,
       ms,
     );
   }
 
-  _dart_sqlite3_busy_timeout _sqlite3_busy_timeout;
+  _dart_sqlite3_busy_timeout? _sqlite3_busy_timeout;
 
   /// CAPI3REF: Convenience Routines For Running Queries
   /// METHOD: sqlite3
@@ -942,10 +921,9 @@
     ffi.Pointer<ffi.Int32> pnColumn,
     ffi.Pointer<ffi.Pointer<ffi.Int8>> pzErrmsg,
   ) {
-    _sqlite3_get_table ??=
+    return (_sqlite3_get_table ??=
         _dylib.lookupFunction<_c_sqlite3_get_table, _dart_sqlite3_get_table>(
-            'sqlite3_get_table');
-    return _sqlite3_get_table(
+            'sqlite3_get_table'))(
       db,
       zSql,
       pazResult,
@@ -955,20 +933,19 @@
     );
   }
 
-  _dart_sqlite3_get_table _sqlite3_get_table;
+  _dart_sqlite3_get_table? _sqlite3_get_table;
 
   void sqlite3_free_table(
     ffi.Pointer<ffi.Pointer<ffi.Int8>> result,
   ) {
-    _sqlite3_free_table ??=
+    return (_sqlite3_free_table ??=
         _dylib.lookupFunction<_c_sqlite3_free_table, _dart_sqlite3_free_table>(
-            'sqlite3_free_table');
-    return _sqlite3_free_table(
+            'sqlite3_free_table'))(
       result,
     );
   }
 
-  _dart_sqlite3_free_table _sqlite3_free_table;
+  _dart_sqlite3_free_table? _sqlite3_free_table;
 
   /// CAPI3REF: Formatted String Printing Functions
   ///
@@ -1011,32 +988,30 @@
   ffi.Pointer<ffi.Int8> sqlite3_mprintf(
     ffi.Pointer<ffi.Int8> arg0,
   ) {
-    _sqlite3_mprintf ??=
+    return (_sqlite3_mprintf ??=
         _dylib.lookupFunction<_c_sqlite3_mprintf, _dart_sqlite3_mprintf>(
-            'sqlite3_mprintf');
-    return _sqlite3_mprintf(
+            'sqlite3_mprintf'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_mprintf _sqlite3_mprintf;
+  _dart_sqlite3_mprintf? _sqlite3_mprintf;
 
   ffi.Pointer<ffi.Int8> sqlite3_snprintf(
     int arg0,
     ffi.Pointer<ffi.Int8> arg1,
     ffi.Pointer<ffi.Int8> arg2,
   ) {
-    _sqlite3_snprintf ??=
+    return (_sqlite3_snprintf ??=
         _dylib.lookupFunction<_c_sqlite3_snprintf, _dart_sqlite3_snprintf>(
-            'sqlite3_snprintf');
-    return _sqlite3_snprintf(
+            'sqlite3_snprintf'))(
       arg0,
       arg1,
       arg2,
     );
   }
 
-  _dart_sqlite3_snprintf _sqlite3_snprintf;
+  _dart_sqlite3_snprintf? _sqlite3_snprintf;
 
   /// CAPI3REF: Memory Allocation Subsystem
   ///
@@ -1114,82 +1089,77 @@
   ffi.Pointer<ffi.Void> sqlite3_malloc(
     int arg0,
   ) {
-    _sqlite3_malloc ??=
+    return (_sqlite3_malloc ??=
         _dylib.lookupFunction<_c_sqlite3_malloc, _dart_sqlite3_malloc>(
-            'sqlite3_malloc');
-    return _sqlite3_malloc(
+            'sqlite3_malloc'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_malloc _sqlite3_malloc;
+  _dart_sqlite3_malloc? _sqlite3_malloc;
 
   ffi.Pointer<ffi.Void> sqlite3_malloc64(
     int arg0,
   ) {
-    _sqlite3_malloc64 ??=
+    return (_sqlite3_malloc64 ??=
         _dylib.lookupFunction<_c_sqlite3_malloc64, _dart_sqlite3_malloc64>(
-            'sqlite3_malloc64');
-    return _sqlite3_malloc64(
+            'sqlite3_malloc64'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_malloc64 _sqlite3_malloc64;
+  _dart_sqlite3_malloc64? _sqlite3_malloc64;
 
   ffi.Pointer<ffi.Void> sqlite3_realloc(
     ffi.Pointer<ffi.Void> arg0,
     int arg1,
   ) {
-    _sqlite3_realloc ??=
+    return (_sqlite3_realloc ??=
         _dylib.lookupFunction<_c_sqlite3_realloc, _dart_sqlite3_realloc>(
-            'sqlite3_realloc');
-    return _sqlite3_realloc(
+            'sqlite3_realloc'))(
       arg0,
       arg1,
     );
   }
 
-  _dart_sqlite3_realloc _sqlite3_realloc;
+  _dart_sqlite3_realloc? _sqlite3_realloc;
 
   ffi.Pointer<ffi.Void> sqlite3_realloc64(
     ffi.Pointer<ffi.Void> arg0,
     int arg1,
   ) {
-    _sqlite3_realloc64 ??=
+    return (_sqlite3_realloc64 ??=
         _dylib.lookupFunction<_c_sqlite3_realloc64, _dart_sqlite3_realloc64>(
-            'sqlite3_realloc64');
-    return _sqlite3_realloc64(
+            'sqlite3_realloc64'))(
       arg0,
       arg1,
     );
   }
 
-  _dart_sqlite3_realloc64 _sqlite3_realloc64;
+  _dart_sqlite3_realloc64? _sqlite3_realloc64;
 
   void sqlite3_free(
     ffi.Pointer<ffi.Void> arg0,
   ) {
-    _sqlite3_free ??= _dylib
-        .lookupFunction<_c_sqlite3_free, _dart_sqlite3_free>('sqlite3_free');
-    return _sqlite3_free(
+    return (_sqlite3_free ??= _dylib
+        .lookupFunction<_c_sqlite3_free, _dart_sqlite3_free>('sqlite3_free'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_free _sqlite3_free;
+  _dart_sqlite3_free? _sqlite3_free;
 
   int sqlite3_msize(
     ffi.Pointer<ffi.Void> arg0,
   ) {
-    _sqlite3_msize ??= _dylib
-        .lookupFunction<_c_sqlite3_msize, _dart_sqlite3_msize>('sqlite3_msize');
-    return _sqlite3_msize(
+    return (_sqlite3_msize ??=
+        _dylib.lookupFunction<_c_sqlite3_msize, _dart_sqlite3_msize>(
+            'sqlite3_msize'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_msize _sqlite3_msize;
+  _dart_sqlite3_msize? _sqlite3_msize;
 
   /// CAPI3REF: Memory Allocator Statistics
   ///
@@ -1213,25 +1183,24 @@
   /// by [sqlite3_memory_highwater(1)] is the high-water mark
   /// prior to the reset.
   int sqlite3_memory_used() {
-    _sqlite3_memory_used ??= _dylib.lookupFunction<_c_sqlite3_memory_used,
-        _dart_sqlite3_memory_used>('sqlite3_memory_used');
-    return _sqlite3_memory_used();
+    return (_sqlite3_memory_used ??= _dylib.lookupFunction<
+        _c_sqlite3_memory_used,
+        _dart_sqlite3_memory_used>('sqlite3_memory_used'))();
   }
 
-  _dart_sqlite3_memory_used _sqlite3_memory_used;
+  _dart_sqlite3_memory_used? _sqlite3_memory_used;
 
   int sqlite3_memory_highwater(
     int resetFlag,
   ) {
-    _sqlite3_memory_highwater ??= _dylib.lookupFunction<
+    return (_sqlite3_memory_highwater ??= _dylib.lookupFunction<
         _c_sqlite3_memory_highwater,
-        _dart_sqlite3_memory_highwater>('sqlite3_memory_highwater');
-    return _sqlite3_memory_highwater(
+        _dart_sqlite3_memory_highwater>('sqlite3_memory_highwater'))(
       resetFlag,
     );
   }
 
-  _dart_sqlite3_memory_highwater _sqlite3_memory_highwater;
+  _dart_sqlite3_memory_highwater? _sqlite3_memory_highwater;
 
   /// CAPI3REF: Pseudo-Random Number Generator
   ///
@@ -1256,16 +1225,15 @@
     int N,
     ffi.Pointer<ffi.Void> P,
   ) {
-    _sqlite3_randomness ??=
+    return (_sqlite3_randomness ??=
         _dylib.lookupFunction<_c_sqlite3_randomness, _dart_sqlite3_randomness>(
-            'sqlite3_randomness');
-    return _sqlite3_randomness(
+            'sqlite3_randomness'))(
       N,
       P,
     );
   }
 
-  _dart_sqlite3_randomness _sqlite3_randomness;
+  _dart_sqlite3_randomness? _sqlite3_randomness;
 
   /// CAPI3REF: Compile-Time Authorization Callbacks
   /// METHOD: sqlite3
@@ -1359,16 +1327,16 @@
     ffi.Pointer<ffi.NativeFunction<_typedefC_21>> xAuth,
     ffi.Pointer<ffi.Void> pUserData,
   ) {
-    _sqlite3_set_authorizer ??= _dylib.lookupFunction<_c_sqlite3_set_authorizer,
-        _dart_sqlite3_set_authorizer>('sqlite3_set_authorizer');
-    return _sqlite3_set_authorizer(
+    return (_sqlite3_set_authorizer ??= _dylib.lookupFunction<
+        _c_sqlite3_set_authorizer,
+        _dart_sqlite3_set_authorizer>('sqlite3_set_authorizer'))(
       arg0,
       xAuth,
       pUserData,
     );
   }
 
-  _dart_sqlite3_set_authorizer _sqlite3_set_authorizer;
+  _dart_sqlite3_set_authorizer? _sqlite3_set_authorizer;
 
   /// CAPI3REF: Tracing And Profiling Functions
   /// METHOD: sqlite3
@@ -1405,33 +1373,32 @@
     ffi.Pointer<ffi.NativeFunction<_typedefC_22>> xTrace,
     ffi.Pointer<ffi.Void> arg2,
   ) {
-    _sqlite3_trace ??= _dylib
-        .lookupFunction<_c_sqlite3_trace, _dart_sqlite3_trace>('sqlite3_trace');
-    return _sqlite3_trace(
+    return (_sqlite3_trace ??=
+        _dylib.lookupFunction<_c_sqlite3_trace, _dart_sqlite3_trace>(
+            'sqlite3_trace'))(
       arg0,
       xTrace,
       arg2,
     );
   }
 
-  _dart_sqlite3_trace _sqlite3_trace;
+  _dart_sqlite3_trace? _sqlite3_trace;
 
   ffi.Pointer<ffi.Void> sqlite3_profile(
     ffi.Pointer<sqlite3> arg0,
     ffi.Pointer<ffi.NativeFunction<_typedefC_23>> xProfile,
     ffi.Pointer<ffi.Void> arg2,
   ) {
-    _sqlite3_profile ??=
+    return (_sqlite3_profile ??=
         _dylib.lookupFunction<_c_sqlite3_profile, _dart_sqlite3_profile>(
-            'sqlite3_profile');
-    return _sqlite3_profile(
+            'sqlite3_profile'))(
       arg0,
       xProfile,
       arg2,
     );
   }
 
-  _dart_sqlite3_profile _sqlite3_profile;
+  _dart_sqlite3_profile? _sqlite3_profile;
 
   /// CAPI3REF: SQL Trace Hook
   /// METHOD: sqlite3
@@ -1466,10 +1433,9 @@
     ffi.Pointer<ffi.NativeFunction<_typedefC_24>> xCallback,
     ffi.Pointer<ffi.Void> pCtx,
   ) {
-    _sqlite3_trace_v2 ??=
+    return (_sqlite3_trace_v2 ??=
         _dylib.lookupFunction<_c_sqlite3_trace_v2, _dart_sqlite3_trace_v2>(
-            'sqlite3_trace_v2');
-    return _sqlite3_trace_v2(
+            'sqlite3_trace_v2'))(
       arg0,
       uMask,
       xCallback,
@@ -1477,7 +1443,7 @@
     );
   }
 
-  _dart_sqlite3_trace_v2 _sqlite3_trace_v2;
+  _dart_sqlite3_trace_v2? _sqlite3_trace_v2;
 
   /// CAPI3REF: Query Progress Callbacks
   /// METHOD: sqlite3
@@ -1514,10 +1480,9 @@
     ffi.Pointer<ffi.NativeFunction<_typedefC_25>> arg2,
     ffi.Pointer<ffi.Void> arg3,
   ) {
-    _sqlite3_progress_handler ??= _dylib.lookupFunction<
+    return (_sqlite3_progress_handler ??= _dylib.lookupFunction<
         _c_sqlite3_progress_handler,
-        _dart_sqlite3_progress_handler>('sqlite3_progress_handler');
-    return _sqlite3_progress_handler(
+        _dart_sqlite3_progress_handler>('sqlite3_progress_handler'))(
       arg0,
       arg1,
       arg2,
@@ -1525,7 +1490,7 @@
     );
   }
 
-  _dart_sqlite3_progress_handler _sqlite3_progress_handler;
+  _dart_sqlite3_progress_handler? _sqlite3_progress_handler;
 
   /// CAPI3REF: Opening A New Database Connection
   /// CONSTRUCTOR: sqlite3
@@ -1782,30 +1747,28 @@
     ffi.Pointer<ffi.Int8> filename,
     ffi.Pointer<ffi.Pointer<sqlite3>> ppDb,
   ) {
-    _sqlite3_open ??= _dylib
-        .lookupFunction<_c_sqlite3_open, _dart_sqlite3_open>('sqlite3_open');
-    return _sqlite3_open(
+    return (_sqlite3_open ??= _dylib
+        .lookupFunction<_c_sqlite3_open, _dart_sqlite3_open>('sqlite3_open'))(
       filename,
       ppDb,
     );
   }
 
-  _dart_sqlite3_open _sqlite3_open;
+  _dart_sqlite3_open? _sqlite3_open;
 
   int sqlite3_open16(
     ffi.Pointer<ffi.Void> filename,
     ffi.Pointer<ffi.Pointer<sqlite3>> ppDb,
   ) {
-    _sqlite3_open16 ??=
+    return (_sqlite3_open16 ??=
         _dylib.lookupFunction<_c_sqlite3_open16, _dart_sqlite3_open16>(
-            'sqlite3_open16');
-    return _sqlite3_open16(
+            'sqlite3_open16'))(
       filename,
       ppDb,
     );
   }
 
-  _dart_sqlite3_open16 _sqlite3_open16;
+  _dart_sqlite3_open16? _sqlite3_open16;
 
   int sqlite3_open_v2(
     ffi.Pointer<ffi.Int8> filename,
@@ -1813,10 +1776,9 @@
     int flags,
     ffi.Pointer<ffi.Int8> zVfs,
   ) {
-    _sqlite3_open_v2 ??=
+    return (_sqlite3_open_v2 ??=
         _dylib.lookupFunction<_c_sqlite3_open_v2, _dart_sqlite3_open_v2>(
-            'sqlite3_open_v2');
-    return _sqlite3_open_v2(
+            'sqlite3_open_v2'))(
       filename,
       ppDb,
       flags,
@@ -1824,7 +1786,7 @@
     );
   }
 
-  _dart_sqlite3_open_v2 _sqlite3_open_v2;
+  _dart_sqlite3_open_v2? _sqlite3_open_v2;
 
   /// CAPI3REF: Obtain Values For URI Parameters
   ///
@@ -1894,63 +1856,61 @@
     ffi.Pointer<ffi.Int8> zFilename,
     ffi.Pointer<ffi.Int8> zParam,
   ) {
-    _sqlite3_uri_parameter ??= _dylib.lookupFunction<_c_sqlite3_uri_parameter,
-        _dart_sqlite3_uri_parameter>('sqlite3_uri_parameter');
-    return _sqlite3_uri_parameter(
+    return (_sqlite3_uri_parameter ??= _dylib.lookupFunction<
+        _c_sqlite3_uri_parameter,
+        _dart_sqlite3_uri_parameter>('sqlite3_uri_parameter'))(
       zFilename,
       zParam,
     );
   }
 
-  _dart_sqlite3_uri_parameter _sqlite3_uri_parameter;
+  _dart_sqlite3_uri_parameter? _sqlite3_uri_parameter;
 
   int sqlite3_uri_boolean(
     ffi.Pointer<ffi.Int8> zFile,
     ffi.Pointer<ffi.Int8> zParam,
     int bDefault,
   ) {
-    _sqlite3_uri_boolean ??= _dylib.lookupFunction<_c_sqlite3_uri_boolean,
-        _dart_sqlite3_uri_boolean>('sqlite3_uri_boolean');
-    return _sqlite3_uri_boolean(
+    return (_sqlite3_uri_boolean ??= _dylib.lookupFunction<
+        _c_sqlite3_uri_boolean,
+        _dart_sqlite3_uri_boolean>('sqlite3_uri_boolean'))(
       zFile,
       zParam,
       bDefault,
     );
   }
 
-  _dart_sqlite3_uri_boolean _sqlite3_uri_boolean;
+  _dart_sqlite3_uri_boolean? _sqlite3_uri_boolean;
 
   int sqlite3_uri_int64(
     ffi.Pointer<ffi.Int8> arg0,
     ffi.Pointer<ffi.Int8> arg1,
     int arg2,
   ) {
-    _sqlite3_uri_int64 ??=
+    return (_sqlite3_uri_int64 ??=
         _dylib.lookupFunction<_c_sqlite3_uri_int64, _dart_sqlite3_uri_int64>(
-            'sqlite3_uri_int64');
-    return _sqlite3_uri_int64(
+            'sqlite3_uri_int64'))(
       arg0,
       arg1,
       arg2,
     );
   }
 
-  _dart_sqlite3_uri_int64 _sqlite3_uri_int64;
+  _dart_sqlite3_uri_int64? _sqlite3_uri_int64;
 
   ffi.Pointer<ffi.Int8> sqlite3_uri_key(
     ffi.Pointer<ffi.Int8> zFilename,
     int N,
   ) {
-    _sqlite3_uri_key ??=
+    return (_sqlite3_uri_key ??=
         _dylib.lookupFunction<_c_sqlite3_uri_key, _dart_sqlite3_uri_key>(
-            'sqlite3_uri_key');
-    return _sqlite3_uri_key(
+            'sqlite3_uri_key'))(
       zFilename,
       N,
     );
   }
 
-  _dart_sqlite3_uri_key _sqlite3_uri_key;
+  _dart_sqlite3_uri_key? _sqlite3_uri_key;
 
   /// CAPI3REF:  Translate filenames
   ///
@@ -1980,40 +1940,38 @@
   ffi.Pointer<ffi.Int8> sqlite3_filename_database(
     ffi.Pointer<ffi.Int8> arg0,
   ) {
-    _sqlite3_filename_database ??= _dylib.lookupFunction<
+    return (_sqlite3_filename_database ??= _dylib.lookupFunction<
         _c_sqlite3_filename_database,
-        _dart_sqlite3_filename_database>('sqlite3_filename_database');
-    return _sqlite3_filename_database(
+        _dart_sqlite3_filename_database>('sqlite3_filename_database'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_filename_database _sqlite3_filename_database;
+  _dart_sqlite3_filename_database? _sqlite3_filename_database;
 
   ffi.Pointer<ffi.Int8> sqlite3_filename_journal(
     ffi.Pointer<ffi.Int8> arg0,
   ) {
-    _sqlite3_filename_journal ??= _dylib.lookupFunction<
+    return (_sqlite3_filename_journal ??= _dylib.lookupFunction<
         _c_sqlite3_filename_journal,
-        _dart_sqlite3_filename_journal>('sqlite3_filename_journal');
-    return _sqlite3_filename_journal(
+        _dart_sqlite3_filename_journal>('sqlite3_filename_journal'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_filename_journal _sqlite3_filename_journal;
+  _dart_sqlite3_filename_journal? _sqlite3_filename_journal;
 
   ffi.Pointer<ffi.Int8> sqlite3_filename_wal(
     ffi.Pointer<ffi.Int8> arg0,
   ) {
-    _sqlite3_filename_wal ??= _dylib.lookupFunction<_c_sqlite3_filename_wal,
-        _dart_sqlite3_filename_wal>('sqlite3_filename_wal');
-    return _sqlite3_filename_wal(
+    return (_sqlite3_filename_wal ??= _dylib.lookupFunction<
+        _c_sqlite3_filename_wal,
+        _dart_sqlite3_filename_wal>('sqlite3_filename_wal'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_filename_wal _sqlite3_filename_wal;
+  _dart_sqlite3_filename_wal? _sqlite3_filename_wal;
 
   /// CAPI3REF:  Database File Corresponding To A Journal
   ///
@@ -2033,15 +1991,14 @@
   ffi.Pointer<sqlite3_file> sqlite3_database_file_object(
     ffi.Pointer<ffi.Int8> arg0,
   ) {
-    _sqlite3_database_file_object ??= _dylib.lookupFunction<
+    return (_sqlite3_database_file_object ??= _dylib.lookupFunction<
         _c_sqlite3_database_file_object,
-        _dart_sqlite3_database_file_object>('sqlite3_database_file_object');
-    return _sqlite3_database_file_object(
+        _dart_sqlite3_database_file_object>('sqlite3_database_file_object'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_database_file_object _sqlite3_database_file_object;
+  _dart_sqlite3_database_file_object? _sqlite3_database_file_object;
 
   /// CAPI3REF: Create and Destroy VFS Filenames
   ///
@@ -2093,10 +2050,9 @@
     int nParam,
     ffi.Pointer<ffi.Pointer<ffi.Int8>> azParam,
   ) {
-    _sqlite3_create_filename ??= _dylib.lookupFunction<
+    return (_sqlite3_create_filename ??= _dylib.lookupFunction<
         _c_sqlite3_create_filename,
-        _dart_sqlite3_create_filename>('sqlite3_create_filename');
-    return _sqlite3_create_filename(
+        _dart_sqlite3_create_filename>('sqlite3_create_filename'))(
       zDatabase,
       zJournal,
       zWal,
@@ -2105,19 +2061,19 @@
     );
   }
 
-  _dart_sqlite3_create_filename _sqlite3_create_filename;
+  _dart_sqlite3_create_filename? _sqlite3_create_filename;
 
   void sqlite3_free_filename(
     ffi.Pointer<ffi.Int8> arg0,
   ) {
-    _sqlite3_free_filename ??= _dylib.lookupFunction<_c_sqlite3_free_filename,
-        _dart_sqlite3_free_filename>('sqlite3_free_filename');
-    return _sqlite3_free_filename(
+    return (_sqlite3_free_filename ??= _dylib.lookupFunction<
+        _c_sqlite3_free_filename,
+        _dart_sqlite3_free_filename>('sqlite3_free_filename'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_free_filename _sqlite3_free_filename;
+  _dart_sqlite3_free_filename? _sqlite3_free_filename;
 
   /// CAPI3REF: Error Codes And Messages
   /// METHOD: sqlite3
@@ -2172,67 +2128,62 @@
   int sqlite3_errcode(
     ffi.Pointer<sqlite3> db,
   ) {
-    _sqlite3_errcode ??=
+    return (_sqlite3_errcode ??=
         _dylib.lookupFunction<_c_sqlite3_errcode, _dart_sqlite3_errcode>(
-            'sqlite3_errcode');
-    return _sqlite3_errcode(
+            'sqlite3_errcode'))(
       db,
     );
   }
 
-  _dart_sqlite3_errcode _sqlite3_errcode;
+  _dart_sqlite3_errcode? _sqlite3_errcode;
 
   int sqlite3_extended_errcode(
     ffi.Pointer<sqlite3> db,
   ) {
-    _sqlite3_extended_errcode ??= _dylib.lookupFunction<
+    return (_sqlite3_extended_errcode ??= _dylib.lookupFunction<
         _c_sqlite3_extended_errcode,
-        _dart_sqlite3_extended_errcode>('sqlite3_extended_errcode');
-    return _sqlite3_extended_errcode(
+        _dart_sqlite3_extended_errcode>('sqlite3_extended_errcode'))(
       db,
     );
   }
 
-  _dart_sqlite3_extended_errcode _sqlite3_extended_errcode;
+  _dart_sqlite3_extended_errcode? _sqlite3_extended_errcode;
 
   ffi.Pointer<ffi.Int8> sqlite3_errmsg(
     ffi.Pointer<sqlite3> arg0,
   ) {
-    _sqlite3_errmsg ??=
+    return (_sqlite3_errmsg ??=
         _dylib.lookupFunction<_c_sqlite3_errmsg, _dart_sqlite3_errmsg>(
-            'sqlite3_errmsg');
-    return _sqlite3_errmsg(
+            'sqlite3_errmsg'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_errmsg _sqlite3_errmsg;
+  _dart_sqlite3_errmsg? _sqlite3_errmsg;
 
   ffi.Pointer<ffi.Void> sqlite3_errmsg16(
     ffi.Pointer<sqlite3> arg0,
   ) {
-    _sqlite3_errmsg16 ??=
+    return (_sqlite3_errmsg16 ??=
         _dylib.lookupFunction<_c_sqlite3_errmsg16, _dart_sqlite3_errmsg16>(
-            'sqlite3_errmsg16');
-    return _sqlite3_errmsg16(
+            'sqlite3_errmsg16'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_errmsg16 _sqlite3_errmsg16;
+  _dart_sqlite3_errmsg16? _sqlite3_errmsg16;
 
   ffi.Pointer<ffi.Int8> sqlite3_errstr(
     int arg0,
   ) {
-    _sqlite3_errstr ??=
+    return (_sqlite3_errstr ??=
         _dylib.lookupFunction<_c_sqlite3_errstr, _dart_sqlite3_errstr>(
-            'sqlite3_errstr');
-    return _sqlite3_errstr(
+            'sqlite3_errstr'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_errstr _sqlite3_errstr;
+  _dart_sqlite3_errstr? _sqlite3_errstr;
 
   /// CAPI3REF: Run-time Limits
   /// METHOD: sqlite3
@@ -2277,16 +2228,16 @@
     int id,
     int newVal,
   ) {
-    _sqlite3_limit ??= _dylib
-        .lookupFunction<_c_sqlite3_limit, _dart_sqlite3_limit>('sqlite3_limit');
-    return _sqlite3_limit(
+    return (_sqlite3_limit ??=
+        _dylib.lookupFunction<_c_sqlite3_limit, _dart_sqlite3_limit>(
+            'sqlite3_limit'))(
       arg0,
       id,
       newVal,
     );
   }
 
-  _dart_sqlite3_limit _sqlite3_limit;
+  _dart_sqlite3_limit? _sqlite3_limit;
 
   /// CAPI3REF: Compiling An SQL Statement
   /// KEYWORDS: {SQL statement compiler}
@@ -2393,10 +2344,9 @@
     ffi.Pointer<ffi.Pointer<sqlite3_stmt>> ppStmt,
     ffi.Pointer<ffi.Pointer<ffi.Int8>> pzTail,
   ) {
-    _sqlite3_prepare ??=
+    return (_sqlite3_prepare ??=
         _dylib.lookupFunction<_c_sqlite3_prepare, _dart_sqlite3_prepare>(
-            'sqlite3_prepare');
-    return _sqlite3_prepare(
+            'sqlite3_prepare'))(
       db,
       zSql,
       nByte,
@@ -2405,7 +2355,7 @@
     );
   }
 
-  _dart_sqlite3_prepare _sqlite3_prepare;
+  _dart_sqlite3_prepare? _sqlite3_prepare;
 
   int sqlite3_prepare_v2(
     ffi.Pointer<sqlite3> db,
@@ -2414,10 +2364,9 @@
     ffi.Pointer<ffi.Pointer<sqlite3_stmt>> ppStmt,
     ffi.Pointer<ffi.Pointer<ffi.Int8>> pzTail,
   ) {
-    _sqlite3_prepare_v2 ??=
+    return (_sqlite3_prepare_v2 ??=
         _dylib.lookupFunction<_c_sqlite3_prepare_v2, _dart_sqlite3_prepare_v2>(
-            'sqlite3_prepare_v2');
-    return _sqlite3_prepare_v2(
+            'sqlite3_prepare_v2'))(
       db,
       zSql,
       nByte,
@@ -2426,7 +2375,7 @@
     );
   }
 
-  _dart_sqlite3_prepare_v2 _sqlite3_prepare_v2;
+  _dart_sqlite3_prepare_v2? _sqlite3_prepare_v2;
 
   int sqlite3_prepare_v3(
     ffi.Pointer<sqlite3> db,
@@ -2436,10 +2385,9 @@
     ffi.Pointer<ffi.Pointer<sqlite3_stmt>> ppStmt,
     ffi.Pointer<ffi.Pointer<ffi.Int8>> pzTail,
   ) {
-    _sqlite3_prepare_v3 ??=
+    return (_sqlite3_prepare_v3 ??=
         _dylib.lookupFunction<_c_sqlite3_prepare_v3, _dart_sqlite3_prepare_v3>(
-            'sqlite3_prepare_v3');
-    return _sqlite3_prepare_v3(
+            'sqlite3_prepare_v3'))(
       db,
       zSql,
       nByte,
@@ -2449,7 +2397,7 @@
     );
   }
 
-  _dart_sqlite3_prepare_v3 _sqlite3_prepare_v3;
+  _dart_sqlite3_prepare_v3? _sqlite3_prepare_v3;
 
   int sqlite3_prepare16(
     ffi.Pointer<sqlite3> db,
@@ -2458,10 +2406,9 @@
     ffi.Pointer<ffi.Pointer<sqlite3_stmt>> ppStmt,
     ffi.Pointer<ffi.Pointer<ffi.Void>> pzTail,
   ) {
-    _sqlite3_prepare16 ??=
+    return (_sqlite3_prepare16 ??=
         _dylib.lookupFunction<_c_sqlite3_prepare16, _dart_sqlite3_prepare16>(
-            'sqlite3_prepare16');
-    return _sqlite3_prepare16(
+            'sqlite3_prepare16'))(
       db,
       zSql,
       nByte,
@@ -2470,7 +2417,7 @@
     );
   }
 
-  _dart_sqlite3_prepare16 _sqlite3_prepare16;
+  _dart_sqlite3_prepare16? _sqlite3_prepare16;
 
   int sqlite3_prepare16_v2(
     ffi.Pointer<sqlite3> db,
@@ -2479,9 +2426,9 @@
     ffi.Pointer<ffi.Pointer<sqlite3_stmt>> ppStmt,
     ffi.Pointer<ffi.Pointer<ffi.Void>> pzTail,
   ) {
-    _sqlite3_prepare16_v2 ??= _dylib.lookupFunction<_c_sqlite3_prepare16_v2,
-        _dart_sqlite3_prepare16_v2>('sqlite3_prepare16_v2');
-    return _sqlite3_prepare16_v2(
+    return (_sqlite3_prepare16_v2 ??= _dylib.lookupFunction<
+        _c_sqlite3_prepare16_v2,
+        _dart_sqlite3_prepare16_v2>('sqlite3_prepare16_v2'))(
       db,
       zSql,
       nByte,
@@ -2490,7 +2437,7 @@
     );
   }
 
-  _dart_sqlite3_prepare16_v2 _sqlite3_prepare16_v2;
+  _dart_sqlite3_prepare16_v2? _sqlite3_prepare16_v2;
 
   int sqlite3_prepare16_v3(
     ffi.Pointer<sqlite3> db,
@@ -2500,9 +2447,9 @@
     ffi.Pointer<ffi.Pointer<sqlite3_stmt>> ppStmt,
     ffi.Pointer<ffi.Pointer<ffi.Void>> pzTail,
   ) {
-    _sqlite3_prepare16_v3 ??= _dylib.lookupFunction<_c_sqlite3_prepare16_v3,
-        _dart_sqlite3_prepare16_v3>('sqlite3_prepare16_v3');
-    return _sqlite3_prepare16_v3(
+    return (_sqlite3_prepare16_v3 ??= _dylib.lookupFunction<
+        _c_sqlite3_prepare16_v3,
+        _dart_sqlite3_prepare16_v3>('sqlite3_prepare16_v3'))(
       db,
       zSql,
       nByte,
@@ -2512,7 +2459,7 @@
     );
   }
 
-  _dart_sqlite3_prepare16_v3 _sqlite3_prepare16_v3;
+  _dart_sqlite3_prepare16_v3? _sqlite3_prepare16_v3;
 
   /// CAPI3REF: Retrieving Statement SQL
   /// METHOD: sqlite3_stmt
@@ -2553,38 +2500,37 @@
   ffi.Pointer<ffi.Int8> sqlite3_sql(
     ffi.Pointer<sqlite3_stmt> pStmt,
   ) {
-    _sqlite3_sql ??=
-        _dylib.lookupFunction<_c_sqlite3_sql, _dart_sqlite3_sql>('sqlite3_sql');
-    return _sqlite3_sql(
+    return (_sqlite3_sql ??= _dylib
+        .lookupFunction<_c_sqlite3_sql, _dart_sqlite3_sql>('sqlite3_sql'))(
       pStmt,
     );
   }
 
-  _dart_sqlite3_sql _sqlite3_sql;
+  _dart_sqlite3_sql? _sqlite3_sql;
 
   ffi.Pointer<ffi.Int8> sqlite3_expanded_sql(
     ffi.Pointer<sqlite3_stmt> pStmt,
   ) {
-    _sqlite3_expanded_sql ??= _dylib.lookupFunction<_c_sqlite3_expanded_sql,
-        _dart_sqlite3_expanded_sql>('sqlite3_expanded_sql');
-    return _sqlite3_expanded_sql(
+    return (_sqlite3_expanded_sql ??= _dylib.lookupFunction<
+        _c_sqlite3_expanded_sql,
+        _dart_sqlite3_expanded_sql>('sqlite3_expanded_sql'))(
       pStmt,
     );
   }
 
-  _dart_sqlite3_expanded_sql _sqlite3_expanded_sql;
+  _dart_sqlite3_expanded_sql? _sqlite3_expanded_sql;
 
   ffi.Pointer<ffi.Int8> sqlite3_normalized_sql(
     ffi.Pointer<sqlite3_stmt> pStmt,
   ) {
-    _sqlite3_normalized_sql ??= _dylib.lookupFunction<_c_sqlite3_normalized_sql,
-        _dart_sqlite3_normalized_sql>('sqlite3_normalized_sql');
-    return _sqlite3_normalized_sql(
+    return (_sqlite3_normalized_sql ??= _dylib.lookupFunction<
+        _c_sqlite3_normalized_sql,
+        _dart_sqlite3_normalized_sql>('sqlite3_normalized_sql'))(
       pStmt,
     );
   }
 
-  _dart_sqlite3_normalized_sql _sqlite3_normalized_sql;
+  _dart_sqlite3_normalized_sql? _sqlite3_normalized_sql;
 
   /// CAPI3REF: Determine If An SQL Statement Writes The Database
   /// METHOD: sqlite3_stmt
@@ -2621,14 +2567,14 @@
   int sqlite3_stmt_readonly(
     ffi.Pointer<sqlite3_stmt> pStmt,
   ) {
-    _sqlite3_stmt_readonly ??= _dylib.lookupFunction<_c_sqlite3_stmt_readonly,
-        _dart_sqlite3_stmt_readonly>('sqlite3_stmt_readonly');
-    return _sqlite3_stmt_readonly(
+    return (_sqlite3_stmt_readonly ??= _dylib.lookupFunction<
+        _c_sqlite3_stmt_readonly,
+        _dart_sqlite3_stmt_readonly>('sqlite3_stmt_readonly'))(
       pStmt,
     );
   }
 
-  _dart_sqlite3_stmt_readonly _sqlite3_stmt_readonly;
+  _dart_sqlite3_stmt_readonly? _sqlite3_stmt_readonly;
 
   /// CAPI3REF: Query The EXPLAIN Setting For A Prepared Statement
   /// METHOD: sqlite3_stmt
@@ -2641,14 +2587,14 @@
   int sqlite3_stmt_isexplain(
     ffi.Pointer<sqlite3_stmt> pStmt,
   ) {
-    _sqlite3_stmt_isexplain ??= _dylib.lookupFunction<_c_sqlite3_stmt_isexplain,
-        _dart_sqlite3_stmt_isexplain>('sqlite3_stmt_isexplain');
-    return _sqlite3_stmt_isexplain(
+    return (_sqlite3_stmt_isexplain ??= _dylib.lookupFunction<
+        _c_sqlite3_stmt_isexplain,
+        _dart_sqlite3_stmt_isexplain>('sqlite3_stmt_isexplain'))(
       pStmt,
     );
   }
 
-  _dart_sqlite3_stmt_isexplain _sqlite3_stmt_isexplain;
+  _dart_sqlite3_stmt_isexplain? _sqlite3_stmt_isexplain;
 
   /// CAPI3REF: Determine If A Prepared Statement Has Been Reset
   /// METHOD: sqlite3_stmt
@@ -2670,15 +2616,14 @@
   int sqlite3_stmt_busy(
     ffi.Pointer<sqlite3_stmt> arg0,
   ) {
-    _sqlite3_stmt_busy ??=
+    return (_sqlite3_stmt_busy ??=
         _dylib.lookupFunction<_c_sqlite3_stmt_busy, _dart_sqlite3_stmt_busy>(
-            'sqlite3_stmt_busy');
-    return _sqlite3_stmt_busy(
+            'sqlite3_stmt_busy'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_stmt_busy _sqlite3_stmt_busy;
+  _dart_sqlite3_stmt_busy? _sqlite3_stmt_busy;
 
   /// CAPI3REF: Binding Values To Prepared Statements
   /// KEYWORDS: {host parameter} {host parameters} {host parameter name}
@@ -2821,10 +2766,9 @@
     int n,
     ffi.Pointer<ffi.NativeFunction<_typedefC_26>> arg4,
   ) {
-    _sqlite3_bind_blob ??=
+    return (_sqlite3_bind_blob ??=
         _dylib.lookupFunction<_c_sqlite3_bind_blob, _dart_sqlite3_bind_blob>(
-            'sqlite3_bind_blob');
-    return _sqlite3_bind_blob(
+            'sqlite3_bind_blob'))(
       arg0,
       arg1,
       arg2,
@@ -2833,7 +2777,7 @@
     );
   }
 
-  _dart_sqlite3_bind_blob _sqlite3_bind_blob;
+  _dart_sqlite3_bind_blob? _sqlite3_bind_blob;
 
   int sqlite3_bind_blob64(
     ffi.Pointer<sqlite3_stmt> arg0,
@@ -2842,9 +2786,9 @@
     int arg3,
     ffi.Pointer<ffi.NativeFunction<_typedefC_27>> arg4,
   ) {
-    _sqlite3_bind_blob64 ??= _dylib.lookupFunction<_c_sqlite3_bind_blob64,
-        _dart_sqlite3_bind_blob64>('sqlite3_bind_blob64');
-    return _sqlite3_bind_blob64(
+    return (_sqlite3_bind_blob64 ??= _dylib.lookupFunction<
+        _c_sqlite3_bind_blob64,
+        _dart_sqlite3_bind_blob64>('sqlite3_bind_blob64'))(
       arg0,
       arg1,
       arg2,
@@ -2853,72 +2797,69 @@
     );
   }
 
-  _dart_sqlite3_bind_blob64 _sqlite3_bind_blob64;
+  _dart_sqlite3_bind_blob64? _sqlite3_bind_blob64;
 
   int sqlite3_bind_double(
     ffi.Pointer<sqlite3_stmt> arg0,
     int arg1,
     double arg2,
   ) {
-    _sqlite3_bind_double ??= _dylib.lookupFunction<_c_sqlite3_bind_double,
-        _dart_sqlite3_bind_double>('sqlite3_bind_double');
-    return _sqlite3_bind_double(
+    return (_sqlite3_bind_double ??= _dylib.lookupFunction<
+        _c_sqlite3_bind_double,
+        _dart_sqlite3_bind_double>('sqlite3_bind_double'))(
       arg0,
       arg1,
       arg2,
     );
   }
 
-  _dart_sqlite3_bind_double _sqlite3_bind_double;
+  _dart_sqlite3_bind_double? _sqlite3_bind_double;
 
   int sqlite3_bind_int(
     ffi.Pointer<sqlite3_stmt> arg0,
     int arg1,
     int arg2,
   ) {
-    _sqlite3_bind_int ??=
+    return (_sqlite3_bind_int ??=
         _dylib.lookupFunction<_c_sqlite3_bind_int, _dart_sqlite3_bind_int>(
-            'sqlite3_bind_int');
-    return _sqlite3_bind_int(
+            'sqlite3_bind_int'))(
       arg0,
       arg1,
       arg2,
     );
   }
 
-  _dart_sqlite3_bind_int _sqlite3_bind_int;
+  _dart_sqlite3_bind_int? _sqlite3_bind_int;
 
   int sqlite3_bind_int64(
     ffi.Pointer<sqlite3_stmt> arg0,
     int arg1,
     int arg2,
   ) {
-    _sqlite3_bind_int64 ??=
+    return (_sqlite3_bind_int64 ??=
         _dylib.lookupFunction<_c_sqlite3_bind_int64, _dart_sqlite3_bind_int64>(
-            'sqlite3_bind_int64');
-    return _sqlite3_bind_int64(
+            'sqlite3_bind_int64'))(
       arg0,
       arg1,
       arg2,
     );
   }
 
-  _dart_sqlite3_bind_int64 _sqlite3_bind_int64;
+  _dart_sqlite3_bind_int64? _sqlite3_bind_int64;
 
   int sqlite3_bind_null(
     ffi.Pointer<sqlite3_stmt> arg0,
     int arg1,
   ) {
-    _sqlite3_bind_null ??=
+    return (_sqlite3_bind_null ??=
         _dylib.lookupFunction<_c_sqlite3_bind_null, _dart_sqlite3_bind_null>(
-            'sqlite3_bind_null');
-    return _sqlite3_bind_null(
+            'sqlite3_bind_null'))(
       arg0,
       arg1,
     );
   }
 
-  _dart_sqlite3_bind_null _sqlite3_bind_null;
+  _dart_sqlite3_bind_null? _sqlite3_bind_null;
 
   int sqlite3_bind_text(
     ffi.Pointer<sqlite3_stmt> arg0,
@@ -2927,10 +2868,9 @@
     int arg3,
     ffi.Pointer<ffi.NativeFunction<_typedefC_28>> arg4,
   ) {
-    _sqlite3_bind_text ??=
+    return (_sqlite3_bind_text ??=
         _dylib.lookupFunction<_c_sqlite3_bind_text, _dart_sqlite3_bind_text>(
-            'sqlite3_bind_text');
-    return _sqlite3_bind_text(
+            'sqlite3_bind_text'))(
       arg0,
       arg1,
       arg2,
@@ -2939,7 +2879,7 @@
     );
   }
 
-  _dart_sqlite3_bind_text _sqlite3_bind_text;
+  _dart_sqlite3_bind_text? _sqlite3_bind_text;
 
   int sqlite3_bind_text16(
     ffi.Pointer<sqlite3_stmt> arg0,
@@ -2948,9 +2888,9 @@
     int arg3,
     ffi.Pointer<ffi.NativeFunction<_typedefC_29>> arg4,
   ) {
-    _sqlite3_bind_text16 ??= _dylib.lookupFunction<_c_sqlite3_bind_text16,
-        _dart_sqlite3_bind_text16>('sqlite3_bind_text16');
-    return _sqlite3_bind_text16(
+    return (_sqlite3_bind_text16 ??= _dylib.lookupFunction<
+        _c_sqlite3_bind_text16,
+        _dart_sqlite3_bind_text16>('sqlite3_bind_text16'))(
       arg0,
       arg1,
       arg2,
@@ -2959,7 +2899,7 @@
     );
   }
 
-  _dart_sqlite3_bind_text16 _sqlite3_bind_text16;
+  _dart_sqlite3_bind_text16? _sqlite3_bind_text16;
 
   int sqlite3_bind_text64(
     ffi.Pointer<sqlite3_stmt> arg0,
@@ -2969,9 +2909,9 @@
     ffi.Pointer<ffi.NativeFunction<_typedefC_30>> arg4,
     int encoding,
   ) {
-    _sqlite3_bind_text64 ??= _dylib.lookupFunction<_c_sqlite3_bind_text64,
-        _dart_sqlite3_bind_text64>('sqlite3_bind_text64');
-    return _sqlite3_bind_text64(
+    return (_sqlite3_bind_text64 ??= _dylib.lookupFunction<
+        _c_sqlite3_bind_text64,
+        _dart_sqlite3_bind_text64>('sqlite3_bind_text64'))(
       arg0,
       arg1,
       arg2,
@@ -2981,24 +2921,23 @@
     );
   }
 
-  _dart_sqlite3_bind_text64 _sqlite3_bind_text64;
+  _dart_sqlite3_bind_text64? _sqlite3_bind_text64;
 
   int sqlite3_bind_value(
     ffi.Pointer<sqlite3_stmt> arg0,
     int arg1,
     ffi.Pointer<sqlite3_value> arg2,
   ) {
-    _sqlite3_bind_value ??=
+    return (_sqlite3_bind_value ??=
         _dylib.lookupFunction<_c_sqlite3_bind_value, _dart_sqlite3_bind_value>(
-            'sqlite3_bind_value');
-    return _sqlite3_bind_value(
+            'sqlite3_bind_value'))(
       arg0,
       arg1,
       arg2,
     );
   }
 
-  _dart_sqlite3_bind_value _sqlite3_bind_value;
+  _dart_sqlite3_bind_value? _sqlite3_bind_value;
 
   int sqlite3_bind_pointer(
     ffi.Pointer<sqlite3_stmt> arg0,
@@ -3007,9 +2946,9 @@
     ffi.Pointer<ffi.Int8> arg3,
     ffi.Pointer<ffi.NativeFunction<_typedefC_31>> arg4,
   ) {
-    _sqlite3_bind_pointer ??= _dylib.lookupFunction<_c_sqlite3_bind_pointer,
-        _dart_sqlite3_bind_pointer>('sqlite3_bind_pointer');
-    return _sqlite3_bind_pointer(
+    return (_sqlite3_bind_pointer ??= _dylib.lookupFunction<
+        _c_sqlite3_bind_pointer,
+        _dart_sqlite3_bind_pointer>('sqlite3_bind_pointer'))(
       arg0,
       arg1,
       arg2,
@@ -3018,40 +2957,39 @@
     );
   }
 
-  _dart_sqlite3_bind_pointer _sqlite3_bind_pointer;
+  _dart_sqlite3_bind_pointer? _sqlite3_bind_pointer;
 
   int sqlite3_bind_zeroblob(
     ffi.Pointer<sqlite3_stmt> arg0,
     int arg1,
     int n,
   ) {
-    _sqlite3_bind_zeroblob ??= _dylib.lookupFunction<_c_sqlite3_bind_zeroblob,
-        _dart_sqlite3_bind_zeroblob>('sqlite3_bind_zeroblob');
-    return _sqlite3_bind_zeroblob(
+    return (_sqlite3_bind_zeroblob ??= _dylib.lookupFunction<
+        _c_sqlite3_bind_zeroblob,
+        _dart_sqlite3_bind_zeroblob>('sqlite3_bind_zeroblob'))(
       arg0,
       arg1,
       n,
     );
   }
 
-  _dart_sqlite3_bind_zeroblob _sqlite3_bind_zeroblob;
+  _dart_sqlite3_bind_zeroblob? _sqlite3_bind_zeroblob;
 
   int sqlite3_bind_zeroblob64(
     ffi.Pointer<sqlite3_stmt> arg0,
     int arg1,
     int arg2,
   ) {
-    _sqlite3_bind_zeroblob64 ??= _dylib.lookupFunction<
+    return (_sqlite3_bind_zeroblob64 ??= _dylib.lookupFunction<
         _c_sqlite3_bind_zeroblob64,
-        _dart_sqlite3_bind_zeroblob64>('sqlite3_bind_zeroblob64');
-    return _sqlite3_bind_zeroblob64(
+        _dart_sqlite3_bind_zeroblob64>('sqlite3_bind_zeroblob64'))(
       arg0,
       arg1,
       arg2,
     );
   }
 
-  _dart_sqlite3_bind_zeroblob64 _sqlite3_bind_zeroblob64;
+  _dart_sqlite3_bind_zeroblob64? _sqlite3_bind_zeroblob64;
 
   /// CAPI3REF: Number Of SQL Parameters
   /// METHOD: sqlite3_stmt
@@ -3073,15 +3011,14 @@
   int sqlite3_bind_parameter_count(
     ffi.Pointer<sqlite3_stmt> arg0,
   ) {
-    _sqlite3_bind_parameter_count ??= _dylib.lookupFunction<
+    return (_sqlite3_bind_parameter_count ??= _dylib.lookupFunction<
         _c_sqlite3_bind_parameter_count,
-        _dart_sqlite3_bind_parameter_count>('sqlite3_bind_parameter_count');
-    return _sqlite3_bind_parameter_count(
+        _dart_sqlite3_bind_parameter_count>('sqlite3_bind_parameter_count'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_bind_parameter_count _sqlite3_bind_parameter_count;
+  _dart_sqlite3_bind_parameter_count? _sqlite3_bind_parameter_count;
 
   /// CAPI3REF: Name Of A Host Parameter
   /// METHOD: sqlite3_stmt
@@ -3111,16 +3048,15 @@
     ffi.Pointer<sqlite3_stmt> arg0,
     int arg1,
   ) {
-    _sqlite3_bind_parameter_name ??= _dylib.lookupFunction<
+    return (_sqlite3_bind_parameter_name ??= _dylib.lookupFunction<
         _c_sqlite3_bind_parameter_name,
-        _dart_sqlite3_bind_parameter_name>('sqlite3_bind_parameter_name');
-    return _sqlite3_bind_parameter_name(
+        _dart_sqlite3_bind_parameter_name>('sqlite3_bind_parameter_name'))(
       arg0,
       arg1,
     );
   }
 
-  _dart_sqlite3_bind_parameter_name _sqlite3_bind_parameter_name;
+  _dart_sqlite3_bind_parameter_name? _sqlite3_bind_parameter_name;
 
   /// CAPI3REF: Index Of A Parameter With A Given Name
   /// METHOD: sqlite3_stmt
@@ -3140,16 +3076,15 @@
     ffi.Pointer<sqlite3_stmt> arg0,
     ffi.Pointer<ffi.Int8> zName,
   ) {
-    _sqlite3_bind_parameter_index ??= _dylib.lookupFunction<
+    return (_sqlite3_bind_parameter_index ??= _dylib.lookupFunction<
         _c_sqlite3_bind_parameter_index,
-        _dart_sqlite3_bind_parameter_index>('sqlite3_bind_parameter_index');
-    return _sqlite3_bind_parameter_index(
+        _dart_sqlite3_bind_parameter_index>('sqlite3_bind_parameter_index'))(
       arg0,
       zName,
     );
   }
 
-  _dart_sqlite3_bind_parameter_index _sqlite3_bind_parameter_index;
+  _dart_sqlite3_bind_parameter_index? _sqlite3_bind_parameter_index;
 
   /// CAPI3REF: Reset All Bindings On A Prepared Statement
   /// METHOD: sqlite3_stmt
@@ -3160,14 +3095,14 @@
   int sqlite3_clear_bindings(
     ffi.Pointer<sqlite3_stmt> arg0,
   ) {
-    _sqlite3_clear_bindings ??= _dylib.lookupFunction<_c_sqlite3_clear_bindings,
-        _dart_sqlite3_clear_bindings>('sqlite3_clear_bindings');
-    return _sqlite3_clear_bindings(
+    return (_sqlite3_clear_bindings ??= _dylib.lookupFunction<
+        _c_sqlite3_clear_bindings,
+        _dart_sqlite3_clear_bindings>('sqlite3_clear_bindings'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_clear_bindings _sqlite3_clear_bindings;
+  _dart_sqlite3_clear_bindings? _sqlite3_clear_bindings;
 
   /// CAPI3REF: Number Of Columns In A Result Set
   /// METHOD: sqlite3_stmt
@@ -3184,14 +3119,14 @@
   int sqlite3_column_count(
     ffi.Pointer<sqlite3_stmt> pStmt,
   ) {
-    _sqlite3_column_count ??= _dylib.lookupFunction<_c_sqlite3_column_count,
-        _dart_sqlite3_column_count>('sqlite3_column_count');
-    return _sqlite3_column_count(
+    return (_sqlite3_column_count ??= _dylib.lookupFunction<
+        _c_sqlite3_column_count,
+        _dart_sqlite3_column_count>('sqlite3_column_count'))(
       pStmt,
     );
   }
 
-  _dart_sqlite3_column_count _sqlite3_column_count;
+  _dart_sqlite3_column_count? _sqlite3_column_count;
 
   /// CAPI3REF: Column Names In A Result Set
   /// METHOD: sqlite3_stmt
@@ -3222,29 +3157,29 @@
     ffi.Pointer<sqlite3_stmt> arg0,
     int N,
   ) {
-    _sqlite3_column_name ??= _dylib.lookupFunction<_c_sqlite3_column_name,
-        _dart_sqlite3_column_name>('sqlite3_column_name');
-    return _sqlite3_column_name(
+    return (_sqlite3_column_name ??= _dylib.lookupFunction<
+        _c_sqlite3_column_name,
+        _dart_sqlite3_column_name>('sqlite3_column_name'))(
       arg0,
       N,
     );
   }
 
-  _dart_sqlite3_column_name _sqlite3_column_name;
+  _dart_sqlite3_column_name? _sqlite3_column_name;
 
   ffi.Pointer<ffi.Void> sqlite3_column_name16(
     ffi.Pointer<sqlite3_stmt> arg0,
     int N,
   ) {
-    _sqlite3_column_name16 ??= _dylib.lookupFunction<_c_sqlite3_column_name16,
-        _dart_sqlite3_column_name16>('sqlite3_column_name16');
-    return _sqlite3_column_name16(
+    return (_sqlite3_column_name16 ??= _dylib.lookupFunction<
+        _c_sqlite3_column_name16,
+        _dart_sqlite3_column_name16>('sqlite3_column_name16'))(
       arg0,
       N,
     );
   }
 
-  _dart_sqlite3_column_name16 _sqlite3_column_name16;
+  _dart_sqlite3_column_name16? _sqlite3_column_name16;
 
   /// CAPI3REF: Source Of Data In A Query Result
   /// METHOD: sqlite3_stmt
@@ -3290,91 +3225,86 @@
     ffi.Pointer<sqlite3_stmt> arg0,
     int arg1,
   ) {
-    _sqlite3_column_database_name ??= _dylib.lookupFunction<
+    return (_sqlite3_column_database_name ??= _dylib.lookupFunction<
         _c_sqlite3_column_database_name,
-        _dart_sqlite3_column_database_name>('sqlite3_column_database_name');
-    return _sqlite3_column_database_name(
+        _dart_sqlite3_column_database_name>('sqlite3_column_database_name'))(
       arg0,
       arg1,
     );
   }
 
-  _dart_sqlite3_column_database_name _sqlite3_column_database_name;
+  _dart_sqlite3_column_database_name? _sqlite3_column_database_name;
 
   ffi.Pointer<ffi.Void> sqlite3_column_database_name16(
     ffi.Pointer<sqlite3_stmt> arg0,
     int arg1,
   ) {
-    _sqlite3_column_database_name16 ??= _dylib.lookupFunction<
-        _c_sqlite3_column_database_name16,
-        _dart_sqlite3_column_database_name16>('sqlite3_column_database_name16');
-    return _sqlite3_column_database_name16(
+    return (_sqlite3_column_database_name16 ??= _dylib.lookupFunction<
+            _c_sqlite3_column_database_name16,
+            _dart_sqlite3_column_database_name16>(
+        'sqlite3_column_database_name16'))(
       arg0,
       arg1,
     );
   }
 
-  _dart_sqlite3_column_database_name16 _sqlite3_column_database_name16;
+  _dart_sqlite3_column_database_name16? _sqlite3_column_database_name16;
 
   ffi.Pointer<ffi.Int8> sqlite3_column_table_name(
     ffi.Pointer<sqlite3_stmt> arg0,
     int arg1,
   ) {
-    _sqlite3_column_table_name ??= _dylib.lookupFunction<
+    return (_sqlite3_column_table_name ??= _dylib.lookupFunction<
         _c_sqlite3_column_table_name,
-        _dart_sqlite3_column_table_name>('sqlite3_column_table_name');
-    return _sqlite3_column_table_name(
+        _dart_sqlite3_column_table_name>('sqlite3_column_table_name'))(
       arg0,
       arg1,
     );
   }
 
-  _dart_sqlite3_column_table_name _sqlite3_column_table_name;
+  _dart_sqlite3_column_table_name? _sqlite3_column_table_name;
 
   ffi.Pointer<ffi.Void> sqlite3_column_table_name16(
     ffi.Pointer<sqlite3_stmt> arg0,
     int arg1,
   ) {
-    _sqlite3_column_table_name16 ??= _dylib.lookupFunction<
+    return (_sqlite3_column_table_name16 ??= _dylib.lookupFunction<
         _c_sqlite3_column_table_name16,
-        _dart_sqlite3_column_table_name16>('sqlite3_column_table_name16');
-    return _sqlite3_column_table_name16(
+        _dart_sqlite3_column_table_name16>('sqlite3_column_table_name16'))(
       arg0,
       arg1,
     );
   }
 
-  _dart_sqlite3_column_table_name16 _sqlite3_column_table_name16;
+  _dart_sqlite3_column_table_name16? _sqlite3_column_table_name16;
 
   ffi.Pointer<ffi.Int8> sqlite3_column_origin_name(
     ffi.Pointer<sqlite3_stmt> arg0,
     int arg1,
   ) {
-    _sqlite3_column_origin_name ??= _dylib.lookupFunction<
+    return (_sqlite3_column_origin_name ??= _dylib.lookupFunction<
         _c_sqlite3_column_origin_name,
-        _dart_sqlite3_column_origin_name>('sqlite3_column_origin_name');
-    return _sqlite3_column_origin_name(
+        _dart_sqlite3_column_origin_name>('sqlite3_column_origin_name'))(
       arg0,
       arg1,
     );
   }
 
-  _dart_sqlite3_column_origin_name _sqlite3_column_origin_name;
+  _dart_sqlite3_column_origin_name? _sqlite3_column_origin_name;
 
   ffi.Pointer<ffi.Void> sqlite3_column_origin_name16(
     ffi.Pointer<sqlite3_stmt> arg0,
     int arg1,
   ) {
-    _sqlite3_column_origin_name16 ??= _dylib.lookupFunction<
+    return (_sqlite3_column_origin_name16 ??= _dylib.lookupFunction<
         _c_sqlite3_column_origin_name16,
-        _dart_sqlite3_column_origin_name16>('sqlite3_column_origin_name16');
-    return _sqlite3_column_origin_name16(
+        _dart_sqlite3_column_origin_name16>('sqlite3_column_origin_name16'))(
       arg0,
       arg1,
     );
   }
 
-  _dart_sqlite3_column_origin_name16 _sqlite3_column_origin_name16;
+  _dart_sqlite3_column_origin_name16? _sqlite3_column_origin_name16;
 
   /// CAPI3REF: Declared Datatype Of A Query Result
   /// METHOD: sqlite3_stmt
@@ -3408,31 +3338,29 @@
     ffi.Pointer<sqlite3_stmt> arg0,
     int arg1,
   ) {
-    _sqlite3_column_decltype ??= _dylib.lookupFunction<
+    return (_sqlite3_column_decltype ??= _dylib.lookupFunction<
         _c_sqlite3_column_decltype,
-        _dart_sqlite3_column_decltype>('sqlite3_column_decltype');
-    return _sqlite3_column_decltype(
+        _dart_sqlite3_column_decltype>('sqlite3_column_decltype'))(
       arg0,
       arg1,
     );
   }
 
-  _dart_sqlite3_column_decltype _sqlite3_column_decltype;
+  _dart_sqlite3_column_decltype? _sqlite3_column_decltype;
 
   ffi.Pointer<ffi.Void> sqlite3_column_decltype16(
     ffi.Pointer<sqlite3_stmt> arg0,
     int arg1,
   ) {
-    _sqlite3_column_decltype16 ??= _dylib.lookupFunction<
+    return (_sqlite3_column_decltype16 ??= _dylib.lookupFunction<
         _c_sqlite3_column_decltype16,
-        _dart_sqlite3_column_decltype16>('sqlite3_column_decltype16');
-    return _sqlite3_column_decltype16(
+        _dart_sqlite3_column_decltype16>('sqlite3_column_decltype16'))(
       arg0,
       arg1,
     );
   }
 
-  _dart_sqlite3_column_decltype16 _sqlite3_column_decltype16;
+  _dart_sqlite3_column_decltype16? _sqlite3_column_decltype16;
 
   /// CAPI3REF: Evaluate An SQL Statement
   /// METHOD: sqlite3_stmt
@@ -3517,14 +3445,13 @@
   int sqlite3_step(
     ffi.Pointer<sqlite3_stmt> arg0,
   ) {
-    _sqlite3_step ??= _dylib
-        .lookupFunction<_c_sqlite3_step, _dart_sqlite3_step>('sqlite3_step');
-    return _sqlite3_step(
+    return (_sqlite3_step ??= _dylib
+        .lookupFunction<_c_sqlite3_step, _dart_sqlite3_step>('sqlite3_step'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_step _sqlite3_step;
+  _dart_sqlite3_step? _sqlite3_step;
 
   /// CAPI3REF: Number of columns in a result set
   /// METHOD: sqlite3_stmt
@@ -3546,15 +3473,14 @@
   int sqlite3_data_count(
     ffi.Pointer<sqlite3_stmt> pStmt,
   ) {
-    _sqlite3_data_count ??=
+    return (_sqlite3_data_count ??=
         _dylib.lookupFunction<_c_sqlite3_data_count, _dart_sqlite3_data_count>(
-            'sqlite3_data_count');
-    return _sqlite3_data_count(
+            'sqlite3_data_count'))(
       pStmt,
     );
   }
 
-  _dart_sqlite3_data_count _sqlite3_data_count;
+  _dart_sqlite3_data_count? _sqlite3_data_count;
 
   /// CAPI3REF: Result Values From A Query
   /// KEYWORDS: {column access functions}
@@ -3767,142 +3693,141 @@
     ffi.Pointer<sqlite3_stmt> arg0,
     int iCol,
   ) {
-    _sqlite3_column_blob ??= _dylib.lookupFunction<_c_sqlite3_column_blob,
-        _dart_sqlite3_column_blob>('sqlite3_column_blob');
-    return _sqlite3_column_blob(
+    return (_sqlite3_column_blob ??= _dylib.lookupFunction<
+        _c_sqlite3_column_blob,
+        _dart_sqlite3_column_blob>('sqlite3_column_blob'))(
       arg0,
       iCol,
     );
   }
 
-  _dart_sqlite3_column_blob _sqlite3_column_blob;
+  _dart_sqlite3_column_blob? _sqlite3_column_blob;
 
   double sqlite3_column_double(
     ffi.Pointer<sqlite3_stmt> arg0,
     int iCol,
   ) {
-    _sqlite3_column_double ??= _dylib.lookupFunction<_c_sqlite3_column_double,
-        _dart_sqlite3_column_double>('sqlite3_column_double');
-    return _sqlite3_column_double(
+    return (_sqlite3_column_double ??= _dylib.lookupFunction<
+        _c_sqlite3_column_double,
+        _dart_sqlite3_column_double>('sqlite3_column_double'))(
       arg0,
       iCol,
     );
   }
 
-  _dart_sqlite3_column_double _sqlite3_column_double;
+  _dart_sqlite3_column_double? _sqlite3_column_double;
 
   int sqlite3_column_int(
     ffi.Pointer<sqlite3_stmt> arg0,
     int iCol,
   ) {
-    _sqlite3_column_int ??=
+    return (_sqlite3_column_int ??=
         _dylib.lookupFunction<_c_sqlite3_column_int, _dart_sqlite3_column_int>(
-            'sqlite3_column_int');
-    return _sqlite3_column_int(
+            'sqlite3_column_int'))(
       arg0,
       iCol,
     );
   }
 
-  _dart_sqlite3_column_int _sqlite3_column_int;
+  _dart_sqlite3_column_int? _sqlite3_column_int;
 
   int sqlite3_column_int64(
     ffi.Pointer<sqlite3_stmt> arg0,
     int iCol,
   ) {
-    _sqlite3_column_int64 ??= _dylib.lookupFunction<_c_sqlite3_column_int64,
-        _dart_sqlite3_column_int64>('sqlite3_column_int64');
-    return _sqlite3_column_int64(
+    return (_sqlite3_column_int64 ??= _dylib.lookupFunction<
+        _c_sqlite3_column_int64,
+        _dart_sqlite3_column_int64>('sqlite3_column_int64'))(
       arg0,
       iCol,
     );
   }
 
-  _dart_sqlite3_column_int64 _sqlite3_column_int64;
+  _dart_sqlite3_column_int64? _sqlite3_column_int64;
 
   ffi.Pointer<ffi.Uint8> sqlite3_column_text(
     ffi.Pointer<sqlite3_stmt> arg0,
     int iCol,
   ) {
-    _sqlite3_column_text ??= _dylib.lookupFunction<_c_sqlite3_column_text,
-        _dart_sqlite3_column_text>('sqlite3_column_text');
-    return _sqlite3_column_text(
+    return (_sqlite3_column_text ??= _dylib.lookupFunction<
+        _c_sqlite3_column_text,
+        _dart_sqlite3_column_text>('sqlite3_column_text'))(
       arg0,
       iCol,
     );
   }
 
-  _dart_sqlite3_column_text _sqlite3_column_text;
+  _dart_sqlite3_column_text? _sqlite3_column_text;
 
   ffi.Pointer<ffi.Void> sqlite3_column_text16(
     ffi.Pointer<sqlite3_stmt> arg0,
     int iCol,
   ) {
-    _sqlite3_column_text16 ??= _dylib.lookupFunction<_c_sqlite3_column_text16,
-        _dart_sqlite3_column_text16>('sqlite3_column_text16');
-    return _sqlite3_column_text16(
+    return (_sqlite3_column_text16 ??= _dylib.lookupFunction<
+        _c_sqlite3_column_text16,
+        _dart_sqlite3_column_text16>('sqlite3_column_text16'))(
       arg0,
       iCol,
     );
   }
 
-  _dart_sqlite3_column_text16 _sqlite3_column_text16;
+  _dart_sqlite3_column_text16? _sqlite3_column_text16;
 
   ffi.Pointer<sqlite3_value> sqlite3_column_value(
     ffi.Pointer<sqlite3_stmt> arg0,
     int iCol,
   ) {
-    _sqlite3_column_value ??= _dylib.lookupFunction<_c_sqlite3_column_value,
-        _dart_sqlite3_column_value>('sqlite3_column_value');
-    return _sqlite3_column_value(
+    return (_sqlite3_column_value ??= _dylib.lookupFunction<
+        _c_sqlite3_column_value,
+        _dart_sqlite3_column_value>('sqlite3_column_value'))(
       arg0,
       iCol,
     );
   }
 
-  _dart_sqlite3_column_value _sqlite3_column_value;
+  _dart_sqlite3_column_value? _sqlite3_column_value;
 
   int sqlite3_column_bytes(
     ffi.Pointer<sqlite3_stmt> arg0,
     int iCol,
   ) {
-    _sqlite3_column_bytes ??= _dylib.lookupFunction<_c_sqlite3_column_bytes,
-        _dart_sqlite3_column_bytes>('sqlite3_column_bytes');
-    return _sqlite3_column_bytes(
+    return (_sqlite3_column_bytes ??= _dylib.lookupFunction<
+        _c_sqlite3_column_bytes,
+        _dart_sqlite3_column_bytes>('sqlite3_column_bytes'))(
       arg0,
       iCol,
     );
   }
 
-  _dart_sqlite3_column_bytes _sqlite3_column_bytes;
+  _dart_sqlite3_column_bytes? _sqlite3_column_bytes;
 
   int sqlite3_column_bytes16(
     ffi.Pointer<sqlite3_stmt> arg0,
     int iCol,
   ) {
-    _sqlite3_column_bytes16 ??= _dylib.lookupFunction<_c_sqlite3_column_bytes16,
-        _dart_sqlite3_column_bytes16>('sqlite3_column_bytes16');
-    return _sqlite3_column_bytes16(
+    return (_sqlite3_column_bytes16 ??= _dylib.lookupFunction<
+        _c_sqlite3_column_bytes16,
+        _dart_sqlite3_column_bytes16>('sqlite3_column_bytes16'))(
       arg0,
       iCol,
     );
   }
 
-  _dart_sqlite3_column_bytes16 _sqlite3_column_bytes16;
+  _dart_sqlite3_column_bytes16? _sqlite3_column_bytes16;
 
   int sqlite3_column_type(
     ffi.Pointer<sqlite3_stmt> arg0,
     int iCol,
   ) {
-    _sqlite3_column_type ??= _dylib.lookupFunction<_c_sqlite3_column_type,
-        _dart_sqlite3_column_type>('sqlite3_column_type');
-    return _sqlite3_column_type(
+    return (_sqlite3_column_type ??= _dylib.lookupFunction<
+        _c_sqlite3_column_type,
+        _dart_sqlite3_column_type>('sqlite3_column_type'))(
       arg0,
       iCol,
     );
   }
 
-  _dart_sqlite3_column_type _sqlite3_column_type;
+  _dart_sqlite3_column_type? _sqlite3_column_type;
 
   /// CAPI3REF: Destroy A Prepared Statement Object
   /// DESTRUCTOR: sqlite3_stmt
@@ -3931,15 +3856,14 @@
   int sqlite3_finalize(
     ffi.Pointer<sqlite3_stmt> pStmt,
   ) {
-    _sqlite3_finalize ??=
+    return (_sqlite3_finalize ??=
         _dylib.lookupFunction<_c_sqlite3_finalize, _dart_sqlite3_finalize>(
-            'sqlite3_finalize');
-    return _sqlite3_finalize(
+            'sqlite3_finalize'))(
       pStmt,
     );
   }
 
-  _dart_sqlite3_finalize _sqlite3_finalize;
+  _dart_sqlite3_finalize? _sqlite3_finalize;
 
   /// CAPI3REF: Reset A Prepared Statement Object
   /// METHOD: sqlite3_stmt
@@ -3967,14 +3891,14 @@
   int sqlite3_reset(
     ffi.Pointer<sqlite3_stmt> pStmt,
   ) {
-    _sqlite3_reset ??= _dylib
-        .lookupFunction<_c_sqlite3_reset, _dart_sqlite3_reset>('sqlite3_reset');
-    return _sqlite3_reset(
+    return (_sqlite3_reset ??=
+        _dylib.lookupFunction<_c_sqlite3_reset, _dart_sqlite3_reset>(
+            'sqlite3_reset'))(
       pStmt,
     );
   }
 
-  _dart_sqlite3_reset _sqlite3_reset;
+  _dart_sqlite3_reset? _sqlite3_reset;
 
   /// CAPI3REF: Create Or Redefine SQL Functions
   /// KEYWORDS: {function creation routines}
@@ -4109,10 +4033,9 @@
     ffi.Pointer<ffi.NativeFunction<_typedefC_33>> xStep,
     ffi.Pointer<ffi.NativeFunction<_typedefC_34>> xFinal,
   ) {
-    _sqlite3_create_function ??= _dylib.lookupFunction<
+    return (_sqlite3_create_function ??= _dylib.lookupFunction<
         _c_sqlite3_create_function,
-        _dart_sqlite3_create_function>('sqlite3_create_function');
-    return _sqlite3_create_function(
+        _dart_sqlite3_create_function>('sqlite3_create_function'))(
       db,
       zFunctionName,
       nArg,
@@ -4124,7 +4047,7 @@
     );
   }
 
-  _dart_sqlite3_create_function _sqlite3_create_function;
+  _dart_sqlite3_create_function? _sqlite3_create_function;
 
   int sqlite3_create_function16(
     ffi.Pointer<sqlite3> db,
@@ -4136,10 +4059,9 @@
     ffi.Pointer<ffi.NativeFunction<_typedefC_36>> xStep,
     ffi.Pointer<ffi.NativeFunction<_typedefC_37>> xFinal,
   ) {
-    _sqlite3_create_function16 ??= _dylib.lookupFunction<
+    return (_sqlite3_create_function16 ??= _dylib.lookupFunction<
         _c_sqlite3_create_function16,
-        _dart_sqlite3_create_function16>('sqlite3_create_function16');
-    return _sqlite3_create_function16(
+        _dart_sqlite3_create_function16>('sqlite3_create_function16'))(
       db,
       zFunctionName,
       nArg,
@@ -4151,7 +4073,7 @@
     );
   }
 
-  _dart_sqlite3_create_function16 _sqlite3_create_function16;
+  _dart_sqlite3_create_function16? _sqlite3_create_function16;
 
   int sqlite3_create_function_v2(
     ffi.Pointer<sqlite3> db,
@@ -4164,10 +4086,9 @@
     ffi.Pointer<ffi.NativeFunction<_typedefC_40>> xFinal,
     ffi.Pointer<ffi.NativeFunction<_typedefC_41>> xDestroy,
   ) {
-    _sqlite3_create_function_v2 ??= _dylib.lookupFunction<
+    return (_sqlite3_create_function_v2 ??= _dylib.lookupFunction<
         _c_sqlite3_create_function_v2,
-        _dart_sqlite3_create_function_v2>('sqlite3_create_function_v2');
-    return _sqlite3_create_function_v2(
+        _dart_sqlite3_create_function_v2>('sqlite3_create_function_v2'))(
       db,
       zFunctionName,
       nArg,
@@ -4180,7 +4101,7 @@
     );
   }
 
-  _dart_sqlite3_create_function_v2 _sqlite3_create_function_v2;
+  _dart_sqlite3_create_function_v2? _sqlite3_create_function_v2;
 
   int sqlite3_create_window_function(
     ffi.Pointer<sqlite3> db,
@@ -4194,10 +4115,10 @@
     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,
-        _dart_sqlite3_create_window_function>('sqlite3_create_window_function');
-    return _sqlite3_create_window_function(
+    return (_sqlite3_create_window_function ??= _dylib.lookupFunction<
+            _c_sqlite3_create_window_function,
+            _dart_sqlite3_create_window_function>(
+        'sqlite3_create_window_function'))(
       db,
       zFunctionName,
       nArg,
@@ -4211,80 +4132,77 @@
     );
   }
 
-  _dart_sqlite3_create_window_function _sqlite3_create_window_function;
+  _dart_sqlite3_create_window_function? _sqlite3_create_window_function;
 
   int sqlite3_aggregate_count(
     ffi.Pointer<sqlite3_context> arg0,
   ) {
-    _sqlite3_aggregate_count ??= _dylib.lookupFunction<
+    return (_sqlite3_aggregate_count ??= _dylib.lookupFunction<
         _c_sqlite3_aggregate_count,
-        _dart_sqlite3_aggregate_count>('sqlite3_aggregate_count');
-    return _sqlite3_aggregate_count(
+        _dart_sqlite3_aggregate_count>('sqlite3_aggregate_count'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_aggregate_count _sqlite3_aggregate_count;
+  _dart_sqlite3_aggregate_count? _sqlite3_aggregate_count;
 
   int sqlite3_expired(
     ffi.Pointer<sqlite3_stmt> arg0,
   ) {
-    _sqlite3_expired ??=
+    return (_sqlite3_expired ??=
         _dylib.lookupFunction<_c_sqlite3_expired, _dart_sqlite3_expired>(
-            'sqlite3_expired');
-    return _sqlite3_expired(
+            'sqlite3_expired'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_expired _sqlite3_expired;
+  _dart_sqlite3_expired? _sqlite3_expired;
 
   int sqlite3_transfer_bindings(
     ffi.Pointer<sqlite3_stmt> arg0,
     ffi.Pointer<sqlite3_stmt> arg1,
   ) {
-    _sqlite3_transfer_bindings ??= _dylib.lookupFunction<
+    return (_sqlite3_transfer_bindings ??= _dylib.lookupFunction<
         _c_sqlite3_transfer_bindings,
-        _dart_sqlite3_transfer_bindings>('sqlite3_transfer_bindings');
-    return _sqlite3_transfer_bindings(
+        _dart_sqlite3_transfer_bindings>('sqlite3_transfer_bindings'))(
       arg0,
       arg1,
     );
   }
 
-  _dart_sqlite3_transfer_bindings _sqlite3_transfer_bindings;
+  _dart_sqlite3_transfer_bindings? _sqlite3_transfer_bindings;
 
   int sqlite3_global_recover() {
-    _sqlite3_global_recover ??= _dylib.lookupFunction<_c_sqlite3_global_recover,
-        _dart_sqlite3_global_recover>('sqlite3_global_recover');
-    return _sqlite3_global_recover();
+    return (_sqlite3_global_recover ??= _dylib.lookupFunction<
+        _c_sqlite3_global_recover,
+        _dart_sqlite3_global_recover>('sqlite3_global_recover'))();
   }
 
-  _dart_sqlite3_global_recover _sqlite3_global_recover;
+  _dart_sqlite3_global_recover? _sqlite3_global_recover;
 
   void sqlite3_thread_cleanup() {
-    _sqlite3_thread_cleanup ??= _dylib.lookupFunction<_c_sqlite3_thread_cleanup,
-        _dart_sqlite3_thread_cleanup>('sqlite3_thread_cleanup');
-    return _sqlite3_thread_cleanup();
+    return (_sqlite3_thread_cleanup ??= _dylib.lookupFunction<
+        _c_sqlite3_thread_cleanup,
+        _dart_sqlite3_thread_cleanup>('sqlite3_thread_cleanup'))();
   }
 
-  _dart_sqlite3_thread_cleanup _sqlite3_thread_cleanup;
+  _dart_sqlite3_thread_cleanup? _sqlite3_thread_cleanup;
 
   int sqlite3_memory_alarm(
     ffi.Pointer<ffi.NativeFunction<_typedefC_47>> arg0,
     ffi.Pointer<ffi.Void> arg1,
     int arg2,
   ) {
-    _sqlite3_memory_alarm ??= _dylib.lookupFunction<_c_sqlite3_memory_alarm,
-        _dart_sqlite3_memory_alarm>('sqlite3_memory_alarm');
-    return _sqlite3_memory_alarm(
+    return (_sqlite3_memory_alarm ??= _dylib.lookupFunction<
+        _c_sqlite3_memory_alarm,
+        _dart_sqlite3_memory_alarm>('sqlite3_memory_alarm'))(
       arg0,
       arg1,
       arg2,
     );
   }
 
-  _dart_sqlite3_memory_alarm _sqlite3_memory_alarm;
+  _dart_sqlite3_memory_alarm? _sqlite3_memory_alarm;
 
   /// CAPI3REF: Obtaining SQL Values
   /// METHOD: sqlite3_value
@@ -4415,189 +4333,184 @@
   ffi.Pointer<ffi.Void> sqlite3_value_blob(
     ffi.Pointer<sqlite3_value> arg0,
   ) {
-    _sqlite3_value_blob ??=
+    return (_sqlite3_value_blob ??=
         _dylib.lookupFunction<_c_sqlite3_value_blob, _dart_sqlite3_value_blob>(
-            'sqlite3_value_blob');
-    return _sqlite3_value_blob(
+            'sqlite3_value_blob'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_value_blob _sqlite3_value_blob;
+  _dart_sqlite3_value_blob? _sqlite3_value_blob;
 
   double sqlite3_value_double(
     ffi.Pointer<sqlite3_value> arg0,
   ) {
-    _sqlite3_value_double ??= _dylib.lookupFunction<_c_sqlite3_value_double,
-        _dart_sqlite3_value_double>('sqlite3_value_double');
-    return _sqlite3_value_double(
+    return (_sqlite3_value_double ??= _dylib.lookupFunction<
+        _c_sqlite3_value_double,
+        _dart_sqlite3_value_double>('sqlite3_value_double'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_value_double _sqlite3_value_double;
+  _dart_sqlite3_value_double? _sqlite3_value_double;
 
   int sqlite3_value_int(
     ffi.Pointer<sqlite3_value> arg0,
   ) {
-    _sqlite3_value_int ??=
+    return (_sqlite3_value_int ??=
         _dylib.lookupFunction<_c_sqlite3_value_int, _dart_sqlite3_value_int>(
-            'sqlite3_value_int');
-    return _sqlite3_value_int(
+            'sqlite3_value_int'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_value_int _sqlite3_value_int;
+  _dart_sqlite3_value_int? _sqlite3_value_int;
 
   int sqlite3_value_int64(
     ffi.Pointer<sqlite3_value> arg0,
   ) {
-    _sqlite3_value_int64 ??= _dylib.lookupFunction<_c_sqlite3_value_int64,
-        _dart_sqlite3_value_int64>('sqlite3_value_int64');
-    return _sqlite3_value_int64(
+    return (_sqlite3_value_int64 ??= _dylib.lookupFunction<
+        _c_sqlite3_value_int64,
+        _dart_sqlite3_value_int64>('sqlite3_value_int64'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_value_int64 _sqlite3_value_int64;
+  _dart_sqlite3_value_int64? _sqlite3_value_int64;
 
   ffi.Pointer<ffi.Void> sqlite3_value_pointer(
     ffi.Pointer<sqlite3_value> arg0,
     ffi.Pointer<ffi.Int8> arg1,
   ) {
-    _sqlite3_value_pointer ??= _dylib.lookupFunction<_c_sqlite3_value_pointer,
-        _dart_sqlite3_value_pointer>('sqlite3_value_pointer');
-    return _sqlite3_value_pointer(
+    return (_sqlite3_value_pointer ??= _dylib.lookupFunction<
+        _c_sqlite3_value_pointer,
+        _dart_sqlite3_value_pointer>('sqlite3_value_pointer'))(
       arg0,
       arg1,
     );
   }
 
-  _dart_sqlite3_value_pointer _sqlite3_value_pointer;
+  _dart_sqlite3_value_pointer? _sqlite3_value_pointer;
 
   ffi.Pointer<ffi.Uint8> sqlite3_value_text(
     ffi.Pointer<sqlite3_value> arg0,
   ) {
-    _sqlite3_value_text ??=
+    return (_sqlite3_value_text ??=
         _dylib.lookupFunction<_c_sqlite3_value_text, _dart_sqlite3_value_text>(
-            'sqlite3_value_text');
-    return _sqlite3_value_text(
+            'sqlite3_value_text'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_value_text _sqlite3_value_text;
+  _dart_sqlite3_value_text? _sqlite3_value_text;
 
   ffi.Pointer<ffi.Void> sqlite3_value_text16(
     ffi.Pointer<sqlite3_value> arg0,
   ) {
-    _sqlite3_value_text16 ??= _dylib.lookupFunction<_c_sqlite3_value_text16,
-        _dart_sqlite3_value_text16>('sqlite3_value_text16');
-    return _sqlite3_value_text16(
+    return (_sqlite3_value_text16 ??= _dylib.lookupFunction<
+        _c_sqlite3_value_text16,
+        _dart_sqlite3_value_text16>('sqlite3_value_text16'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_value_text16 _sqlite3_value_text16;
+  _dart_sqlite3_value_text16? _sqlite3_value_text16;
 
   ffi.Pointer<ffi.Void> sqlite3_value_text16le(
     ffi.Pointer<sqlite3_value> arg0,
   ) {
-    _sqlite3_value_text16le ??= _dylib.lookupFunction<_c_sqlite3_value_text16le,
-        _dart_sqlite3_value_text16le>('sqlite3_value_text16le');
-    return _sqlite3_value_text16le(
+    return (_sqlite3_value_text16le ??= _dylib.lookupFunction<
+        _c_sqlite3_value_text16le,
+        _dart_sqlite3_value_text16le>('sqlite3_value_text16le'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_value_text16le _sqlite3_value_text16le;
+  _dart_sqlite3_value_text16le? _sqlite3_value_text16le;
 
   ffi.Pointer<ffi.Void> sqlite3_value_text16be(
     ffi.Pointer<sqlite3_value> arg0,
   ) {
-    _sqlite3_value_text16be ??= _dylib.lookupFunction<_c_sqlite3_value_text16be,
-        _dart_sqlite3_value_text16be>('sqlite3_value_text16be');
-    return _sqlite3_value_text16be(
+    return (_sqlite3_value_text16be ??= _dylib.lookupFunction<
+        _c_sqlite3_value_text16be,
+        _dart_sqlite3_value_text16be>('sqlite3_value_text16be'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_value_text16be _sqlite3_value_text16be;
+  _dart_sqlite3_value_text16be? _sqlite3_value_text16be;
 
   int sqlite3_value_bytes(
     ffi.Pointer<sqlite3_value> arg0,
   ) {
-    _sqlite3_value_bytes ??= _dylib.lookupFunction<_c_sqlite3_value_bytes,
-        _dart_sqlite3_value_bytes>('sqlite3_value_bytes');
-    return _sqlite3_value_bytes(
+    return (_sqlite3_value_bytes ??= _dylib.lookupFunction<
+        _c_sqlite3_value_bytes,
+        _dart_sqlite3_value_bytes>('sqlite3_value_bytes'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_value_bytes _sqlite3_value_bytes;
+  _dart_sqlite3_value_bytes? _sqlite3_value_bytes;
 
   int sqlite3_value_bytes16(
     ffi.Pointer<sqlite3_value> arg0,
   ) {
-    _sqlite3_value_bytes16 ??= _dylib.lookupFunction<_c_sqlite3_value_bytes16,
-        _dart_sqlite3_value_bytes16>('sqlite3_value_bytes16');
-    return _sqlite3_value_bytes16(
+    return (_sqlite3_value_bytes16 ??= _dylib.lookupFunction<
+        _c_sqlite3_value_bytes16,
+        _dart_sqlite3_value_bytes16>('sqlite3_value_bytes16'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_value_bytes16 _sqlite3_value_bytes16;
+  _dart_sqlite3_value_bytes16? _sqlite3_value_bytes16;
 
   int sqlite3_value_type(
     ffi.Pointer<sqlite3_value> arg0,
   ) {
-    _sqlite3_value_type ??=
+    return (_sqlite3_value_type ??=
         _dylib.lookupFunction<_c_sqlite3_value_type, _dart_sqlite3_value_type>(
-            'sqlite3_value_type');
-    return _sqlite3_value_type(
+            'sqlite3_value_type'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_value_type _sqlite3_value_type;
+  _dart_sqlite3_value_type? _sqlite3_value_type;
 
   int sqlite3_value_numeric_type(
     ffi.Pointer<sqlite3_value> arg0,
   ) {
-    _sqlite3_value_numeric_type ??= _dylib.lookupFunction<
+    return (_sqlite3_value_numeric_type ??= _dylib.lookupFunction<
         _c_sqlite3_value_numeric_type,
-        _dart_sqlite3_value_numeric_type>('sqlite3_value_numeric_type');
-    return _sqlite3_value_numeric_type(
+        _dart_sqlite3_value_numeric_type>('sqlite3_value_numeric_type'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_value_numeric_type _sqlite3_value_numeric_type;
+  _dart_sqlite3_value_numeric_type? _sqlite3_value_numeric_type;
 
   int sqlite3_value_nochange(
     ffi.Pointer<sqlite3_value> arg0,
   ) {
-    _sqlite3_value_nochange ??= _dylib.lookupFunction<_c_sqlite3_value_nochange,
-        _dart_sqlite3_value_nochange>('sqlite3_value_nochange');
-    return _sqlite3_value_nochange(
+    return (_sqlite3_value_nochange ??= _dylib.lookupFunction<
+        _c_sqlite3_value_nochange,
+        _dart_sqlite3_value_nochange>('sqlite3_value_nochange'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_value_nochange _sqlite3_value_nochange;
+  _dart_sqlite3_value_nochange? _sqlite3_value_nochange;
 
   int sqlite3_value_frombind(
     ffi.Pointer<sqlite3_value> arg0,
   ) {
-    _sqlite3_value_frombind ??= _dylib.lookupFunction<_c_sqlite3_value_frombind,
-        _dart_sqlite3_value_frombind>('sqlite3_value_frombind');
-    return _sqlite3_value_frombind(
+    return (_sqlite3_value_frombind ??= _dylib.lookupFunction<
+        _c_sqlite3_value_frombind,
+        _dart_sqlite3_value_frombind>('sqlite3_value_frombind'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_value_frombind _sqlite3_value_frombind;
+  _dart_sqlite3_value_frombind? _sqlite3_value_frombind;
 
   /// CAPI3REF: Finding The Subtype Of SQL Values
   /// METHOD: sqlite3_value
@@ -4610,14 +4523,14 @@
   int sqlite3_value_subtype(
     ffi.Pointer<sqlite3_value> arg0,
   ) {
-    _sqlite3_value_subtype ??= _dylib.lookupFunction<_c_sqlite3_value_subtype,
-        _dart_sqlite3_value_subtype>('sqlite3_value_subtype');
-    return _sqlite3_value_subtype(
+    return (_sqlite3_value_subtype ??= _dylib.lookupFunction<
+        _c_sqlite3_value_subtype,
+        _dart_sqlite3_value_subtype>('sqlite3_value_subtype'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_value_subtype _sqlite3_value_subtype;
+  _dart_sqlite3_value_subtype? _sqlite3_value_subtype;
 
   /// CAPI3REF: Copy And Free SQL Values
   /// METHOD: sqlite3_value
@@ -4634,28 +4547,26 @@
   ffi.Pointer<sqlite3_value> sqlite3_value_dup(
     ffi.Pointer<sqlite3_value> arg0,
   ) {
-    _sqlite3_value_dup ??=
+    return (_sqlite3_value_dup ??=
         _dylib.lookupFunction<_c_sqlite3_value_dup, _dart_sqlite3_value_dup>(
-            'sqlite3_value_dup');
-    return _sqlite3_value_dup(
+            'sqlite3_value_dup'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_value_dup _sqlite3_value_dup;
+  _dart_sqlite3_value_dup? _sqlite3_value_dup;
 
   void sqlite3_value_free(
     ffi.Pointer<sqlite3_value> arg0,
   ) {
-    _sqlite3_value_free ??=
+    return (_sqlite3_value_free ??=
         _dylib.lookupFunction<_c_sqlite3_value_free, _dart_sqlite3_value_free>(
-            'sqlite3_value_free');
-    return _sqlite3_value_free(
+            'sqlite3_value_free'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_value_free _sqlite3_value_free;
+  _dart_sqlite3_value_free? _sqlite3_value_free;
 
   /// CAPI3REF: Obtain Aggregate Function Context
   /// METHOD: sqlite3_context
@@ -4702,16 +4613,15 @@
     ffi.Pointer<sqlite3_context> arg0,
     int nBytes,
   ) {
-    _sqlite3_aggregate_context ??= _dylib.lookupFunction<
+    return (_sqlite3_aggregate_context ??= _dylib.lookupFunction<
         _c_sqlite3_aggregate_context,
-        _dart_sqlite3_aggregate_context>('sqlite3_aggregate_context');
-    return _sqlite3_aggregate_context(
+        _dart_sqlite3_aggregate_context>('sqlite3_aggregate_context'))(
       arg0,
       nBytes,
     );
   }
 
-  _dart_sqlite3_aggregate_context _sqlite3_aggregate_context;
+  _dart_sqlite3_aggregate_context? _sqlite3_aggregate_context;
 
   /// CAPI3REF: User Data For Functions
   /// METHOD: sqlite3_context
@@ -4727,15 +4637,14 @@
   ffi.Pointer<ffi.Void> sqlite3_user_data(
     ffi.Pointer<sqlite3_context> arg0,
   ) {
-    _sqlite3_user_data ??=
+    return (_sqlite3_user_data ??=
         _dylib.lookupFunction<_c_sqlite3_user_data, _dart_sqlite3_user_data>(
-            'sqlite3_user_data');
-    return _sqlite3_user_data(
+            'sqlite3_user_data'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_user_data _sqlite3_user_data;
+  _dart_sqlite3_user_data? _sqlite3_user_data;
 
   /// CAPI3REF: Database Connection For Functions
   /// METHOD: sqlite3_context
@@ -4748,15 +4657,14 @@
   ffi.Pointer<sqlite3> sqlite3_context_db_handle(
     ffi.Pointer<sqlite3_context> arg0,
   ) {
-    _sqlite3_context_db_handle ??= _dylib.lookupFunction<
+    return (_sqlite3_context_db_handle ??= _dylib.lookupFunction<
         _c_sqlite3_context_db_handle,
-        _dart_sqlite3_context_db_handle>('sqlite3_context_db_handle');
-    return _sqlite3_context_db_handle(
+        _dart_sqlite3_context_db_handle>('sqlite3_context_db_handle'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_context_db_handle _sqlite3_context_db_handle;
+  _dart_sqlite3_context_db_handle? _sqlite3_context_db_handle;
 
   /// CAPI3REF: Function Auxiliary Data
   /// METHOD: sqlite3_context
@@ -4817,15 +4725,15 @@
     ffi.Pointer<sqlite3_context> arg0,
     int N,
   ) {
-    _sqlite3_get_auxdata ??= _dylib.lookupFunction<_c_sqlite3_get_auxdata,
-        _dart_sqlite3_get_auxdata>('sqlite3_get_auxdata');
-    return _sqlite3_get_auxdata(
+    return (_sqlite3_get_auxdata ??= _dylib.lookupFunction<
+        _c_sqlite3_get_auxdata,
+        _dart_sqlite3_get_auxdata>('sqlite3_get_auxdata'))(
       arg0,
       N,
     );
   }
 
-  _dart_sqlite3_get_auxdata _sqlite3_get_auxdata;
+  _dart_sqlite3_get_auxdata? _sqlite3_get_auxdata;
 
   void sqlite3_set_auxdata(
     ffi.Pointer<sqlite3_context> arg0,
@@ -4833,9 +4741,9 @@
     ffi.Pointer<ffi.Void> arg2,
     ffi.Pointer<ffi.NativeFunction<_typedefC_48>> arg3,
   ) {
-    _sqlite3_set_auxdata ??= _dylib.lookupFunction<_c_sqlite3_set_auxdata,
-        _dart_sqlite3_set_auxdata>('sqlite3_set_auxdata');
-    return _sqlite3_set_auxdata(
+    return (_sqlite3_set_auxdata ??= _dylib.lookupFunction<
+        _c_sqlite3_set_auxdata,
+        _dart_sqlite3_set_auxdata>('sqlite3_set_auxdata'))(
       arg0,
       N,
       arg2,
@@ -4843,7 +4751,7 @@
     );
   }
 
-  _dart_sqlite3_set_auxdata _sqlite3_set_auxdata;
+  _dart_sqlite3_set_auxdata? _sqlite3_set_auxdata;
 
   /// CAPI3REF: Setting The Result Of An SQL Function
   /// METHOD: sqlite3_context
@@ -4995,9 +4903,9 @@
     int arg2,
     ffi.Pointer<ffi.NativeFunction<_typedefC_49>> arg3,
   ) {
-    _sqlite3_result_blob ??= _dylib.lookupFunction<_c_sqlite3_result_blob,
-        _dart_sqlite3_result_blob>('sqlite3_result_blob');
-    return _sqlite3_result_blob(
+    return (_sqlite3_result_blob ??= _dylib.lookupFunction<
+        _c_sqlite3_result_blob,
+        _dart_sqlite3_result_blob>('sqlite3_result_blob'))(
       arg0,
       arg1,
       arg2,
@@ -5005,7 +4913,7 @@
     );
   }
 
-  _dart_sqlite3_result_blob _sqlite3_result_blob;
+  _dart_sqlite3_result_blob? _sqlite3_result_blob;
 
   void sqlite3_result_blob64(
     ffi.Pointer<sqlite3_context> arg0,
@@ -5013,9 +4921,9 @@
     int arg2,
     ffi.Pointer<ffi.NativeFunction<_typedefC_50>> arg3,
   ) {
-    _sqlite3_result_blob64 ??= _dylib.lookupFunction<_c_sqlite3_result_blob64,
-        _dart_sqlite3_result_blob64>('sqlite3_result_blob64');
-    return _sqlite3_result_blob64(
+    return (_sqlite3_result_blob64 ??= _dylib.lookupFunction<
+        _c_sqlite3_result_blob64,
+        _dart_sqlite3_result_blob64>('sqlite3_result_blob64'))(
       arg0,
       arg1,
       arg2,
@@ -5023,135 +4931,131 @@
     );
   }
 
-  _dart_sqlite3_result_blob64 _sqlite3_result_blob64;
+  _dart_sqlite3_result_blob64? _sqlite3_result_blob64;
 
   void sqlite3_result_double(
     ffi.Pointer<sqlite3_context> arg0,
     double arg1,
   ) {
-    _sqlite3_result_double ??= _dylib.lookupFunction<_c_sqlite3_result_double,
-        _dart_sqlite3_result_double>('sqlite3_result_double');
-    return _sqlite3_result_double(
+    return (_sqlite3_result_double ??= _dylib.lookupFunction<
+        _c_sqlite3_result_double,
+        _dart_sqlite3_result_double>('sqlite3_result_double'))(
       arg0,
       arg1,
     );
   }
 
-  _dart_sqlite3_result_double _sqlite3_result_double;
+  _dart_sqlite3_result_double? _sqlite3_result_double;
 
   void sqlite3_result_error(
     ffi.Pointer<sqlite3_context> arg0,
     ffi.Pointer<ffi.Int8> arg1,
     int arg2,
   ) {
-    _sqlite3_result_error ??= _dylib.lookupFunction<_c_sqlite3_result_error,
-        _dart_sqlite3_result_error>('sqlite3_result_error');
-    return _sqlite3_result_error(
+    return (_sqlite3_result_error ??= _dylib.lookupFunction<
+        _c_sqlite3_result_error,
+        _dart_sqlite3_result_error>('sqlite3_result_error'))(
       arg0,
       arg1,
       arg2,
     );
   }
 
-  _dart_sqlite3_result_error _sqlite3_result_error;
+  _dart_sqlite3_result_error? _sqlite3_result_error;
 
   void sqlite3_result_error16(
     ffi.Pointer<sqlite3_context> arg0,
     ffi.Pointer<ffi.Void> arg1,
     int arg2,
   ) {
-    _sqlite3_result_error16 ??= _dylib.lookupFunction<_c_sqlite3_result_error16,
-        _dart_sqlite3_result_error16>('sqlite3_result_error16');
-    return _sqlite3_result_error16(
+    return (_sqlite3_result_error16 ??= _dylib.lookupFunction<
+        _c_sqlite3_result_error16,
+        _dart_sqlite3_result_error16>('sqlite3_result_error16'))(
       arg0,
       arg1,
       arg2,
     );
   }
 
-  _dart_sqlite3_result_error16 _sqlite3_result_error16;
+  _dart_sqlite3_result_error16? _sqlite3_result_error16;
 
   void sqlite3_result_error_toobig(
     ffi.Pointer<sqlite3_context> arg0,
   ) {
-    _sqlite3_result_error_toobig ??= _dylib.lookupFunction<
+    return (_sqlite3_result_error_toobig ??= _dylib.lookupFunction<
         _c_sqlite3_result_error_toobig,
-        _dart_sqlite3_result_error_toobig>('sqlite3_result_error_toobig');
-    return _sqlite3_result_error_toobig(
+        _dart_sqlite3_result_error_toobig>('sqlite3_result_error_toobig'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_result_error_toobig _sqlite3_result_error_toobig;
+  _dart_sqlite3_result_error_toobig? _sqlite3_result_error_toobig;
 
   void sqlite3_result_error_nomem(
     ffi.Pointer<sqlite3_context> arg0,
   ) {
-    _sqlite3_result_error_nomem ??= _dylib.lookupFunction<
+    return (_sqlite3_result_error_nomem ??= _dylib.lookupFunction<
         _c_sqlite3_result_error_nomem,
-        _dart_sqlite3_result_error_nomem>('sqlite3_result_error_nomem');
-    return _sqlite3_result_error_nomem(
+        _dart_sqlite3_result_error_nomem>('sqlite3_result_error_nomem'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_result_error_nomem _sqlite3_result_error_nomem;
+  _dart_sqlite3_result_error_nomem? _sqlite3_result_error_nomem;
 
   void sqlite3_result_error_code(
     ffi.Pointer<sqlite3_context> arg0,
     int arg1,
   ) {
-    _sqlite3_result_error_code ??= _dylib.lookupFunction<
+    return (_sqlite3_result_error_code ??= _dylib.lookupFunction<
         _c_sqlite3_result_error_code,
-        _dart_sqlite3_result_error_code>('sqlite3_result_error_code');
-    return _sqlite3_result_error_code(
+        _dart_sqlite3_result_error_code>('sqlite3_result_error_code'))(
       arg0,
       arg1,
     );
   }
 
-  _dart_sqlite3_result_error_code _sqlite3_result_error_code;
+  _dart_sqlite3_result_error_code? _sqlite3_result_error_code;
 
   void sqlite3_result_int(
     ffi.Pointer<sqlite3_context> arg0,
     int arg1,
   ) {
-    _sqlite3_result_int ??=
+    return (_sqlite3_result_int ??=
         _dylib.lookupFunction<_c_sqlite3_result_int, _dart_sqlite3_result_int>(
-            'sqlite3_result_int');
-    return _sqlite3_result_int(
+            'sqlite3_result_int'))(
       arg0,
       arg1,
     );
   }
 
-  _dart_sqlite3_result_int _sqlite3_result_int;
+  _dart_sqlite3_result_int? _sqlite3_result_int;
 
   void sqlite3_result_int64(
     ffi.Pointer<sqlite3_context> arg0,
     int arg1,
   ) {
-    _sqlite3_result_int64 ??= _dylib.lookupFunction<_c_sqlite3_result_int64,
-        _dart_sqlite3_result_int64>('sqlite3_result_int64');
-    return _sqlite3_result_int64(
+    return (_sqlite3_result_int64 ??= _dylib.lookupFunction<
+        _c_sqlite3_result_int64,
+        _dart_sqlite3_result_int64>('sqlite3_result_int64'))(
       arg0,
       arg1,
     );
   }
 
-  _dart_sqlite3_result_int64 _sqlite3_result_int64;
+  _dart_sqlite3_result_int64? _sqlite3_result_int64;
 
   void sqlite3_result_null(
     ffi.Pointer<sqlite3_context> arg0,
   ) {
-    _sqlite3_result_null ??= _dylib.lookupFunction<_c_sqlite3_result_null,
-        _dart_sqlite3_result_null>('sqlite3_result_null');
-    return _sqlite3_result_null(
+    return (_sqlite3_result_null ??= _dylib.lookupFunction<
+        _c_sqlite3_result_null,
+        _dart_sqlite3_result_null>('sqlite3_result_null'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_result_null _sqlite3_result_null;
+  _dart_sqlite3_result_null? _sqlite3_result_null;
 
   void sqlite3_result_text(
     ffi.Pointer<sqlite3_context> arg0,
@@ -5159,9 +5063,9 @@
     int arg2,
     ffi.Pointer<ffi.NativeFunction<_typedefC_51>> arg3,
   ) {
-    _sqlite3_result_text ??= _dylib.lookupFunction<_c_sqlite3_result_text,
-        _dart_sqlite3_result_text>('sqlite3_result_text');
-    return _sqlite3_result_text(
+    return (_sqlite3_result_text ??= _dylib.lookupFunction<
+        _c_sqlite3_result_text,
+        _dart_sqlite3_result_text>('sqlite3_result_text'))(
       arg0,
       arg1,
       arg2,
@@ -5169,7 +5073,7 @@
     );
   }
 
-  _dart_sqlite3_result_text _sqlite3_result_text;
+  _dart_sqlite3_result_text? _sqlite3_result_text;
 
   void sqlite3_result_text64(
     ffi.Pointer<sqlite3_context> arg0,
@@ -5178,9 +5082,9 @@
     ffi.Pointer<ffi.NativeFunction<_typedefC_52>> arg3,
     int encoding,
   ) {
-    _sqlite3_result_text64 ??= _dylib.lookupFunction<_c_sqlite3_result_text64,
-        _dart_sqlite3_result_text64>('sqlite3_result_text64');
-    return _sqlite3_result_text64(
+    return (_sqlite3_result_text64 ??= _dylib.lookupFunction<
+        _c_sqlite3_result_text64,
+        _dart_sqlite3_result_text64>('sqlite3_result_text64'))(
       arg0,
       arg1,
       arg2,
@@ -5189,7 +5093,7 @@
     );
   }
 
-  _dart_sqlite3_result_text64 _sqlite3_result_text64;
+  _dart_sqlite3_result_text64? _sqlite3_result_text64;
 
   void sqlite3_result_text16(
     ffi.Pointer<sqlite3_context> arg0,
@@ -5197,9 +5101,9 @@
     int arg2,
     ffi.Pointer<ffi.NativeFunction<_typedefC_53>> arg3,
   ) {
-    _sqlite3_result_text16 ??= _dylib.lookupFunction<_c_sqlite3_result_text16,
-        _dart_sqlite3_result_text16>('sqlite3_result_text16');
-    return _sqlite3_result_text16(
+    return (_sqlite3_result_text16 ??= _dylib.lookupFunction<
+        _c_sqlite3_result_text16,
+        _dart_sqlite3_result_text16>('sqlite3_result_text16'))(
       arg0,
       arg1,
       arg2,
@@ -5207,7 +5111,7 @@
     );
   }
 
-  _dart_sqlite3_result_text16 _sqlite3_result_text16;
+  _dart_sqlite3_result_text16? _sqlite3_result_text16;
 
   void sqlite3_result_text16le(
     ffi.Pointer<sqlite3_context> arg0,
@@ -5215,10 +5119,9 @@
     int arg2,
     ffi.Pointer<ffi.NativeFunction<_typedefC_54>> arg3,
   ) {
-    _sqlite3_result_text16le ??= _dylib.lookupFunction<
+    return (_sqlite3_result_text16le ??= _dylib.lookupFunction<
         _c_sqlite3_result_text16le,
-        _dart_sqlite3_result_text16le>('sqlite3_result_text16le');
-    return _sqlite3_result_text16le(
+        _dart_sqlite3_result_text16le>('sqlite3_result_text16le'))(
       arg0,
       arg1,
       arg2,
@@ -5226,7 +5129,7 @@
     );
   }
 
-  _dart_sqlite3_result_text16le _sqlite3_result_text16le;
+  _dart_sqlite3_result_text16le? _sqlite3_result_text16le;
 
   void sqlite3_result_text16be(
     ffi.Pointer<sqlite3_context> arg0,
@@ -5234,10 +5137,9 @@
     int arg2,
     ffi.Pointer<ffi.NativeFunction<_typedefC_55>> arg3,
   ) {
-    _sqlite3_result_text16be ??= _dylib.lookupFunction<
+    return (_sqlite3_result_text16be ??= _dylib.lookupFunction<
         _c_sqlite3_result_text16be,
-        _dart_sqlite3_result_text16be>('sqlite3_result_text16be');
-    return _sqlite3_result_text16be(
+        _dart_sqlite3_result_text16be>('sqlite3_result_text16be'))(
       arg0,
       arg1,
       arg2,
@@ -5245,21 +5147,21 @@
     );
   }
 
-  _dart_sqlite3_result_text16be _sqlite3_result_text16be;
+  _dart_sqlite3_result_text16be? _sqlite3_result_text16be;
 
   void sqlite3_result_value(
     ffi.Pointer<sqlite3_context> arg0,
     ffi.Pointer<sqlite3_value> arg1,
   ) {
-    _sqlite3_result_value ??= _dylib.lookupFunction<_c_sqlite3_result_value,
-        _dart_sqlite3_result_value>('sqlite3_result_value');
-    return _sqlite3_result_value(
+    return (_sqlite3_result_value ??= _dylib.lookupFunction<
+        _c_sqlite3_result_value,
+        _dart_sqlite3_result_value>('sqlite3_result_value'))(
       arg0,
       arg1,
     );
   }
 
-  _dart_sqlite3_result_value _sqlite3_result_value;
+  _dart_sqlite3_result_value? _sqlite3_result_value;
 
   void sqlite3_result_pointer(
     ffi.Pointer<sqlite3_context> arg0,
@@ -5267,9 +5169,9 @@
     ffi.Pointer<ffi.Int8> arg2,
     ffi.Pointer<ffi.NativeFunction<_typedefC_56>> arg3,
   ) {
-    _sqlite3_result_pointer ??= _dylib.lookupFunction<_c_sqlite3_result_pointer,
-        _dart_sqlite3_result_pointer>('sqlite3_result_pointer');
-    return _sqlite3_result_pointer(
+    return (_sqlite3_result_pointer ??= _dylib.lookupFunction<
+        _c_sqlite3_result_pointer,
+        _dart_sqlite3_result_pointer>('sqlite3_result_pointer'))(
       arg0,
       arg1,
       arg2,
@@ -5277,37 +5179,35 @@
     );
   }
 
-  _dart_sqlite3_result_pointer _sqlite3_result_pointer;
+  _dart_sqlite3_result_pointer? _sqlite3_result_pointer;
 
   void sqlite3_result_zeroblob(
     ffi.Pointer<sqlite3_context> arg0,
     int n,
   ) {
-    _sqlite3_result_zeroblob ??= _dylib.lookupFunction<
+    return (_sqlite3_result_zeroblob ??= _dylib.lookupFunction<
         _c_sqlite3_result_zeroblob,
-        _dart_sqlite3_result_zeroblob>('sqlite3_result_zeroblob');
-    return _sqlite3_result_zeroblob(
+        _dart_sqlite3_result_zeroblob>('sqlite3_result_zeroblob'))(
       arg0,
       n,
     );
   }
 
-  _dart_sqlite3_result_zeroblob _sqlite3_result_zeroblob;
+  _dart_sqlite3_result_zeroblob? _sqlite3_result_zeroblob;
 
   int sqlite3_result_zeroblob64(
     ffi.Pointer<sqlite3_context> arg0,
     int n,
   ) {
-    _sqlite3_result_zeroblob64 ??= _dylib.lookupFunction<
+    return (_sqlite3_result_zeroblob64 ??= _dylib.lookupFunction<
         _c_sqlite3_result_zeroblob64,
-        _dart_sqlite3_result_zeroblob64>('sqlite3_result_zeroblob64');
-    return _sqlite3_result_zeroblob64(
+        _dart_sqlite3_result_zeroblob64>('sqlite3_result_zeroblob64'))(
       arg0,
       n,
     );
   }
 
-  _dart_sqlite3_result_zeroblob64 _sqlite3_result_zeroblob64;
+  _dart_sqlite3_result_zeroblob64? _sqlite3_result_zeroblob64;
 
   /// CAPI3REF: Setting The Subtype Of An SQL Function
   /// METHOD: sqlite3_context
@@ -5323,15 +5223,15 @@
     ffi.Pointer<sqlite3_context> arg0,
     int arg1,
   ) {
-    _sqlite3_result_subtype ??= _dylib.lookupFunction<_c_sqlite3_result_subtype,
-        _dart_sqlite3_result_subtype>('sqlite3_result_subtype');
-    return _sqlite3_result_subtype(
+    return (_sqlite3_result_subtype ??= _dylib.lookupFunction<
+        _c_sqlite3_result_subtype,
+        _dart_sqlite3_result_subtype>('sqlite3_result_subtype'))(
       arg0,
       arg1,
     );
   }
 
-  _dart_sqlite3_result_subtype _sqlite3_result_subtype;
+  _dart_sqlite3_result_subtype? _sqlite3_result_subtype;
 
   /// CAPI3REF: Define New Collating Sequences
   /// METHOD: sqlite3
@@ -5419,10 +5319,9 @@
     ffi.Pointer<ffi.Void> pArg,
     ffi.Pointer<ffi.NativeFunction<_typedefC_57>> xCompare,
   ) {
-    _sqlite3_create_collation ??= _dylib.lookupFunction<
+    return (_sqlite3_create_collation ??= _dylib.lookupFunction<
         _c_sqlite3_create_collation,
-        _dart_sqlite3_create_collation>('sqlite3_create_collation');
-    return _sqlite3_create_collation(
+        _dart_sqlite3_create_collation>('sqlite3_create_collation'))(
       arg0,
       zName,
       eTextRep,
@@ -5431,7 +5330,7 @@
     );
   }
 
-  _dart_sqlite3_create_collation _sqlite3_create_collation;
+  _dart_sqlite3_create_collation? _sqlite3_create_collation;
 
   int sqlite3_create_collation_v2(
     ffi.Pointer<sqlite3> arg0,
@@ -5441,10 +5340,9 @@
     ffi.Pointer<ffi.NativeFunction<_typedefC_58>> xCompare,
     ffi.Pointer<ffi.NativeFunction<_typedefC_59>> xDestroy,
   ) {
-    _sqlite3_create_collation_v2 ??= _dylib.lookupFunction<
+    return (_sqlite3_create_collation_v2 ??= _dylib.lookupFunction<
         _c_sqlite3_create_collation_v2,
-        _dart_sqlite3_create_collation_v2>('sqlite3_create_collation_v2');
-    return _sqlite3_create_collation_v2(
+        _dart_sqlite3_create_collation_v2>('sqlite3_create_collation_v2'))(
       arg0,
       zName,
       eTextRep,
@@ -5454,7 +5352,7 @@
     );
   }
 
-  _dart_sqlite3_create_collation_v2 _sqlite3_create_collation_v2;
+  _dart_sqlite3_create_collation_v2? _sqlite3_create_collation_v2;
 
   int sqlite3_create_collation16(
     ffi.Pointer<sqlite3> arg0,
@@ -5463,10 +5361,9 @@
     ffi.Pointer<ffi.Void> pArg,
     ffi.Pointer<ffi.NativeFunction<_typedefC_60>> xCompare,
   ) {
-    _sqlite3_create_collation16 ??= _dylib.lookupFunction<
+    return (_sqlite3_create_collation16 ??= _dylib.lookupFunction<
         _c_sqlite3_create_collation16,
-        _dart_sqlite3_create_collation16>('sqlite3_create_collation16');
-    return _sqlite3_create_collation16(
+        _dart_sqlite3_create_collation16>('sqlite3_create_collation16'))(
       arg0,
       zName,
       eTextRep,
@@ -5475,7 +5372,7 @@
     );
   }
 
-  _dart_sqlite3_create_collation16 _sqlite3_create_collation16;
+  _dart_sqlite3_create_collation16? _sqlite3_create_collation16;
 
   /// CAPI3REF: Collation Needed Callbacks
   /// METHOD: sqlite3
@@ -5507,34 +5404,32 @@
     ffi.Pointer<ffi.Void> arg1,
     ffi.Pointer<ffi.NativeFunction<_typedefC_61>> arg2,
   ) {
-    _sqlite3_collation_needed ??= _dylib.lookupFunction<
+    return (_sqlite3_collation_needed ??= _dylib.lookupFunction<
         _c_sqlite3_collation_needed,
-        _dart_sqlite3_collation_needed>('sqlite3_collation_needed');
-    return _sqlite3_collation_needed(
+        _dart_sqlite3_collation_needed>('sqlite3_collation_needed'))(
       arg0,
       arg1,
       arg2,
     );
   }
 
-  _dart_sqlite3_collation_needed _sqlite3_collation_needed;
+  _dart_sqlite3_collation_needed? _sqlite3_collation_needed;
 
   int sqlite3_collation_needed16(
     ffi.Pointer<sqlite3> arg0,
     ffi.Pointer<ffi.Void> arg1,
     ffi.Pointer<ffi.NativeFunction<_typedefC_62>> arg2,
   ) {
-    _sqlite3_collation_needed16 ??= _dylib.lookupFunction<
+    return (_sqlite3_collation_needed16 ??= _dylib.lookupFunction<
         _c_sqlite3_collation_needed16,
-        _dart_sqlite3_collation_needed16>('sqlite3_collation_needed16');
-    return _sqlite3_collation_needed16(
+        _dart_sqlite3_collation_needed16>('sqlite3_collation_needed16'))(
       arg0,
       arg1,
       arg2,
     );
   }
 
-  _dart_sqlite3_collation_needed16 _sqlite3_collation_needed16;
+  _dart_sqlite3_collation_needed16? _sqlite3_collation_needed16;
 
   /// CAPI3REF: Suspend Execution For A Short Time
   ///
@@ -5554,14 +5449,14 @@
   int sqlite3_sleep(
     int arg0,
   ) {
-    _sqlite3_sleep ??= _dylib
-        .lookupFunction<_c_sqlite3_sleep, _dart_sqlite3_sleep>('sqlite3_sleep');
-    return _sqlite3_sleep(
+    return (_sqlite3_sleep ??=
+        _dylib.lookupFunction<_c_sqlite3_sleep, _dart_sqlite3_sleep>(
+            'sqlite3_sleep'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_sleep _sqlite3_sleep;
+  _dart_sqlite3_sleep? _sqlite3_sleep;
 
   /// CAPI3REF: Win32 Specific Interface
   ///
@@ -5584,46 +5479,43 @@
     int type,
     ffi.Pointer<ffi.Void> zValue,
   ) {
-    _sqlite3_win32_set_directory ??= _dylib.lookupFunction<
+    return (_sqlite3_win32_set_directory ??= _dylib.lookupFunction<
         _c_sqlite3_win32_set_directory,
-        _dart_sqlite3_win32_set_directory>('sqlite3_win32_set_directory');
-    return _sqlite3_win32_set_directory(
+        _dart_sqlite3_win32_set_directory>('sqlite3_win32_set_directory'))(
       type,
       zValue,
     );
   }
 
-  _dart_sqlite3_win32_set_directory _sqlite3_win32_set_directory;
+  _dart_sqlite3_win32_set_directory? _sqlite3_win32_set_directory;
 
   int sqlite3_win32_set_directory8(
     int type,
     ffi.Pointer<ffi.Int8> zValue,
   ) {
-    _sqlite3_win32_set_directory8 ??= _dylib.lookupFunction<
+    return (_sqlite3_win32_set_directory8 ??= _dylib.lookupFunction<
         _c_sqlite3_win32_set_directory8,
-        _dart_sqlite3_win32_set_directory8>('sqlite3_win32_set_directory8');
-    return _sqlite3_win32_set_directory8(
+        _dart_sqlite3_win32_set_directory8>('sqlite3_win32_set_directory8'))(
       type,
       zValue,
     );
   }
 
-  _dart_sqlite3_win32_set_directory8 _sqlite3_win32_set_directory8;
+  _dart_sqlite3_win32_set_directory8? _sqlite3_win32_set_directory8;
 
   int sqlite3_win32_set_directory16(
     int type,
     ffi.Pointer<ffi.Void> zValue,
   ) {
-    _sqlite3_win32_set_directory16 ??= _dylib.lookupFunction<
+    return (_sqlite3_win32_set_directory16 ??= _dylib.lookupFunction<
         _c_sqlite3_win32_set_directory16,
-        _dart_sqlite3_win32_set_directory16>('sqlite3_win32_set_directory16');
-    return _sqlite3_win32_set_directory16(
+        _dart_sqlite3_win32_set_directory16>('sqlite3_win32_set_directory16'))(
       type,
       zValue,
     );
   }
 
-  _dart_sqlite3_win32_set_directory16 _sqlite3_win32_set_directory16;
+  _dart_sqlite3_win32_set_directory16? _sqlite3_win32_set_directory16;
 
   /// CAPI3REF: Test For Auto-Commit Mode
   /// KEYWORDS: {autocommit mode}
@@ -5648,14 +5540,14 @@
   int sqlite3_get_autocommit(
     ffi.Pointer<sqlite3> arg0,
   ) {
-    _sqlite3_get_autocommit ??= _dylib.lookupFunction<_c_sqlite3_get_autocommit,
-        _dart_sqlite3_get_autocommit>('sqlite3_get_autocommit');
-    return _sqlite3_get_autocommit(
+    return (_sqlite3_get_autocommit ??= _dylib.lookupFunction<
+        _c_sqlite3_get_autocommit,
+        _dart_sqlite3_get_autocommit>('sqlite3_get_autocommit'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_get_autocommit _sqlite3_get_autocommit;
+  _dart_sqlite3_get_autocommit? _sqlite3_get_autocommit;
 
   /// CAPI3REF: Find The Database Handle Of A Prepared Statement
   /// METHOD: sqlite3_stmt
@@ -5669,15 +5561,14 @@
   ffi.Pointer<sqlite3> sqlite3_db_handle(
     ffi.Pointer<sqlite3_stmt> arg0,
   ) {
-    _sqlite3_db_handle ??=
+    return (_sqlite3_db_handle ??=
         _dylib.lookupFunction<_c_sqlite3_db_handle, _dart_sqlite3_db_handle>(
-            'sqlite3_db_handle');
-    return _sqlite3_db_handle(
+            'sqlite3_db_handle'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_db_handle _sqlite3_db_handle;
+  _dart_sqlite3_db_handle? _sqlite3_db_handle;
 
   /// CAPI3REF: Return The Filename For A Database Connection
   /// METHOD: sqlite3
@@ -5711,15 +5602,15 @@
     ffi.Pointer<sqlite3> db,
     ffi.Pointer<ffi.Int8> zDbName,
   ) {
-    _sqlite3_db_filename ??= _dylib.lookupFunction<_c_sqlite3_db_filename,
-        _dart_sqlite3_db_filename>('sqlite3_db_filename');
-    return _sqlite3_db_filename(
+    return (_sqlite3_db_filename ??= _dylib.lookupFunction<
+        _c_sqlite3_db_filename,
+        _dart_sqlite3_db_filename>('sqlite3_db_filename'))(
       db,
       zDbName,
     );
   }
 
-  _dart_sqlite3_db_filename _sqlite3_db_filename;
+  _dart_sqlite3_db_filename? _sqlite3_db_filename;
 
   /// CAPI3REF: Determine if a database is read-only
   /// METHOD: sqlite3
@@ -5731,15 +5622,15 @@
     ffi.Pointer<sqlite3> db,
     ffi.Pointer<ffi.Int8> zDbName,
   ) {
-    _sqlite3_db_readonly ??= _dylib.lookupFunction<_c_sqlite3_db_readonly,
-        _dart_sqlite3_db_readonly>('sqlite3_db_readonly');
-    return _sqlite3_db_readonly(
+    return (_sqlite3_db_readonly ??= _dylib.lookupFunction<
+        _c_sqlite3_db_readonly,
+        _dart_sqlite3_db_readonly>('sqlite3_db_readonly'))(
       db,
       zDbName,
     );
   }
 
-  _dart_sqlite3_db_readonly _sqlite3_db_readonly;
+  _dart_sqlite3_db_readonly? _sqlite3_db_readonly;
 
   /// CAPI3REF: Find the next prepared statement
   /// METHOD: sqlite3
@@ -5757,16 +5648,15 @@
     ffi.Pointer<sqlite3> pDb,
     ffi.Pointer<sqlite3_stmt> pStmt,
   ) {
-    _sqlite3_next_stmt ??=
+    return (_sqlite3_next_stmt ??=
         _dylib.lookupFunction<_c_sqlite3_next_stmt, _dart_sqlite3_next_stmt>(
-            'sqlite3_next_stmt');
-    return _sqlite3_next_stmt(
+            'sqlite3_next_stmt'))(
       pDb,
       pStmt,
     );
   }
 
-  _dart_sqlite3_next_stmt _sqlite3_next_stmt;
+  _dart_sqlite3_next_stmt? _sqlite3_next_stmt;
 
   /// CAPI3REF: Commit And Rollback Notification Callbacks
   /// METHOD: sqlite3
@@ -5818,32 +5708,32 @@
     ffi.Pointer<ffi.NativeFunction<_typedefC_63>> arg1,
     ffi.Pointer<ffi.Void> arg2,
   ) {
-    _sqlite3_commit_hook ??= _dylib.lookupFunction<_c_sqlite3_commit_hook,
-        _dart_sqlite3_commit_hook>('sqlite3_commit_hook');
-    return _sqlite3_commit_hook(
+    return (_sqlite3_commit_hook ??= _dylib.lookupFunction<
+        _c_sqlite3_commit_hook,
+        _dart_sqlite3_commit_hook>('sqlite3_commit_hook'))(
       arg0,
       arg1,
       arg2,
     );
   }
 
-  _dart_sqlite3_commit_hook _sqlite3_commit_hook;
+  _dart_sqlite3_commit_hook? _sqlite3_commit_hook;
 
   ffi.Pointer<ffi.Void> sqlite3_rollback_hook(
     ffi.Pointer<sqlite3> arg0,
     ffi.Pointer<ffi.NativeFunction<_typedefC_64>> arg1,
     ffi.Pointer<ffi.Void> arg2,
   ) {
-    _sqlite3_rollback_hook ??= _dylib.lookupFunction<_c_sqlite3_rollback_hook,
-        _dart_sqlite3_rollback_hook>('sqlite3_rollback_hook');
-    return _sqlite3_rollback_hook(
+    return (_sqlite3_rollback_hook ??= _dylib.lookupFunction<
+        _c_sqlite3_rollback_hook,
+        _dart_sqlite3_rollback_hook>('sqlite3_rollback_hook'))(
       arg0,
       arg1,
       arg2,
     );
   }
 
-  _dart_sqlite3_rollback_hook _sqlite3_rollback_hook;
+  _dart_sqlite3_rollback_hook? _sqlite3_rollback_hook;
 
   /// CAPI3REF: Data Change Notification Callbacks
   /// METHOD: sqlite3
@@ -5897,16 +5787,16 @@
     ffi.Pointer<ffi.NativeFunction<_typedefC_65>> arg1,
     ffi.Pointer<ffi.Void> arg2,
   ) {
-    _sqlite3_update_hook ??= _dylib.lookupFunction<_c_sqlite3_update_hook,
-        _dart_sqlite3_update_hook>('sqlite3_update_hook');
-    return _sqlite3_update_hook(
+    return (_sqlite3_update_hook ??= _dylib.lookupFunction<
+        _c_sqlite3_update_hook,
+        _dart_sqlite3_update_hook>('sqlite3_update_hook'))(
       arg0,
       arg1,
       arg2,
     );
   }
 
-  _dart_sqlite3_update_hook _sqlite3_update_hook;
+  _dart_sqlite3_update_hook? _sqlite3_update_hook;
 
   /// CAPI3REF: Enable Or Disable Shared Pager Cache
   ///
@@ -5948,15 +5838,14 @@
   int sqlite3_enable_shared_cache(
     int arg0,
   ) {
-    _sqlite3_enable_shared_cache ??= _dylib.lookupFunction<
+    return (_sqlite3_enable_shared_cache ??= _dylib.lookupFunction<
         _c_sqlite3_enable_shared_cache,
-        _dart_sqlite3_enable_shared_cache>('sqlite3_enable_shared_cache');
-    return _sqlite3_enable_shared_cache(
+        _dart_sqlite3_enable_shared_cache>('sqlite3_enable_shared_cache'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_enable_shared_cache _sqlite3_enable_shared_cache;
+  _dart_sqlite3_enable_shared_cache? _sqlite3_enable_shared_cache;
 
   /// CAPI3REF: Attempt To Free Heap Memory
   ///
@@ -5973,14 +5862,14 @@
   int sqlite3_release_memory(
     int arg0,
   ) {
-    _sqlite3_release_memory ??= _dylib.lookupFunction<_c_sqlite3_release_memory,
-        _dart_sqlite3_release_memory>('sqlite3_release_memory');
-    return _sqlite3_release_memory(
+    return (_sqlite3_release_memory ??= _dylib.lookupFunction<
+        _c_sqlite3_release_memory,
+        _dart_sqlite3_release_memory>('sqlite3_release_memory'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_release_memory _sqlite3_release_memory;
+  _dart_sqlite3_release_memory? _sqlite3_release_memory;
 
   /// CAPI3REF: Free Memory Used By A Database Connection
   /// METHOD: sqlite3
@@ -5995,15 +5884,14 @@
   int sqlite3_db_release_memory(
     ffi.Pointer<sqlite3> arg0,
   ) {
-    _sqlite3_db_release_memory ??= _dylib.lookupFunction<
+    return (_sqlite3_db_release_memory ??= _dylib.lookupFunction<
         _c_sqlite3_db_release_memory,
-        _dart_sqlite3_db_release_memory>('sqlite3_db_release_memory');
-    return _sqlite3_db_release_memory(
+        _dart_sqlite3_db_release_memory>('sqlite3_db_release_memory'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_db_release_memory _sqlite3_db_release_memory;
+  _dart_sqlite3_db_release_memory? _sqlite3_db_release_memory;
 
   /// CAPI3REF: Impose A Limit On Heap Size
   ///
@@ -6070,28 +5958,26 @@
   int sqlite3_soft_heap_limit64(
     int N,
   ) {
-    _sqlite3_soft_heap_limit64 ??= _dylib.lookupFunction<
+    return (_sqlite3_soft_heap_limit64 ??= _dylib.lookupFunction<
         _c_sqlite3_soft_heap_limit64,
-        _dart_sqlite3_soft_heap_limit64>('sqlite3_soft_heap_limit64');
-    return _sqlite3_soft_heap_limit64(
+        _dart_sqlite3_soft_heap_limit64>('sqlite3_soft_heap_limit64'))(
       N,
     );
   }
 
-  _dart_sqlite3_soft_heap_limit64 _sqlite3_soft_heap_limit64;
+  _dart_sqlite3_soft_heap_limit64? _sqlite3_soft_heap_limit64;
 
   int sqlite3_hard_heap_limit64(
     int N,
   ) {
-    _sqlite3_hard_heap_limit64 ??= _dylib.lookupFunction<
+    return (_sqlite3_hard_heap_limit64 ??= _dylib.lookupFunction<
         _c_sqlite3_hard_heap_limit64,
-        _dart_sqlite3_hard_heap_limit64>('sqlite3_hard_heap_limit64');
-    return _sqlite3_hard_heap_limit64(
+        _dart_sqlite3_hard_heap_limit64>('sqlite3_hard_heap_limit64'))(
       N,
     );
   }
 
-  _dart_sqlite3_hard_heap_limit64 _sqlite3_hard_heap_limit64;
+  _dart_sqlite3_hard_heap_limit64? _sqlite3_hard_heap_limit64;
 
   /// CAPI3REF: Deprecated Soft Heap Limit Interface
   /// DEPRECATED
@@ -6103,15 +5989,14 @@
   void sqlite3_soft_heap_limit(
     int N,
   ) {
-    _sqlite3_soft_heap_limit ??= _dylib.lookupFunction<
+    return (_sqlite3_soft_heap_limit ??= _dylib.lookupFunction<
         _c_sqlite3_soft_heap_limit,
-        _dart_sqlite3_soft_heap_limit>('sqlite3_soft_heap_limit');
-    return _sqlite3_soft_heap_limit(
+        _dart_sqlite3_soft_heap_limit>('sqlite3_soft_heap_limit'))(
       N,
     );
   }
 
-  _dart_sqlite3_soft_heap_limit _sqlite3_soft_heap_limit;
+  _dart_sqlite3_soft_heap_limit? _sqlite3_soft_heap_limit;
 
   /// CAPI3REF: Extract Metadata About A Column Of A Table
   /// METHOD: sqlite3
@@ -6191,10 +6076,9 @@
     ffi.Pointer<ffi.Int32> pPrimaryKey,
     ffi.Pointer<ffi.Int32> pAutoinc,
   ) {
-    _sqlite3_table_column_metadata ??= _dylib.lookupFunction<
+    return (_sqlite3_table_column_metadata ??= _dylib.lookupFunction<
         _c_sqlite3_table_column_metadata,
-        _dart_sqlite3_table_column_metadata>('sqlite3_table_column_metadata');
-    return _sqlite3_table_column_metadata(
+        _dart_sqlite3_table_column_metadata>('sqlite3_table_column_metadata'))(
       db,
       zDbName,
       zTableName,
@@ -6207,7 +6091,7 @@
     );
   }
 
-  _dart_sqlite3_table_column_metadata _sqlite3_table_column_metadata;
+  _dart_sqlite3_table_column_metadata? _sqlite3_table_column_metadata;
 
   /// CAPI3REF: Load An Extension
   /// METHOD: sqlite3
@@ -6257,9 +6141,9 @@
     ffi.Pointer<ffi.Int8> zProc,
     ffi.Pointer<ffi.Pointer<ffi.Int8>> pzErrMsg,
   ) {
-    _sqlite3_load_extension ??= _dylib.lookupFunction<_c_sqlite3_load_extension,
-        _dart_sqlite3_load_extension>('sqlite3_load_extension');
-    return _sqlite3_load_extension(
+    return (_sqlite3_load_extension ??= _dylib.lookupFunction<
+        _c_sqlite3_load_extension,
+        _dart_sqlite3_load_extension>('sqlite3_load_extension'))(
       db,
       zFile,
       zProc,
@@ -6267,7 +6151,7 @@
     );
   }
 
-  _dart_sqlite3_load_extension _sqlite3_load_extension;
+  _dart_sqlite3_load_extension? _sqlite3_load_extension;
 
   /// CAPI3REF: Enable Or Disable Extension Loading
   /// METHOD: sqlite3
@@ -6296,16 +6180,15 @@
     ffi.Pointer<sqlite3> db,
     int onoff,
   ) {
-    _sqlite3_enable_load_extension ??= _dylib.lookupFunction<
+    return (_sqlite3_enable_load_extension ??= _dylib.lookupFunction<
         _c_sqlite3_enable_load_extension,
-        _dart_sqlite3_enable_load_extension>('sqlite3_enable_load_extension');
-    return _sqlite3_enable_load_extension(
+        _dart_sqlite3_enable_load_extension>('sqlite3_enable_load_extension'))(
       db,
       onoff,
     );
   }
 
-  _dart_sqlite3_enable_load_extension _sqlite3_enable_load_extension;
+  _dart_sqlite3_enable_load_extension? _sqlite3_enable_load_extension;
 
   /// CAPI3REF: Automatically Load Statically Linked Extensions
   ///
@@ -6344,14 +6227,14 @@
   int sqlite3_auto_extension(
     ffi.Pointer<ffi.NativeFunction<_typedefC_66>> xEntryPoint,
   ) {
-    _sqlite3_auto_extension ??= _dylib.lookupFunction<_c_sqlite3_auto_extension,
-        _dart_sqlite3_auto_extension>('sqlite3_auto_extension');
-    return _sqlite3_auto_extension(
+    return (_sqlite3_auto_extension ??= _dylib.lookupFunction<
+        _c_sqlite3_auto_extension,
+        _dart_sqlite3_auto_extension>('sqlite3_auto_extension'))(
       xEntryPoint,
     );
   }
 
-  _dart_sqlite3_auto_extension _sqlite3_auto_extension;
+  _dart_sqlite3_auto_extension? _sqlite3_auto_extension;
 
   /// CAPI3REF: Cancel Automatic Extension Loading
   ///
@@ -6364,28 +6247,26 @@
   int sqlite3_cancel_auto_extension(
     ffi.Pointer<ffi.NativeFunction<_typedefC_67>> xEntryPoint,
   ) {
-    _sqlite3_cancel_auto_extension ??= _dylib.lookupFunction<
+    return (_sqlite3_cancel_auto_extension ??= _dylib.lookupFunction<
         _c_sqlite3_cancel_auto_extension,
-        _dart_sqlite3_cancel_auto_extension>('sqlite3_cancel_auto_extension');
-    return _sqlite3_cancel_auto_extension(
+        _dart_sqlite3_cancel_auto_extension>('sqlite3_cancel_auto_extension'))(
       xEntryPoint,
     );
   }
 
-  _dart_sqlite3_cancel_auto_extension _sqlite3_cancel_auto_extension;
+  _dart_sqlite3_cancel_auto_extension? _sqlite3_cancel_auto_extension;
 
   /// CAPI3REF: Reset Automatic Extension Loading
   ///
   /// ^This interface disables all automatic extensions previously
   /// registered using [sqlite3_auto_extension()].
   void sqlite3_reset_auto_extension() {
-    _sqlite3_reset_auto_extension ??= _dylib.lookupFunction<
+    return (_sqlite3_reset_auto_extension ??= _dylib.lookupFunction<
         _c_sqlite3_reset_auto_extension,
-        _dart_sqlite3_reset_auto_extension>('sqlite3_reset_auto_extension');
-    return _sqlite3_reset_auto_extension();
+        _dart_sqlite3_reset_auto_extension>('sqlite3_reset_auto_extension'))();
   }
 
-  _dart_sqlite3_reset_auto_extension _sqlite3_reset_auto_extension;
+  _dart_sqlite3_reset_auto_extension? _sqlite3_reset_auto_extension;
 
   /// CAPI3REF: Register A Virtual Table Implementation
   /// METHOD: sqlite3
@@ -6423,9 +6304,9 @@
     ffi.Pointer<sqlite3_module> p,
     ffi.Pointer<ffi.Void> pClientData,
   ) {
-    _sqlite3_create_module ??= _dylib.lookupFunction<_c_sqlite3_create_module,
-        _dart_sqlite3_create_module>('sqlite3_create_module');
-    return _sqlite3_create_module(
+    return (_sqlite3_create_module ??= _dylib.lookupFunction<
+        _c_sqlite3_create_module,
+        _dart_sqlite3_create_module>('sqlite3_create_module'))(
       db,
       zName,
       p,
@@ -6433,7 +6314,7 @@
     );
   }
 
-  _dart_sqlite3_create_module _sqlite3_create_module;
+  _dart_sqlite3_create_module? _sqlite3_create_module;
 
   int sqlite3_create_module_v2(
     ffi.Pointer<sqlite3> db,
@@ -6442,10 +6323,9 @@
     ffi.Pointer<ffi.Void> pClientData,
     ffi.Pointer<ffi.NativeFunction<_typedefC_68>> xDestroy,
   ) {
-    _sqlite3_create_module_v2 ??= _dylib.lookupFunction<
+    return (_sqlite3_create_module_v2 ??= _dylib.lookupFunction<
         _c_sqlite3_create_module_v2,
-        _dart_sqlite3_create_module_v2>('sqlite3_create_module_v2');
-    return _sqlite3_create_module_v2(
+        _dart_sqlite3_create_module_v2>('sqlite3_create_module_v2'))(
       db,
       zName,
       p,
@@ -6454,7 +6334,7 @@
     );
   }
 
-  _dart_sqlite3_create_module_v2 _sqlite3_create_module_v2;
+  _dart_sqlite3_create_module_v2? _sqlite3_create_module_v2;
 
   /// CAPI3REF: Remove Unnecessary Virtual Table Implementations
   /// METHOD: sqlite3
@@ -6470,15 +6350,15 @@
     ffi.Pointer<sqlite3> db,
     ffi.Pointer<ffi.Pointer<ffi.Int8>> azKeep,
   ) {
-    _sqlite3_drop_modules ??= _dylib.lookupFunction<_c_sqlite3_drop_modules,
-        _dart_sqlite3_drop_modules>('sqlite3_drop_modules');
-    return _sqlite3_drop_modules(
+    return (_sqlite3_drop_modules ??= _dylib.lookupFunction<
+        _c_sqlite3_drop_modules,
+        _dart_sqlite3_drop_modules>('sqlite3_drop_modules'))(
       db,
       azKeep,
     );
   }
 
-  _dart_sqlite3_drop_modules _sqlite3_drop_modules;
+  _dart_sqlite3_drop_modules? _sqlite3_drop_modules;
 
   /// CAPI3REF: Declare The Schema Of A Virtual Table
   ///
@@ -6490,15 +6370,15 @@
     ffi.Pointer<sqlite3> arg0,
     ffi.Pointer<ffi.Int8> zSQL,
   ) {
-    _sqlite3_declare_vtab ??= _dylib.lookupFunction<_c_sqlite3_declare_vtab,
-        _dart_sqlite3_declare_vtab>('sqlite3_declare_vtab');
-    return _sqlite3_declare_vtab(
+    return (_sqlite3_declare_vtab ??= _dylib.lookupFunction<
+        _c_sqlite3_declare_vtab,
+        _dart_sqlite3_declare_vtab>('sqlite3_declare_vtab'))(
       arg0,
       zSQL,
     );
   }
 
-  _dart_sqlite3_declare_vtab _sqlite3_declare_vtab;
+  _dart_sqlite3_declare_vtab? _sqlite3_declare_vtab;
 
   /// CAPI3REF: Overload A Function For A Virtual Table
   /// METHOD: sqlite3
@@ -6520,17 +6400,16 @@
     ffi.Pointer<ffi.Int8> zFuncName,
     int nArg,
   ) {
-    _sqlite3_overload_function ??= _dylib.lookupFunction<
+    return (_sqlite3_overload_function ??= _dylib.lookupFunction<
         _c_sqlite3_overload_function,
-        _dart_sqlite3_overload_function>('sqlite3_overload_function');
-    return _sqlite3_overload_function(
+        _dart_sqlite3_overload_function>('sqlite3_overload_function'))(
       arg0,
       zFuncName,
       nArg,
     );
   }
 
-  _dart_sqlite3_overload_function _sqlite3_overload_function;
+  _dart_sqlite3_overload_function? _sqlite3_overload_function;
 
   /// CAPI3REF: Open A BLOB For Incremental I/O
   /// METHOD: sqlite3
@@ -6622,10 +6501,9 @@
     int flags,
     ffi.Pointer<ffi.Pointer<sqlite3_blob>> ppBlob,
   ) {
-    _sqlite3_blob_open ??=
+    return (_sqlite3_blob_open ??=
         _dylib.lookupFunction<_c_sqlite3_blob_open, _dart_sqlite3_blob_open>(
-            'sqlite3_blob_open');
-    return _sqlite3_blob_open(
+            'sqlite3_blob_open'))(
       arg0,
       zDb,
       zTable,
@@ -6636,7 +6514,7 @@
     );
   }
 
-  _dart_sqlite3_blob_open _sqlite3_blob_open;
+  _dart_sqlite3_blob_open? _sqlite3_blob_open;
 
   /// CAPI3REF: Move a BLOB Handle to a New Row
   /// METHOD: sqlite3_blob
@@ -6663,15 +6541,15 @@
     ffi.Pointer<sqlite3_blob> arg0,
     int arg1,
   ) {
-    _sqlite3_blob_reopen ??= _dylib.lookupFunction<_c_sqlite3_blob_reopen,
-        _dart_sqlite3_blob_reopen>('sqlite3_blob_reopen');
-    return _sqlite3_blob_reopen(
+    return (_sqlite3_blob_reopen ??= _dylib.lookupFunction<
+        _c_sqlite3_blob_reopen,
+        _dart_sqlite3_blob_reopen>('sqlite3_blob_reopen'))(
       arg0,
       arg1,
     );
   }
 
-  _dart_sqlite3_blob_reopen _sqlite3_blob_reopen;
+  _dart_sqlite3_blob_reopen? _sqlite3_blob_reopen;
 
   /// CAPI3REF: Close A BLOB Handle
   /// DESTRUCTOR: sqlite3_blob
@@ -6695,15 +6573,14 @@
   int sqlite3_blob_close(
     ffi.Pointer<sqlite3_blob> arg0,
   ) {
-    _sqlite3_blob_close ??=
+    return (_sqlite3_blob_close ??=
         _dylib.lookupFunction<_c_sqlite3_blob_close, _dart_sqlite3_blob_close>(
-            'sqlite3_blob_close');
-    return _sqlite3_blob_close(
+            'sqlite3_blob_close'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_blob_close _sqlite3_blob_close;
+  _dart_sqlite3_blob_close? _sqlite3_blob_close;
 
   /// CAPI3REF: Return The Size Of An Open BLOB
   /// METHOD: sqlite3_blob
@@ -6720,15 +6597,14 @@
   int sqlite3_blob_bytes(
     ffi.Pointer<sqlite3_blob> arg0,
   ) {
-    _sqlite3_blob_bytes ??=
+    return (_sqlite3_blob_bytes ??=
         _dylib.lookupFunction<_c_sqlite3_blob_bytes, _dart_sqlite3_blob_bytes>(
-            'sqlite3_blob_bytes');
-    return _sqlite3_blob_bytes(
+            'sqlite3_blob_bytes'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_blob_bytes _sqlite3_blob_bytes;
+  _dart_sqlite3_blob_bytes? _sqlite3_blob_bytes;
 
   /// CAPI3REF: Read Data From A BLOB Incrementally
   /// METHOD: sqlite3_blob
@@ -6761,10 +6637,9 @@
     int N,
     int iOffset,
   ) {
-    _sqlite3_blob_read ??=
+    return (_sqlite3_blob_read ??=
         _dylib.lookupFunction<_c_sqlite3_blob_read, _dart_sqlite3_blob_read>(
-            'sqlite3_blob_read');
-    return _sqlite3_blob_read(
+            'sqlite3_blob_read'))(
       arg0,
       Z,
       N,
@@ -6772,7 +6647,7 @@
     );
   }
 
-  _dart_sqlite3_blob_read _sqlite3_blob_read;
+  _dart_sqlite3_blob_read? _sqlite3_blob_read;
 
   /// CAPI3REF: Write Data Into A BLOB Incrementally
   /// METHOD: sqlite3_blob
@@ -6818,10 +6693,9 @@
     int n,
     int iOffset,
   ) {
-    _sqlite3_blob_write ??=
+    return (_sqlite3_blob_write ??=
         _dylib.lookupFunction<_c_sqlite3_blob_write, _dart_sqlite3_blob_write>(
-            'sqlite3_blob_write');
-    return _sqlite3_blob_write(
+            'sqlite3_blob_write'))(
       arg0,
       z,
       n,
@@ -6829,7 +6703,7 @@
     );
   }
 
-  _dart_sqlite3_blob_write _sqlite3_blob_write;
+  _dart_sqlite3_blob_write? _sqlite3_blob_write;
 
   /// CAPI3REF: Virtual File System Objects
   ///
@@ -6861,41 +6735,40 @@
   ffi.Pointer<sqlite3_vfs> sqlite3_vfs_find(
     ffi.Pointer<ffi.Int8> zVfsName,
   ) {
-    _sqlite3_vfs_find ??=
+    return (_sqlite3_vfs_find ??=
         _dylib.lookupFunction<_c_sqlite3_vfs_find, _dart_sqlite3_vfs_find>(
-            'sqlite3_vfs_find');
-    return _sqlite3_vfs_find(
+            'sqlite3_vfs_find'))(
       zVfsName,
     );
   }
 
-  _dart_sqlite3_vfs_find _sqlite3_vfs_find;
+  _dart_sqlite3_vfs_find? _sqlite3_vfs_find;
 
   int sqlite3_vfs_register(
     ffi.Pointer<sqlite3_vfs> arg0,
     int makeDflt,
   ) {
-    _sqlite3_vfs_register ??= _dylib.lookupFunction<_c_sqlite3_vfs_register,
-        _dart_sqlite3_vfs_register>('sqlite3_vfs_register');
-    return _sqlite3_vfs_register(
+    return (_sqlite3_vfs_register ??= _dylib.lookupFunction<
+        _c_sqlite3_vfs_register,
+        _dart_sqlite3_vfs_register>('sqlite3_vfs_register'))(
       arg0,
       makeDflt,
     );
   }
 
-  _dart_sqlite3_vfs_register _sqlite3_vfs_register;
+  _dart_sqlite3_vfs_register? _sqlite3_vfs_register;
 
   int sqlite3_vfs_unregister(
     ffi.Pointer<sqlite3_vfs> arg0,
   ) {
-    _sqlite3_vfs_unregister ??= _dylib.lookupFunction<_c_sqlite3_vfs_unregister,
-        _dart_sqlite3_vfs_unregister>('sqlite3_vfs_unregister');
-    return _sqlite3_vfs_unregister(
+    return (_sqlite3_vfs_unregister ??= _dylib.lookupFunction<
+        _c_sqlite3_vfs_unregister,
+        _dart_sqlite3_vfs_unregister>('sqlite3_vfs_unregister'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_vfs_unregister _sqlite3_vfs_unregister;
+  _dart_sqlite3_vfs_unregister? _sqlite3_vfs_unregister;
 
   /// CAPI3REF: Mutexes
   ///
@@ -7012,89 +6885,86 @@
   ffi.Pointer<sqlite3_mutex> sqlite3_mutex_alloc(
     int arg0,
   ) {
-    _sqlite3_mutex_alloc ??= _dylib.lookupFunction<_c_sqlite3_mutex_alloc,
-        _dart_sqlite3_mutex_alloc>('sqlite3_mutex_alloc');
-    return _sqlite3_mutex_alloc(
+    return (_sqlite3_mutex_alloc ??= _dylib.lookupFunction<
+        _c_sqlite3_mutex_alloc,
+        _dart_sqlite3_mutex_alloc>('sqlite3_mutex_alloc'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_mutex_alloc _sqlite3_mutex_alloc;
+  _dart_sqlite3_mutex_alloc? _sqlite3_mutex_alloc;
 
   void sqlite3_mutex_free(
     ffi.Pointer<sqlite3_mutex> arg0,
   ) {
-    _sqlite3_mutex_free ??=
+    return (_sqlite3_mutex_free ??=
         _dylib.lookupFunction<_c_sqlite3_mutex_free, _dart_sqlite3_mutex_free>(
-            'sqlite3_mutex_free');
-    return _sqlite3_mutex_free(
+            'sqlite3_mutex_free'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_mutex_free _sqlite3_mutex_free;
+  _dart_sqlite3_mutex_free? _sqlite3_mutex_free;
 
   void sqlite3_mutex_enter(
     ffi.Pointer<sqlite3_mutex> arg0,
   ) {
-    _sqlite3_mutex_enter ??= _dylib.lookupFunction<_c_sqlite3_mutex_enter,
-        _dart_sqlite3_mutex_enter>('sqlite3_mutex_enter');
-    return _sqlite3_mutex_enter(
+    return (_sqlite3_mutex_enter ??= _dylib.lookupFunction<
+        _c_sqlite3_mutex_enter,
+        _dart_sqlite3_mutex_enter>('sqlite3_mutex_enter'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_mutex_enter _sqlite3_mutex_enter;
+  _dart_sqlite3_mutex_enter? _sqlite3_mutex_enter;
 
   int sqlite3_mutex_try(
     ffi.Pointer<sqlite3_mutex> arg0,
   ) {
-    _sqlite3_mutex_try ??=
+    return (_sqlite3_mutex_try ??=
         _dylib.lookupFunction<_c_sqlite3_mutex_try, _dart_sqlite3_mutex_try>(
-            'sqlite3_mutex_try');
-    return _sqlite3_mutex_try(
+            'sqlite3_mutex_try'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_mutex_try _sqlite3_mutex_try;
+  _dart_sqlite3_mutex_try? _sqlite3_mutex_try;
 
   void sqlite3_mutex_leave(
     ffi.Pointer<sqlite3_mutex> arg0,
   ) {
-    _sqlite3_mutex_leave ??= _dylib.lookupFunction<_c_sqlite3_mutex_leave,
-        _dart_sqlite3_mutex_leave>('sqlite3_mutex_leave');
-    return _sqlite3_mutex_leave(
+    return (_sqlite3_mutex_leave ??= _dylib.lookupFunction<
+        _c_sqlite3_mutex_leave,
+        _dart_sqlite3_mutex_leave>('sqlite3_mutex_leave'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_mutex_leave _sqlite3_mutex_leave;
+  _dart_sqlite3_mutex_leave? _sqlite3_mutex_leave;
 
   int sqlite3_mutex_held(
     ffi.Pointer<sqlite3_mutex> arg0,
   ) {
-    _sqlite3_mutex_held ??=
+    return (_sqlite3_mutex_held ??=
         _dylib.lookupFunction<_c_sqlite3_mutex_held, _dart_sqlite3_mutex_held>(
-            'sqlite3_mutex_held');
-    return _sqlite3_mutex_held(
+            'sqlite3_mutex_held'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_mutex_held _sqlite3_mutex_held;
+  _dart_sqlite3_mutex_held? _sqlite3_mutex_held;
 
   int sqlite3_mutex_notheld(
     ffi.Pointer<sqlite3_mutex> arg0,
   ) {
-    _sqlite3_mutex_notheld ??= _dylib.lookupFunction<_c_sqlite3_mutex_notheld,
-        _dart_sqlite3_mutex_notheld>('sqlite3_mutex_notheld');
-    return _sqlite3_mutex_notheld(
+    return (_sqlite3_mutex_notheld ??= _dylib.lookupFunction<
+        _c_sqlite3_mutex_notheld,
+        _dart_sqlite3_mutex_notheld>('sqlite3_mutex_notheld'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_mutex_notheld _sqlite3_mutex_notheld;
+  _dart_sqlite3_mutex_notheld? _sqlite3_mutex_notheld;
 
   /// CAPI3REF: Retrieve the mutex for a database connection
   /// METHOD: sqlite3
@@ -7107,15 +6977,14 @@
   ffi.Pointer<sqlite3_mutex> sqlite3_db_mutex(
     ffi.Pointer<sqlite3> arg0,
   ) {
-    _sqlite3_db_mutex ??=
+    return (_sqlite3_db_mutex ??=
         _dylib.lookupFunction<_c_sqlite3_db_mutex, _dart_sqlite3_db_mutex>(
-            'sqlite3_db_mutex');
-    return _sqlite3_db_mutex(
+            'sqlite3_db_mutex'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_db_mutex _sqlite3_db_mutex;
+  _dart_sqlite3_db_mutex? _sqlite3_db_mutex;
 
   /// CAPI3REF: Low-Level Control Of Database Files
   /// METHOD: sqlite3
@@ -7162,9 +7031,9 @@
     int op,
     ffi.Pointer<ffi.Void> arg3,
   ) {
-    _sqlite3_file_control ??= _dylib.lookupFunction<_c_sqlite3_file_control,
-        _dart_sqlite3_file_control>('sqlite3_file_control');
-    return _sqlite3_file_control(
+    return (_sqlite3_file_control ??= _dylib.lookupFunction<
+        _c_sqlite3_file_control,
+        _dart_sqlite3_file_control>('sqlite3_file_control'))(
       arg0,
       zDbName,
       op,
@@ -7172,7 +7041,7 @@
     );
   }
 
-  _dart_sqlite3_file_control _sqlite3_file_control;
+  _dart_sqlite3_file_control? _sqlite3_file_control;
 
   /// CAPI3REF: Testing Interface
   ///
@@ -7192,14 +7061,14 @@
   int sqlite3_test_control(
     int op,
   ) {
-    _sqlite3_test_control ??= _dylib.lookupFunction<_c_sqlite3_test_control,
-        _dart_sqlite3_test_control>('sqlite3_test_control');
-    return _sqlite3_test_control(
+    return (_sqlite3_test_control ??= _dylib.lookupFunction<
+        _c_sqlite3_test_control,
+        _dart_sqlite3_test_control>('sqlite3_test_control'))(
       op,
     );
   }
 
-  _dart_sqlite3_test_control _sqlite3_test_control;
+  _dart_sqlite3_test_control? _sqlite3_test_control;
 
   /// CAPI3REF: SQL Keyword Checking
   ///
@@ -7247,42 +7116,42 @@
   /// SQLite is compiled with the [-DSQLITE_OMIT_VACUUM] option.  Also,
   /// new keywords may be added to future releases of SQLite.
   int sqlite3_keyword_count() {
-    _sqlite3_keyword_count ??= _dylib.lookupFunction<_c_sqlite3_keyword_count,
-        _dart_sqlite3_keyword_count>('sqlite3_keyword_count');
-    return _sqlite3_keyword_count();
+    return (_sqlite3_keyword_count ??= _dylib.lookupFunction<
+        _c_sqlite3_keyword_count,
+        _dart_sqlite3_keyword_count>('sqlite3_keyword_count'))();
   }
 
-  _dart_sqlite3_keyword_count _sqlite3_keyword_count;
+  _dart_sqlite3_keyword_count? _sqlite3_keyword_count;
 
   int sqlite3_keyword_name(
     int arg0,
     ffi.Pointer<ffi.Pointer<ffi.Int8>> arg1,
     ffi.Pointer<ffi.Int32> arg2,
   ) {
-    _sqlite3_keyword_name ??= _dylib.lookupFunction<_c_sqlite3_keyword_name,
-        _dart_sqlite3_keyword_name>('sqlite3_keyword_name');
-    return _sqlite3_keyword_name(
+    return (_sqlite3_keyword_name ??= _dylib.lookupFunction<
+        _c_sqlite3_keyword_name,
+        _dart_sqlite3_keyword_name>('sqlite3_keyword_name'))(
       arg0,
       arg1,
       arg2,
     );
   }
 
-  _dart_sqlite3_keyword_name _sqlite3_keyword_name;
+  _dart_sqlite3_keyword_name? _sqlite3_keyword_name;
 
   int sqlite3_keyword_check(
     ffi.Pointer<ffi.Int8> arg0,
     int arg1,
   ) {
-    _sqlite3_keyword_check ??= _dylib.lookupFunction<_c_sqlite3_keyword_check,
-        _dart_sqlite3_keyword_check>('sqlite3_keyword_check');
-    return _sqlite3_keyword_check(
+    return (_sqlite3_keyword_check ??= _dylib.lookupFunction<
+        _c_sqlite3_keyword_check,
+        _dart_sqlite3_keyword_check>('sqlite3_keyword_check'))(
       arg0,
       arg1,
     );
   }
 
-  _dart_sqlite3_keyword_check _sqlite3_keyword_check;
+  _dart_sqlite3_keyword_check? _sqlite3_keyword_check;
 
   /// CAPI3REF: Create A New Dynamic String Object
   /// CONSTRUCTOR: sqlite3_str
@@ -7310,15 +7179,14 @@
   ffi.Pointer<sqlite3_str> sqlite3_str_new(
     ffi.Pointer<sqlite3> arg0,
   ) {
-    _sqlite3_str_new ??=
+    return (_sqlite3_str_new ??=
         _dylib.lookupFunction<_c_sqlite3_str_new, _dart_sqlite3_str_new>(
-            'sqlite3_str_new');
-    return _sqlite3_str_new(
+            'sqlite3_str_new'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_str_new _sqlite3_str_new;
+  _dart_sqlite3_str_new? _sqlite3_str_new;
 
   /// CAPI3REF: Finalize A Dynamic String
   /// DESTRUCTOR: sqlite3_str
@@ -7334,15 +7202,14 @@
   ffi.Pointer<ffi.Int8> sqlite3_str_finish(
     ffi.Pointer<sqlite3_str> arg0,
   ) {
-    _sqlite3_str_finish ??=
+    return (_sqlite3_str_finish ??=
         _dylib.lookupFunction<_c_sqlite3_str_finish, _dart_sqlite3_str_finish>(
-            'sqlite3_str_finish');
-    return _sqlite3_str_finish(
+            'sqlite3_str_finish'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_str_finish _sqlite3_str_finish;
+  _dart_sqlite3_str_finish? _sqlite3_str_finish;
 
   /// CAPI3REF: Add Content To A Dynamic String
   /// METHOD: sqlite3_str
@@ -7378,75 +7245,73 @@
     ffi.Pointer<sqlite3_str> arg0,
     ffi.Pointer<ffi.Int8> zFormat,
   ) {
-    _sqlite3_str_appendf ??= _dylib.lookupFunction<_c_sqlite3_str_appendf,
-        _dart_sqlite3_str_appendf>('sqlite3_str_appendf');
-    return _sqlite3_str_appendf(
+    return (_sqlite3_str_appendf ??= _dylib.lookupFunction<
+        _c_sqlite3_str_appendf,
+        _dart_sqlite3_str_appendf>('sqlite3_str_appendf'))(
       arg0,
       zFormat,
     );
   }
 
-  _dart_sqlite3_str_appendf _sqlite3_str_appendf;
+  _dart_sqlite3_str_appendf? _sqlite3_str_appendf;
 
   void sqlite3_str_append(
     ffi.Pointer<sqlite3_str> arg0,
     ffi.Pointer<ffi.Int8> zIn,
     int N,
   ) {
-    _sqlite3_str_append ??=
+    return (_sqlite3_str_append ??=
         _dylib.lookupFunction<_c_sqlite3_str_append, _dart_sqlite3_str_append>(
-            'sqlite3_str_append');
-    return _sqlite3_str_append(
+            'sqlite3_str_append'))(
       arg0,
       zIn,
       N,
     );
   }
 
-  _dart_sqlite3_str_append _sqlite3_str_append;
+  _dart_sqlite3_str_append? _sqlite3_str_append;
 
   void sqlite3_str_appendall(
     ffi.Pointer<sqlite3_str> arg0,
     ffi.Pointer<ffi.Int8> zIn,
   ) {
-    _sqlite3_str_appendall ??= _dylib.lookupFunction<_c_sqlite3_str_appendall,
-        _dart_sqlite3_str_appendall>('sqlite3_str_appendall');
-    return _sqlite3_str_appendall(
+    return (_sqlite3_str_appendall ??= _dylib.lookupFunction<
+        _c_sqlite3_str_appendall,
+        _dart_sqlite3_str_appendall>('sqlite3_str_appendall'))(
       arg0,
       zIn,
     );
   }
 
-  _dart_sqlite3_str_appendall _sqlite3_str_appendall;
+  _dart_sqlite3_str_appendall? _sqlite3_str_appendall;
 
   void sqlite3_str_appendchar(
     ffi.Pointer<sqlite3_str> arg0,
     int N,
     int C,
   ) {
-    _sqlite3_str_appendchar ??= _dylib.lookupFunction<_c_sqlite3_str_appendchar,
-        _dart_sqlite3_str_appendchar>('sqlite3_str_appendchar');
-    return _sqlite3_str_appendchar(
+    return (_sqlite3_str_appendchar ??= _dylib.lookupFunction<
+        _c_sqlite3_str_appendchar,
+        _dart_sqlite3_str_appendchar>('sqlite3_str_appendchar'))(
       arg0,
       N,
       C,
     );
   }
 
-  _dart_sqlite3_str_appendchar _sqlite3_str_appendchar;
+  _dart_sqlite3_str_appendchar? _sqlite3_str_appendchar;
 
   void sqlite3_str_reset(
     ffi.Pointer<sqlite3_str> arg0,
   ) {
-    _sqlite3_str_reset ??=
+    return (_sqlite3_str_reset ??=
         _dylib.lookupFunction<_c_sqlite3_str_reset, _dart_sqlite3_str_reset>(
-            'sqlite3_str_reset');
-    return _sqlite3_str_reset(
+            'sqlite3_str_reset'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_str_reset _sqlite3_str_reset;
+  _dart_sqlite3_str_reset? _sqlite3_str_reset;
 
   /// CAPI3REF: Status Of A Dynamic String
   /// METHOD: sqlite3_str
@@ -7478,40 +7343,38 @@
   int sqlite3_str_errcode(
     ffi.Pointer<sqlite3_str> arg0,
   ) {
-    _sqlite3_str_errcode ??= _dylib.lookupFunction<_c_sqlite3_str_errcode,
-        _dart_sqlite3_str_errcode>('sqlite3_str_errcode');
-    return _sqlite3_str_errcode(
+    return (_sqlite3_str_errcode ??= _dylib.lookupFunction<
+        _c_sqlite3_str_errcode,
+        _dart_sqlite3_str_errcode>('sqlite3_str_errcode'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_str_errcode _sqlite3_str_errcode;
+  _dart_sqlite3_str_errcode? _sqlite3_str_errcode;
 
   int sqlite3_str_length(
     ffi.Pointer<sqlite3_str> arg0,
   ) {
-    _sqlite3_str_length ??=
+    return (_sqlite3_str_length ??=
         _dylib.lookupFunction<_c_sqlite3_str_length, _dart_sqlite3_str_length>(
-            'sqlite3_str_length');
-    return _sqlite3_str_length(
+            'sqlite3_str_length'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_str_length _sqlite3_str_length;
+  _dart_sqlite3_str_length? _sqlite3_str_length;
 
   ffi.Pointer<ffi.Int8> sqlite3_str_value(
     ffi.Pointer<sqlite3_str> arg0,
   ) {
-    _sqlite3_str_value ??=
+    return (_sqlite3_str_value ??=
         _dylib.lookupFunction<_c_sqlite3_str_value, _dart_sqlite3_str_value>(
-            'sqlite3_str_value');
-    return _sqlite3_str_value(
+            'sqlite3_str_value'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_str_value _sqlite3_str_value;
+  _dart_sqlite3_str_value? _sqlite3_str_value;
 
   /// CAPI3REF: SQLite Runtime Status
   ///
@@ -7543,10 +7406,9 @@
     ffi.Pointer<ffi.Int32> pHighwater,
     int resetFlag,
   ) {
-    _sqlite3_status ??=
+    return (_sqlite3_status ??=
         _dylib.lookupFunction<_c_sqlite3_status, _dart_sqlite3_status>(
-            'sqlite3_status');
-    return _sqlite3_status(
+            'sqlite3_status'))(
       op,
       pCurrent,
       pHighwater,
@@ -7554,7 +7416,7 @@
     );
   }
 
-  _dart_sqlite3_status _sqlite3_status;
+  _dart_sqlite3_status? _sqlite3_status;
 
   int sqlite3_status64(
     int op,
@@ -7562,10 +7424,9 @@
     ffi.Pointer<ffi.Int64> pHighwater,
     int resetFlag,
   ) {
-    _sqlite3_status64 ??=
+    return (_sqlite3_status64 ??=
         _dylib.lookupFunction<_c_sqlite3_status64, _dart_sqlite3_status64>(
-            'sqlite3_status64');
-    return _sqlite3_status64(
+            'sqlite3_status64'))(
       op,
       pCurrent,
       pHighwater,
@@ -7573,7 +7434,7 @@
     );
   }
 
-  _dart_sqlite3_status64 _sqlite3_status64;
+  _dart_sqlite3_status64? _sqlite3_status64;
 
   /// CAPI3REF: Database Connection Status
   /// METHOD: sqlite3
@@ -7603,10 +7464,9 @@
     ffi.Pointer<ffi.Int32> pHiwtr,
     int resetFlg,
   ) {
-    _sqlite3_db_status ??=
+    return (_sqlite3_db_status ??=
         _dylib.lookupFunction<_c_sqlite3_db_status, _dart_sqlite3_db_status>(
-            'sqlite3_db_status');
-    return _sqlite3_db_status(
+            'sqlite3_db_status'))(
       arg0,
       op,
       pCur,
@@ -7615,7 +7475,7 @@
     );
   }
 
-  _dart_sqlite3_db_status _sqlite3_db_status;
+  _dart_sqlite3_db_status? _sqlite3_db_status;
 
   /// CAPI3REF: Prepared Statement Status
   /// METHOD: sqlite3_stmt
@@ -7644,16 +7504,16 @@
     int op,
     int resetFlg,
   ) {
-    _sqlite3_stmt_status ??= _dylib.lookupFunction<_c_sqlite3_stmt_status,
-        _dart_sqlite3_stmt_status>('sqlite3_stmt_status');
-    return _sqlite3_stmt_status(
+    return (_sqlite3_stmt_status ??= _dylib.lookupFunction<
+        _c_sqlite3_stmt_status,
+        _dart_sqlite3_stmt_status>('sqlite3_stmt_status'))(
       arg0,
       op,
       resetFlg,
     );
   }
 
-  _dart_sqlite3_stmt_status _sqlite3_stmt_status;
+  _dart_sqlite3_stmt_status? _sqlite3_stmt_status;
 
   /// CAPI3REF: Online Backup API.
   ///
@@ -7845,9 +7705,9 @@
     ffi.Pointer<sqlite3> pSource,
     ffi.Pointer<ffi.Int8> zSourceName,
   ) {
-    _sqlite3_backup_init ??= _dylib.lookupFunction<_c_sqlite3_backup_init,
-        _dart_sqlite3_backup_init>('sqlite3_backup_init');
-    return _sqlite3_backup_init(
+    return (_sqlite3_backup_init ??= _dylib.lookupFunction<
+        _c_sqlite3_backup_init,
+        _dart_sqlite3_backup_init>('sqlite3_backup_init'))(
       pDest,
       zDestName,
       pSource,
@@ -7855,59 +7715,57 @@
     );
   }
 
-  _dart_sqlite3_backup_init _sqlite3_backup_init;
+  _dart_sqlite3_backup_init? _sqlite3_backup_init;
 
   int sqlite3_backup_step(
     ffi.Pointer<sqlite3_backup> p,
     int nPage,
   ) {
-    _sqlite3_backup_step ??= _dylib.lookupFunction<_c_sqlite3_backup_step,
-        _dart_sqlite3_backup_step>('sqlite3_backup_step');
-    return _sqlite3_backup_step(
+    return (_sqlite3_backup_step ??= _dylib.lookupFunction<
+        _c_sqlite3_backup_step,
+        _dart_sqlite3_backup_step>('sqlite3_backup_step'))(
       p,
       nPage,
     );
   }
 
-  _dart_sqlite3_backup_step _sqlite3_backup_step;
+  _dart_sqlite3_backup_step? _sqlite3_backup_step;
 
   int sqlite3_backup_finish(
     ffi.Pointer<sqlite3_backup> p,
   ) {
-    _sqlite3_backup_finish ??= _dylib.lookupFunction<_c_sqlite3_backup_finish,
-        _dart_sqlite3_backup_finish>('sqlite3_backup_finish');
-    return _sqlite3_backup_finish(
+    return (_sqlite3_backup_finish ??= _dylib.lookupFunction<
+        _c_sqlite3_backup_finish,
+        _dart_sqlite3_backup_finish>('sqlite3_backup_finish'))(
       p,
     );
   }
 
-  _dart_sqlite3_backup_finish _sqlite3_backup_finish;
+  _dart_sqlite3_backup_finish? _sqlite3_backup_finish;
 
   int sqlite3_backup_remaining(
     ffi.Pointer<sqlite3_backup> p,
   ) {
-    _sqlite3_backup_remaining ??= _dylib.lookupFunction<
+    return (_sqlite3_backup_remaining ??= _dylib.lookupFunction<
         _c_sqlite3_backup_remaining,
-        _dart_sqlite3_backup_remaining>('sqlite3_backup_remaining');
-    return _sqlite3_backup_remaining(
+        _dart_sqlite3_backup_remaining>('sqlite3_backup_remaining'))(
       p,
     );
   }
 
-  _dart_sqlite3_backup_remaining _sqlite3_backup_remaining;
+  _dart_sqlite3_backup_remaining? _sqlite3_backup_remaining;
 
   int sqlite3_backup_pagecount(
     ffi.Pointer<sqlite3_backup> p,
   ) {
-    _sqlite3_backup_pagecount ??= _dylib.lookupFunction<
+    return (_sqlite3_backup_pagecount ??= _dylib.lookupFunction<
         _c_sqlite3_backup_pagecount,
-        _dart_sqlite3_backup_pagecount>('sqlite3_backup_pagecount');
-    return _sqlite3_backup_pagecount(
+        _dart_sqlite3_backup_pagecount>('sqlite3_backup_pagecount'))(
       p,
     );
   }
 
-  _dart_sqlite3_backup_pagecount _sqlite3_backup_pagecount;
+  _dart_sqlite3_backup_pagecount? _sqlite3_backup_pagecount;
 
   /// CAPI3REF: Unlock Notification
   /// METHOD: sqlite3
@@ -8027,16 +7885,16 @@
     ffi.Pointer<ffi.NativeFunction<_typedefC_69>> xNotify,
     ffi.Pointer<ffi.Void> pNotifyArg,
   ) {
-    _sqlite3_unlock_notify ??= _dylib.lookupFunction<_c_sqlite3_unlock_notify,
-        _dart_sqlite3_unlock_notify>('sqlite3_unlock_notify');
-    return _sqlite3_unlock_notify(
+    return (_sqlite3_unlock_notify ??= _dylib.lookupFunction<
+        _c_sqlite3_unlock_notify,
+        _dart_sqlite3_unlock_notify>('sqlite3_unlock_notify'))(
       pBlocked,
       xNotify,
       pNotifyArg,
     );
   }
 
-  _dart_sqlite3_unlock_notify _sqlite3_unlock_notify;
+  _dart_sqlite3_unlock_notify? _sqlite3_unlock_notify;
 
   /// CAPI3REF: String Comparison
   ///
@@ -8048,33 +7906,31 @@
     ffi.Pointer<ffi.Int8> arg0,
     ffi.Pointer<ffi.Int8> arg1,
   ) {
-    _sqlite3_stricmp ??=
+    return (_sqlite3_stricmp ??=
         _dylib.lookupFunction<_c_sqlite3_stricmp, _dart_sqlite3_stricmp>(
-            'sqlite3_stricmp');
-    return _sqlite3_stricmp(
+            'sqlite3_stricmp'))(
       arg0,
       arg1,
     );
   }
 
-  _dart_sqlite3_stricmp _sqlite3_stricmp;
+  _dart_sqlite3_stricmp? _sqlite3_stricmp;
 
   int sqlite3_strnicmp(
     ffi.Pointer<ffi.Int8> arg0,
     ffi.Pointer<ffi.Int8> arg1,
     int arg2,
   ) {
-    _sqlite3_strnicmp ??=
+    return (_sqlite3_strnicmp ??=
         _dylib.lookupFunction<_c_sqlite3_strnicmp, _dart_sqlite3_strnicmp>(
-            'sqlite3_strnicmp');
-    return _sqlite3_strnicmp(
+            'sqlite3_strnicmp'))(
       arg0,
       arg1,
       arg2,
     );
   }
 
-  _dart_sqlite3_strnicmp _sqlite3_strnicmp;
+  _dart_sqlite3_strnicmp? _sqlite3_strnicmp;
 
   /// CAPI3REF: String Globbing
   ///
@@ -8093,16 +7949,15 @@
     ffi.Pointer<ffi.Int8> zGlob,
     ffi.Pointer<ffi.Int8> zStr,
   ) {
-    _sqlite3_strglob ??=
+    return (_sqlite3_strglob ??=
         _dylib.lookupFunction<_c_sqlite3_strglob, _dart_sqlite3_strglob>(
-            'sqlite3_strglob');
-    return _sqlite3_strglob(
+            'sqlite3_strglob'))(
       zGlob,
       zStr,
     );
   }
 
-  _dart_sqlite3_strglob _sqlite3_strglob;
+  _dart_sqlite3_strglob? _sqlite3_strglob;
 
   /// CAPI3REF: String LIKE Matching
   ///
@@ -8128,17 +7983,16 @@
     ffi.Pointer<ffi.Int8> zStr,
     int cEsc,
   ) {
-    _sqlite3_strlike ??=
+    return (_sqlite3_strlike ??=
         _dylib.lookupFunction<_c_sqlite3_strlike, _dart_sqlite3_strlike>(
-            'sqlite3_strlike');
-    return _sqlite3_strlike(
+            'sqlite3_strlike'))(
       zGlob,
       zStr,
       cEsc,
     );
   }
 
-  _dart_sqlite3_strlike _sqlite3_strlike;
+  _dart_sqlite3_strlike? _sqlite3_strlike;
 
   /// CAPI3REF: Error Logging Interface
   ///
@@ -8163,15 +8017,14 @@
     int iErrCode,
     ffi.Pointer<ffi.Int8> zFormat,
   ) {
-    _sqlite3_log ??=
-        _dylib.lookupFunction<_c_sqlite3_log, _dart_sqlite3_log>('sqlite3_log');
-    return _sqlite3_log(
+    return (_sqlite3_log ??= _dylib
+        .lookupFunction<_c_sqlite3_log, _dart_sqlite3_log>('sqlite3_log'))(
       iErrCode,
       zFormat,
     );
   }
 
-  _dart_sqlite3_log _sqlite3_log;
+  _dart_sqlite3_log? _sqlite3_log;
 
   /// CAPI3REF: Write-Ahead Log Commit Hook
   /// METHOD: sqlite3
@@ -8210,17 +8063,16 @@
     ffi.Pointer<ffi.NativeFunction<_typedefC_70>> arg1,
     ffi.Pointer<ffi.Void> arg2,
   ) {
-    _sqlite3_wal_hook ??=
+    return (_sqlite3_wal_hook ??=
         _dylib.lookupFunction<_c_sqlite3_wal_hook, _dart_sqlite3_wal_hook>(
-            'sqlite3_wal_hook');
-    return _sqlite3_wal_hook(
+            'sqlite3_wal_hook'))(
       arg0,
       arg1,
       arg2,
     );
   }
 
-  _dart_sqlite3_wal_hook _sqlite3_wal_hook;
+  _dart_sqlite3_wal_hook? _sqlite3_wal_hook;
 
   /// CAPI3REF: Configure an auto-checkpoint
   /// METHOD: sqlite3
@@ -8253,16 +8105,15 @@
     ffi.Pointer<sqlite3> db,
     int N,
   ) {
-    _sqlite3_wal_autocheckpoint ??= _dylib.lookupFunction<
+    return (_sqlite3_wal_autocheckpoint ??= _dylib.lookupFunction<
         _c_sqlite3_wal_autocheckpoint,
-        _dart_sqlite3_wal_autocheckpoint>('sqlite3_wal_autocheckpoint');
-    return _sqlite3_wal_autocheckpoint(
+        _dart_sqlite3_wal_autocheckpoint>('sqlite3_wal_autocheckpoint'))(
       db,
       N,
     );
   }
 
-  _dart_sqlite3_wal_autocheckpoint _sqlite3_wal_autocheckpoint;
+  _dart_sqlite3_wal_autocheckpoint? _sqlite3_wal_autocheckpoint;
 
   /// CAPI3REF: Checkpoint a database
   /// METHOD: sqlite3
@@ -8286,15 +8137,15 @@
     ffi.Pointer<sqlite3> db,
     ffi.Pointer<ffi.Int8> zDb,
   ) {
-    _sqlite3_wal_checkpoint ??= _dylib.lookupFunction<_c_sqlite3_wal_checkpoint,
-        _dart_sqlite3_wal_checkpoint>('sqlite3_wal_checkpoint');
-    return _sqlite3_wal_checkpoint(
+    return (_sqlite3_wal_checkpoint ??= _dylib.lookupFunction<
+        _c_sqlite3_wal_checkpoint,
+        _dart_sqlite3_wal_checkpoint>('sqlite3_wal_checkpoint'))(
       db,
       zDb,
     );
   }
 
-  _dart_sqlite3_wal_checkpoint _sqlite3_wal_checkpoint;
+  _dart_sqlite3_wal_checkpoint? _sqlite3_wal_checkpoint;
 
   /// CAPI3REF: Checkpoint a database
   /// METHOD: sqlite3
@@ -8393,10 +8244,9 @@
     ffi.Pointer<ffi.Int32> pnLog,
     ffi.Pointer<ffi.Int32> pnCkpt,
   ) {
-    _sqlite3_wal_checkpoint_v2 ??= _dylib.lookupFunction<
+    return (_sqlite3_wal_checkpoint_v2 ??= _dylib.lookupFunction<
         _c_sqlite3_wal_checkpoint_v2,
-        _dart_sqlite3_wal_checkpoint_v2>('sqlite3_wal_checkpoint_v2');
-    return _sqlite3_wal_checkpoint_v2(
+        _dart_sqlite3_wal_checkpoint_v2>('sqlite3_wal_checkpoint_v2'))(
       db,
       zDb,
       eMode,
@@ -8405,7 +8255,7 @@
     );
   }
 
-  _dart_sqlite3_wal_checkpoint_v2 _sqlite3_wal_checkpoint_v2;
+  _dart_sqlite3_wal_checkpoint_v2? _sqlite3_wal_checkpoint_v2;
 
   /// CAPI3REF: Virtual Table Interface Configuration
   ///
@@ -8427,15 +8277,15 @@
     ffi.Pointer<sqlite3> arg0,
     int op,
   ) {
-    _sqlite3_vtab_config ??= _dylib.lookupFunction<_c_sqlite3_vtab_config,
-        _dart_sqlite3_vtab_config>('sqlite3_vtab_config');
-    return _sqlite3_vtab_config(
+    return (_sqlite3_vtab_config ??= _dylib.lookupFunction<
+        _c_sqlite3_vtab_config,
+        _dart_sqlite3_vtab_config>('sqlite3_vtab_config'))(
       arg0,
       op,
     );
   }
 
-  _dart_sqlite3_vtab_config _sqlite3_vtab_config;
+  _dart_sqlite3_vtab_config? _sqlite3_vtab_config;
 
   /// CAPI3REF: Determine The Virtual Table Conflict Policy
   ///
@@ -8448,15 +8298,14 @@
   int sqlite3_vtab_on_conflict(
     ffi.Pointer<sqlite3> arg0,
   ) {
-    _sqlite3_vtab_on_conflict ??= _dylib.lookupFunction<
+    return (_sqlite3_vtab_on_conflict ??= _dylib.lookupFunction<
         _c_sqlite3_vtab_on_conflict,
-        _dart_sqlite3_vtab_on_conflict>('sqlite3_vtab_on_conflict');
-    return _sqlite3_vtab_on_conflict(
+        _dart_sqlite3_vtab_on_conflict>('sqlite3_vtab_on_conflict'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_vtab_on_conflict _sqlite3_vtab_on_conflict;
+  _dart_sqlite3_vtab_on_conflict? _sqlite3_vtab_on_conflict;
 
   /// CAPI3REF: Determine If Virtual Table Column Access Is For UPDATE
   ///
@@ -8476,14 +8325,14 @@
   int sqlite3_vtab_nochange(
     ffi.Pointer<sqlite3_context> arg0,
   ) {
-    _sqlite3_vtab_nochange ??= _dylib.lookupFunction<_c_sqlite3_vtab_nochange,
-        _dart_sqlite3_vtab_nochange>('sqlite3_vtab_nochange');
-    return _sqlite3_vtab_nochange(
+    return (_sqlite3_vtab_nochange ??= _dylib.lookupFunction<
+        _c_sqlite3_vtab_nochange,
+        _dart_sqlite3_vtab_nochange>('sqlite3_vtab_nochange'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_vtab_nochange _sqlite3_vtab_nochange;
+  _dart_sqlite3_vtab_nochange? _sqlite3_vtab_nochange;
 
   /// CAPI3REF: Determine The Collation For a Virtual Table Constraint
   ///
@@ -8500,15 +8349,15 @@
     ffi.Pointer<sqlite3_index_info> arg0,
     int arg1,
   ) {
-    _sqlite3_vtab_collation ??= _dylib.lookupFunction<_c_sqlite3_vtab_collation,
-        _dart_sqlite3_vtab_collation>('sqlite3_vtab_collation');
-    return _sqlite3_vtab_collation(
+    return (_sqlite3_vtab_collation ??= _dylib.lookupFunction<
+        _c_sqlite3_vtab_collation,
+        _dart_sqlite3_vtab_collation>('sqlite3_vtab_collation'))(
       arg0,
       arg1,
     );
   }
 
-  _dart_sqlite3_vtab_collation _sqlite3_vtab_collation;
+  _dart_sqlite3_vtab_collation? _sqlite3_vtab_collation;
 
   /// CAPI3REF: Prepared Statement Scan Status
   /// METHOD: sqlite3_stmt
@@ -8545,10 +8394,9 @@
     int iScanStatusOp,
     ffi.Pointer<ffi.Void> pOut,
   ) {
-    _sqlite3_stmt_scanstatus ??= _dylib.lookupFunction<
+    return (_sqlite3_stmt_scanstatus ??= _dylib.lookupFunction<
         _c_sqlite3_stmt_scanstatus,
-        _dart_sqlite3_stmt_scanstatus>('sqlite3_stmt_scanstatus');
-    return _sqlite3_stmt_scanstatus(
+        _dart_sqlite3_stmt_scanstatus>('sqlite3_stmt_scanstatus'))(
       pStmt,
       idx,
       iScanStatusOp,
@@ -8556,7 +8404,7 @@
     );
   }
 
-  _dart_sqlite3_stmt_scanstatus _sqlite3_stmt_scanstatus;
+  _dart_sqlite3_stmt_scanstatus? _sqlite3_stmt_scanstatus;
 
   /// CAPI3REF: Zero Scan-Status Counters
   /// METHOD: sqlite3_stmt
@@ -8568,15 +8416,14 @@
   void sqlite3_stmt_scanstatus_reset(
     ffi.Pointer<sqlite3_stmt> arg0,
   ) {
-    _sqlite3_stmt_scanstatus_reset ??= _dylib.lookupFunction<
+    return (_sqlite3_stmt_scanstatus_reset ??= _dylib.lookupFunction<
         _c_sqlite3_stmt_scanstatus_reset,
-        _dart_sqlite3_stmt_scanstatus_reset>('sqlite3_stmt_scanstatus_reset');
-    return _sqlite3_stmt_scanstatus_reset(
+        _dart_sqlite3_stmt_scanstatus_reset>('sqlite3_stmt_scanstatus_reset'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_stmt_scanstatus_reset _sqlite3_stmt_scanstatus_reset;
+  _dart_sqlite3_stmt_scanstatus_reset? _sqlite3_stmt_scanstatus_reset;
 
   /// CAPI3REF: Flush caches to disk mid-transaction
   ///
@@ -8609,14 +8456,14 @@
   int sqlite3_db_cacheflush(
     ffi.Pointer<sqlite3> arg0,
   ) {
-    _sqlite3_db_cacheflush ??= _dylib.lookupFunction<_c_sqlite3_db_cacheflush,
-        _dart_sqlite3_db_cacheflush>('sqlite3_db_cacheflush');
-    return _sqlite3_db_cacheflush(
+    return (_sqlite3_db_cacheflush ??= _dylib.lookupFunction<
+        _c_sqlite3_db_cacheflush,
+        _dart_sqlite3_db_cacheflush>('sqlite3_db_cacheflush'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_db_cacheflush _sqlite3_db_cacheflush;
+  _dart_sqlite3_db_cacheflush? _sqlite3_db_cacheflush;
 
   /// CAPI3REF: Low-level system error code
   ///
@@ -8629,14 +8476,14 @@
   int sqlite3_system_errno(
     ffi.Pointer<sqlite3> arg0,
   ) {
-    _sqlite3_system_errno ??= _dylib.lookupFunction<_c_sqlite3_system_errno,
-        _dart_sqlite3_system_errno>('sqlite3_system_errno');
-    return _sqlite3_system_errno(
+    return (_sqlite3_system_errno ??= _dylib.lookupFunction<
+        _c_sqlite3_system_errno,
+        _dart_sqlite3_system_errno>('sqlite3_system_errno'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_system_errno _sqlite3_system_errno;
+  _dart_sqlite3_system_errno? _sqlite3_system_errno;
 
   /// CAPI3REF: Record A Database Snapshot
   /// CONSTRUCTOR: sqlite3_snapshot
@@ -8684,16 +8531,16 @@
     ffi.Pointer<ffi.Int8> zSchema,
     ffi.Pointer<ffi.Pointer<sqlite3_snapshot>> ppSnapshot,
   ) {
-    _sqlite3_snapshot_get ??= _dylib.lookupFunction<_c_sqlite3_snapshot_get,
-        _dart_sqlite3_snapshot_get>('sqlite3_snapshot_get');
-    return _sqlite3_snapshot_get(
+    return (_sqlite3_snapshot_get ??= _dylib.lookupFunction<
+        _c_sqlite3_snapshot_get,
+        _dart_sqlite3_snapshot_get>('sqlite3_snapshot_get'))(
       db,
       zSchema,
       ppSnapshot,
     );
   }
 
-  _dart_sqlite3_snapshot_get _sqlite3_snapshot_get;
+  _dart_sqlite3_snapshot_get? _sqlite3_snapshot_get;
 
   /// CAPI3REF: Start a read transaction on an historical snapshot
   /// METHOD: sqlite3_snapshot
@@ -8741,16 +8588,16 @@
     ffi.Pointer<ffi.Int8> zSchema,
     ffi.Pointer<sqlite3_snapshot> pSnapshot,
   ) {
-    _sqlite3_snapshot_open ??= _dylib.lookupFunction<_c_sqlite3_snapshot_open,
-        _dart_sqlite3_snapshot_open>('sqlite3_snapshot_open');
-    return _sqlite3_snapshot_open(
+    return (_sqlite3_snapshot_open ??= _dylib.lookupFunction<
+        _c_sqlite3_snapshot_open,
+        _dart_sqlite3_snapshot_open>('sqlite3_snapshot_open'))(
       db,
       zSchema,
       pSnapshot,
     );
   }
 
-  _dart_sqlite3_snapshot_open _sqlite3_snapshot_open;
+  _dart_sqlite3_snapshot_open? _sqlite3_snapshot_open;
 
   /// CAPI3REF: Destroy a snapshot
   /// DESTRUCTOR: sqlite3_snapshot
@@ -8764,14 +8611,14 @@
   void sqlite3_snapshot_free(
     ffi.Pointer<sqlite3_snapshot> arg0,
   ) {
-    _sqlite3_snapshot_free ??= _dylib.lookupFunction<_c_sqlite3_snapshot_free,
-        _dart_sqlite3_snapshot_free>('sqlite3_snapshot_free');
-    return _sqlite3_snapshot_free(
+    return (_sqlite3_snapshot_free ??= _dylib.lookupFunction<
+        _c_sqlite3_snapshot_free,
+        _dart_sqlite3_snapshot_free>('sqlite3_snapshot_free'))(
       arg0,
     );
   }
 
-  _dart_sqlite3_snapshot_free _sqlite3_snapshot_free;
+  _dart_sqlite3_snapshot_free? _sqlite3_snapshot_free;
 
   /// CAPI3REF: Compare the ages of two snapshot handles.
   /// METHOD: sqlite3_snapshot
@@ -8800,15 +8647,15 @@
     ffi.Pointer<sqlite3_snapshot> p1,
     ffi.Pointer<sqlite3_snapshot> p2,
   ) {
-    _sqlite3_snapshot_cmp ??= _dylib.lookupFunction<_c_sqlite3_snapshot_cmp,
-        _dart_sqlite3_snapshot_cmp>('sqlite3_snapshot_cmp');
-    return _sqlite3_snapshot_cmp(
+    return (_sqlite3_snapshot_cmp ??= _dylib.lookupFunction<
+        _c_sqlite3_snapshot_cmp,
+        _dart_sqlite3_snapshot_cmp>('sqlite3_snapshot_cmp'))(
       p1,
       p2,
     );
   }
 
-  _dart_sqlite3_snapshot_cmp _sqlite3_snapshot_cmp;
+  _dart_sqlite3_snapshot_cmp? _sqlite3_snapshot_cmp;
 
   /// CAPI3REF: Recover snapshots from a wal file
   /// METHOD: sqlite3_snapshot
@@ -8835,16 +8682,15 @@
     ffi.Pointer<sqlite3> db,
     ffi.Pointer<ffi.Int8> zDb,
   ) {
-    _sqlite3_snapshot_recover ??= _dylib.lookupFunction<
+    return (_sqlite3_snapshot_recover ??= _dylib.lookupFunction<
         _c_sqlite3_snapshot_recover,
-        _dart_sqlite3_snapshot_recover>('sqlite3_snapshot_recover');
-    return _sqlite3_snapshot_recover(
+        _dart_sqlite3_snapshot_recover>('sqlite3_snapshot_recover'))(
       db,
       zDb,
     );
   }
 
-  _dart_sqlite3_snapshot_recover _sqlite3_snapshot_recover;
+  _dart_sqlite3_snapshot_recover? _sqlite3_snapshot_recover;
 
   /// CAPI3REF: Serialize a database
   ///
@@ -8886,10 +8732,9 @@
     ffi.Pointer<ffi.Int64> piSize,
     int mFlags,
   ) {
-    _sqlite3_serialize ??=
+    return (_sqlite3_serialize ??=
         _dylib.lookupFunction<_c_sqlite3_serialize, _dart_sqlite3_serialize>(
-            'sqlite3_serialize');
-    return _sqlite3_serialize(
+            'sqlite3_serialize'))(
       db,
       zSchema,
       piSize,
@@ -8897,7 +8742,7 @@
     );
   }
 
-  _dart_sqlite3_serialize _sqlite3_serialize;
+  _dart_sqlite3_serialize? _sqlite3_serialize;
 
   /// CAPI3REF: Deserialize a database
   ///
@@ -8934,9 +8779,9 @@
     int szBuf,
     int mFlags,
   ) {
-    _sqlite3_deserialize ??= _dylib.lookupFunction<_c_sqlite3_deserialize,
-        _dart_sqlite3_deserialize>('sqlite3_deserialize');
-    return _sqlite3_deserialize(
+    return (_sqlite3_deserialize ??= _dylib.lookupFunction<
+        _c_sqlite3_deserialize,
+        _dart_sqlite3_deserialize>('sqlite3_deserialize'))(
       db,
       zSchema,
       pData,
@@ -8946,7 +8791,7 @@
     );
   }
 
-  _dart_sqlite3_deserialize _sqlite3_deserialize;
+  _dart_sqlite3_deserialize? _sqlite3_deserialize;
 
   /// Register a geometry callback named zGeom that can be used as part of an
   /// R-Tree geometry query as follows:
@@ -8958,11 +8803,10 @@
     ffi.Pointer<ffi.NativeFunction<_typedefC_71>> xGeom,
     ffi.Pointer<ffi.Void> pContext,
   ) {
-    _sqlite3_rtree_geometry_callback ??= _dylib.lookupFunction<
+    return (_sqlite3_rtree_geometry_callback ??= _dylib.lookupFunction<
             _c_sqlite3_rtree_geometry_callback,
             _dart_sqlite3_rtree_geometry_callback>(
-        'sqlite3_rtree_geometry_callback');
-    return _sqlite3_rtree_geometry_callback(
+        'sqlite3_rtree_geometry_callback'))(
       db,
       zGeom,
       xGeom,
@@ -8970,7 +8814,7 @@
     );
   }
 
-  _dart_sqlite3_rtree_geometry_callback _sqlite3_rtree_geometry_callback;
+  _dart_sqlite3_rtree_geometry_callback? _sqlite3_rtree_geometry_callback;
 
   /// Register a 2nd-generation geometry callback named zScore that can be
   /// used as part of an R-Tree geometry query as follows:
@@ -8983,10 +8827,9 @@
     ffi.Pointer<ffi.Void> pContext,
     ffi.Pointer<ffi.NativeFunction<_typedefC_73>> xDestructor,
   ) {
-    _sqlite3_rtree_query_callback ??= _dylib.lookupFunction<
+    return (_sqlite3_rtree_query_callback ??= _dylib.lookupFunction<
         _c_sqlite3_rtree_query_callback,
-        _dart_sqlite3_rtree_query_callback>('sqlite3_rtree_query_callback');
-    return _sqlite3_rtree_query_callback(
+        _dart_sqlite3_rtree_query_callback>('sqlite3_rtree_query_callback'))(
       db,
       zQueryFunc,
       xQueryFunc,
@@ -8995,7 +8838,7 @@
     );
   }
 
-  _dart_sqlite3_rtree_query_callback _sqlite3_rtree_query_callback;
+  _dart_sqlite3_rtree_query_callback? _sqlite3_rtree_query_callback;
 }
 
 class sqlite3 extends ffi.Struct {}
@@ -9004,45 +8847,45 @@
 
 class sqlite3_io_methods extends ffi.Struct {
   @ffi.Int32()
-  int iVersion;
+  external int iVersion;
 
-  ffi.Pointer<ffi.NativeFunction<_typedefC_2>> xClose;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_2>> xClose;
 
-  ffi.Pointer<ffi.NativeFunction<_typedefC_3>> xRead;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_3>> xRead;
 
-  ffi.Pointer<ffi.NativeFunction<_typedefC_4>> xWrite;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_4>> xWrite;
 
-  ffi.Pointer<ffi.NativeFunction<_typedefC_5>> xTruncate;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_5>> xTruncate;
 
-  ffi.Pointer<ffi.NativeFunction<_typedefC_6>> xSync;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_6>> xSync;
 
-  ffi.Pointer<ffi.NativeFunction<_typedefC_7>> xFileSize;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_7>> xFileSize;
 
-  ffi.Pointer<ffi.NativeFunction<_typedefC_8>> xLock;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_8>> xLock;
 
-  ffi.Pointer<ffi.NativeFunction<_typedefC_9>> xUnlock;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_9>> xUnlock;
 
-  ffi.Pointer<ffi.NativeFunction<_typedefC_10>> xCheckReservedLock;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_10>> xCheckReservedLock;
 
-  ffi.Pointer<ffi.NativeFunction<_typedefC_11>> xFileControl;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_11>> xFileControl;
 
-  ffi.Pointer<ffi.NativeFunction<_typedefC_12>> xSectorSize;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_12>> xSectorSize;
 
-  ffi.Pointer<ffi.NativeFunction<_typedefC_13>> xDeviceCharacteristics;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_13>> xDeviceCharacteristics;
 
   /// Methods above are valid for version 1
-  ffi.Pointer<ffi.NativeFunction<_typedefC_14>> xShmMap;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_14>> xShmMap;
 
-  ffi.Pointer<ffi.NativeFunction<_typedefC_15>> xShmLock;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_15>> xShmLock;
 
-  ffi.Pointer<ffi.NativeFunction<_typedefC_16>> xShmBarrier;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_16>> xShmBarrier;
 
-  ffi.Pointer<ffi.NativeFunction<_typedefC_17>> xShmUnmap;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_17>> xShmUnmap;
 
   /// Methods above are valid for version 2
-  ffi.Pointer<ffi.NativeFunction<_typedefC_18>> xFetch;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_18>> xFetch;
 
-  ffi.Pointer<ffi.NativeFunction<_typedefC_19>> xUnfetch;
+  external ffi.Pointer<ffi.NativeFunction<_typedefC_19>> xUnfetch;
 }
 
 class sqlite3_mutex extends ffi.Struct {}
@@ -9248,101 +9091,101 @@
 /// the most recent version.
 class sqlite3_snapshot extends ffi.Struct {
   @ffi.Uint8()
-  int _unique_hidden_item_0;
+  external int _unique_hidden_item_0;
   @ffi.Uint8()
-  int _unique_hidden_item_1;
+  external int _unique_hidden_item_1;
   @ffi.Uint8()
-  int _unique_hidden_item_2;
+  external int _unique_hidden_item_2;
   @ffi.Uint8()
-  int _unique_hidden_item_3;
+  external int _unique_hidden_item_3;
   @ffi.Uint8()
-  int _unique_hidden_item_4;
+  external int _unique_hidden_item_4;
   @ffi.Uint8()
-  int _unique_hidden_item_5;
+  external int _unique_hidden_item_5;
   @ffi.Uint8()
-  int _unique_hidden_item_6;
+  external int _unique_hidden_item_6;
   @ffi.Uint8()
-  int _unique_hidden_item_7;
+  external int _unique_hidden_item_7;
   @ffi.Uint8()
-  int _unique_hidden_item_8;
+  external int _unique_hidden_item_8;
   @ffi.Uint8()
-  int _unique_hidden_item_9;
+  external int _unique_hidden_item_9;
   @ffi.Uint8()
-  int _unique_hidden_item_10;
+  external int _unique_hidden_item_10;
   @ffi.Uint8()
-  int _unique_hidden_item_11;
+  external int _unique_hidden_item_11;
   @ffi.Uint8()
-  int _unique_hidden_item_12;
+  external int _unique_hidden_item_12;
   @ffi.Uint8()
-  int _unique_hidden_item_13;
+  external int _unique_hidden_item_13;
   @ffi.Uint8()
-  int _unique_hidden_item_14;
+  external int _unique_hidden_item_14;
   @ffi.Uint8()
-  int _unique_hidden_item_15;
+  external int _unique_hidden_item_15;
   @ffi.Uint8()
-  int _unique_hidden_item_16;
+  external int _unique_hidden_item_16;
   @ffi.Uint8()
-  int _unique_hidden_item_17;
+  external int _unique_hidden_item_17;
   @ffi.Uint8()
-  int _unique_hidden_item_18;
+  external int _unique_hidden_item_18;
   @ffi.Uint8()
-  int _unique_hidden_item_19;
+  external int _unique_hidden_item_19;
   @ffi.Uint8()
-  int _unique_hidden_item_20;
+  external int _unique_hidden_item_20;
   @ffi.Uint8()
-  int _unique_hidden_item_21;
+  external int _unique_hidden_item_21;
   @ffi.Uint8()
-  int _unique_hidden_item_22;
+  external int _unique_hidden_item_22;
   @ffi.Uint8()
-  int _unique_hidden_item_23;
+  external int _unique_hidden_item_23;
   @ffi.Uint8()
-  int _unique_hidden_item_24;
+  external int _unique_hidden_item_24;
   @ffi.Uint8()
-  int _unique_hidden_item_25;
+  external int _unique_hidden_item_25;
   @ffi.Uint8()
-  int _unique_hidden_item_26;
+  external int _unique_hidden_item_26;
   @ffi.Uint8()
-  int _unique_hidden_item_27;
+  external int _unique_hidden_item_27;
   @ffi.Uint8()
-  int _unique_hidden_item_28;
+  external int _unique_hidden_item_28;
   @ffi.Uint8()
-  int _unique_hidden_item_29;
+  external int _unique_hidden_item_29;
   @ffi.Uint8()
-  int _unique_hidden_item_30;
+  external int _unique_hidden_item_30;
   @ffi.Uint8()
-  int _unique_hidden_item_31;
+  external int _unique_hidden_item_31;
   @ffi.Uint8()
-  int _unique_hidden_item_32;
+  external int _unique_hidden_item_32;
   @ffi.Uint8()
-  int _unique_hidden_item_33;
+  external int _unique_hidden_item_33;
   @ffi.Uint8()
-  int _unique_hidden_item_34;
+  external int _unique_hidden_item_34;
   @ffi.Uint8()
-  int _unique_hidden_item_35;
+  external int _unique_hidden_item_35;
   @ffi.Uint8()
-  int _unique_hidden_item_36;
+  external int _unique_hidden_item_36;
   @ffi.Uint8()
-  int _unique_hidden_item_37;
+  external int _unique_hidden_item_37;
   @ffi.Uint8()
-  int _unique_hidden_item_38;
+  external int _unique_hidden_item_38;
   @ffi.Uint8()
-  int _unique_hidden_item_39;
+  external int _unique_hidden_item_39;
   @ffi.Uint8()
-  int _unique_hidden_item_40;
+  external int _unique_hidden_item_40;
   @ffi.Uint8()
-  int _unique_hidden_item_41;
+  external int _unique_hidden_item_41;
   @ffi.Uint8()
-  int _unique_hidden_item_42;
+  external int _unique_hidden_item_42;
   @ffi.Uint8()
-  int _unique_hidden_item_43;
+  external int _unique_hidden_item_43;
   @ffi.Uint8()
-  int _unique_hidden_item_44;
+  external int _unique_hidden_item_44;
   @ffi.Uint8()
-  int _unique_hidden_item_45;
+  external int _unique_hidden_item_45;
   @ffi.Uint8()
-  int _unique_hidden_item_46;
+  external int _unique_hidden_item_46;
   @ffi.Uint8()
-  int _unique_hidden_item_47;
+  external int _unique_hidden_item_47;
 
   /// Helper for array `hidden`.
   ArrayHelper_sqlite3_snapshot_hidden_level0 get hidden =>
diff --git a/test/native_test/build_test_dylib.dart b/test/native_test/build_test_dylib.dart
index e829231..5ec89ac 100644
--- a/test/native_test/build_test_dylib.dart
+++ b/test/native_test/build_test_dylib.dart
@@ -28,8 +28,6 @@
 
 import 'dart:io';
 
-import 'package:meta/meta.dart';
-
 const macOS = 'macos';
 const windows = 'windows';
 const linux = 'linux';
@@ -57,7 +55,7 @@
 
 void main(List<String> arguments) {
   print('Building Dynamic Library for Native Tests... ');
-  final options = getPlatformOptions();
+  final options = getPlatformOptions()!;
 
   // Run clang compiler to generate the dynamic library.
   // ignore: omit_local_variable_types
@@ -93,7 +91,7 @@
 }
 
 /// Get options based on current platform.
-Options getPlatformOptions() {
+Options? getPlatformOptions() {
   if (Platform.isMacOS) {
     return platformOptions[macOS];
   } else if (Platform.isWindows) {
@@ -123,9 +121,9 @@
   final String moduleDefPath;
 
   Options({
-    @required this.outputfilename,
-    @required this.sharedFlag,
-    @required this.inputHeader,
+    required this.outputfilename,
+    required this.sharedFlag,
+    required this.inputHeader,
     this.fPIC = '',
     this.moduleDefPath = '',
   });
diff --git a/test/native_test/native_test.dart b/test/native_test/native_test.dart
index baa1bac..479b910 100644
--- a/test/native_test/native_test.dart
+++ b/test/native_test/native_test.dart
@@ -14,7 +14,7 @@
 import 'native_test_bindings.dart';
 
 void main() {
-  NativeLibrary bindings;
+  late NativeLibrary bindings;
   group('native_test', () {
     setUpAll(() {
       logWarnings();
@@ -24,8 +24,8 @@
       } else if (Platform.isWindows) {
         dylibName = r'test\native_test\native_test.dll';
       }
-      bindings = NativeLibrary(
-          DynamicLibrary.open(File(dylibName).absolute?.path ?? dylibName));
+      bindings =
+          NativeLibrary(DynamicLibrary.open(File(dylibName).absolute.path));
     });
 
     test('generate_bindings', () {
@@ -46,7 +46,7 @@
           file.delete();
         }
       } catch (e) {
-        print('Failed test: Debug generated file: ${file.absolute?.path}');
+        print('Failed test: Debug generated file: ${file.absolute.path}');
         rethrow;
       }
     });
diff --git a/test/native_test/native_test_bindings.dart b/test/native_test/native_test_bindings.dart
index c5cdd81..60825f1 100644
--- a/test/native_test/native_test_bindings.dart
+++ b/test/native_test/native_test_bindings.dart
@@ -14,183 +14,172 @@
   bool Function1Bool(
     bool x,
   ) {
-    _Function1Bool ??= _dylib
-        .lookupFunction<_c_Function1Bool, _dart_Function1Bool>('Function1Bool');
-    return _Function1Bool(
+    return (_Function1Bool ??=
+            _dylib.lookupFunction<_c_Function1Bool, _dart_Function1Bool>(
+                'Function1Bool'))(
           x ? 1 : 0,
         ) !=
         0;
   }
 
-  _dart_Function1Bool _Function1Bool;
+  _dart_Function1Bool? _Function1Bool;
 
   int Function1Uint8(
     int x,
   ) {
-    _Function1Uint8 ??=
+    return (_Function1Uint8 ??=
         _dylib.lookupFunction<_c_Function1Uint8, _dart_Function1Uint8>(
-            'Function1Uint8');
-    return _Function1Uint8(
+            'Function1Uint8'))(
       x,
     );
   }
 
-  _dart_Function1Uint8 _Function1Uint8;
+  _dart_Function1Uint8? _Function1Uint8;
 
   int Function1Uint16(
     int x,
   ) {
-    _Function1Uint16 ??=
+    return (_Function1Uint16 ??=
         _dylib.lookupFunction<_c_Function1Uint16, _dart_Function1Uint16>(
-            'Function1Uint16');
-    return _Function1Uint16(
+            'Function1Uint16'))(
       x,
     );
   }
 
-  _dart_Function1Uint16 _Function1Uint16;
+  _dart_Function1Uint16? _Function1Uint16;
 
   int Function1Uint32(
     int x,
   ) {
-    _Function1Uint32 ??=
+    return (_Function1Uint32 ??=
         _dylib.lookupFunction<_c_Function1Uint32, _dart_Function1Uint32>(
-            'Function1Uint32');
-    return _Function1Uint32(
+            'Function1Uint32'))(
       x,
     );
   }
 
-  _dart_Function1Uint32 _Function1Uint32;
+  _dart_Function1Uint32? _Function1Uint32;
 
   int Function1Uint64(
     int x,
   ) {
-    _Function1Uint64 ??=
+    return (_Function1Uint64 ??=
         _dylib.lookupFunction<_c_Function1Uint64, _dart_Function1Uint64>(
-            'Function1Uint64');
-    return _Function1Uint64(
+            'Function1Uint64'))(
       x,
     );
   }
 
-  _dart_Function1Uint64 _Function1Uint64;
+  _dart_Function1Uint64? _Function1Uint64;
 
   int Function1Int8(
     int x,
   ) {
-    _Function1Int8 ??= _dylib
-        .lookupFunction<_c_Function1Int8, _dart_Function1Int8>('Function1Int8');
-    return _Function1Int8(
+    return (_Function1Int8 ??=
+        _dylib.lookupFunction<_c_Function1Int8, _dart_Function1Int8>(
+            'Function1Int8'))(
       x,
     );
   }
 
-  _dart_Function1Int8 _Function1Int8;
+  _dart_Function1Int8? _Function1Int8;
 
   int Function1Int16(
     int x,
   ) {
-    _Function1Int16 ??=
+    return (_Function1Int16 ??=
         _dylib.lookupFunction<_c_Function1Int16, _dart_Function1Int16>(
-            'Function1Int16');
-    return _Function1Int16(
+            'Function1Int16'))(
       x,
     );
   }
 
-  _dart_Function1Int16 _Function1Int16;
+  _dart_Function1Int16? _Function1Int16;
 
   int Function1Int32(
     int x,
   ) {
-    _Function1Int32 ??=
+    return (_Function1Int32 ??=
         _dylib.lookupFunction<_c_Function1Int32, _dart_Function1Int32>(
-            'Function1Int32');
-    return _Function1Int32(
+            'Function1Int32'))(
       x,
     );
   }
 
-  _dart_Function1Int32 _Function1Int32;
+  _dart_Function1Int32? _Function1Int32;
 
   int Function1Int64(
     int x,
   ) {
-    _Function1Int64 ??=
+    return (_Function1Int64 ??=
         _dylib.lookupFunction<_c_Function1Int64, _dart_Function1Int64>(
-            'Function1Int64');
-    return _Function1Int64(
+            'Function1Int64'))(
       x,
     );
   }
 
-  _dart_Function1Int64 _Function1Int64;
+  _dart_Function1Int64? _Function1Int64;
 
   int Function1IntPtr(
     int x,
   ) {
-    _Function1IntPtr ??=
+    return (_Function1IntPtr ??=
         _dylib.lookupFunction<_c_Function1IntPtr, _dart_Function1IntPtr>(
-            'Function1IntPtr');
-    return _Function1IntPtr(
+            'Function1IntPtr'))(
       x,
     );
   }
 
-  _dart_Function1IntPtr _Function1IntPtr;
+  _dart_Function1IntPtr? _Function1IntPtr;
 
   double Function1Float(
     double x,
   ) {
-    _Function1Float ??=
+    return (_Function1Float ??=
         _dylib.lookupFunction<_c_Function1Float, _dart_Function1Float>(
-            'Function1Float');
-    return _Function1Float(
+            'Function1Float'))(
       x,
     );
   }
 
-  _dart_Function1Float _Function1Float;
+  _dart_Function1Float? _Function1Float;
 
   double Function1Double(
     double x,
   ) {
-    _Function1Double ??=
+    return (_Function1Double ??=
         _dylib.lookupFunction<_c_Function1Double, _dart_Function1Double>(
-            'Function1Double');
-    return _Function1Double(
+            'Function1Double'))(
       x,
     );
   }
 
-  _dart_Function1Double _Function1Double;
+  _dart_Function1Double? _Function1Double;
 
   ffi.Pointer<Struct1> getStruct1() {
-    _getStruct1 ??=
-        _dylib.lookupFunction<_c_getStruct1, _dart_getStruct1>('getStruct1');
-    return _getStruct1();
+    return (_getStruct1 ??=
+        _dylib.lookupFunction<_c_getStruct1, _dart_getStruct1>('getStruct1'))();
   }
 
-  _dart_getStruct1 _getStruct1;
+  _dart_getStruct1? _getStruct1;
 }
 
 class Struct1 extends ffi.Struct {
   @ffi.Int8()
-  int a;
+  external int a;
 
   @ffi.Int32()
-  int _unique_data_item_0;
+  external int _unique_data_item_0;
   @ffi.Int32()
-  int _unique_data_item_1;
+  external int _unique_data_item_1;
   @ffi.Int32()
-  int _unique_data_item_2;
+  external int _unique_data_item_2;
   @ffi.Int32()
-  int _unique_data_item_3;
+  external int _unique_data_item_3;
   @ffi.Int32()
-  int _unique_data_item_4;
+  external int _unique_data_item_4;
   @ffi.Int32()
-  int _unique_data_item_5;
+  external int _unique_data_item_5;
 
   /// Helper for array `data`.
   ArrayHelper_Struct1_data_level0 get data =>
diff --git a/test/rename_tests/rename_test.dart b/test/rename_tests/rename_test.dart
index 962e545..b6fd403 100644
--- a/test/rename_tests/rename_test.dart
+++ b/test/rename_tests/rename_test.dart
@@ -11,7 +11,7 @@
 
 import '../test_utils.dart';
 
-Library actual, expected;
+late Library actual, expected;
 final functionPrefix = 'fff';
 final structPrefix = 'sss';
 final enumPrefix = 'eee';
diff --git a/test/test_coverage.dart b/test/test_coverage.dart
index a35f0f7..ede39f3 100644
--- a/test/test_coverage.dart
+++ b/test/test_coverage.dart
@@ -13,12 +13,16 @@
     as example_tests_libclang_example_test;
 import 'example_tests/simple_example_test.dart'
     as example_tests_simple_example_test;
+import 'header_parser_tests/dart_handle_test.dart'
+    as header_parser_tests_dart_handle_test;
 import 'header_parser_tests/function_n_struct_test.dart'
     as header_parser_tests_function_n_struct_test;
 import 'header_parser_tests/functions_test.dart'
     as header_parser_tests_functions_test;
 import 'header_parser_tests/macros_test.dart'
     as header_parser_tests_macros_test;
+import 'header_parser_tests/native_func_typedef_test.dart'
+    as header_parser_tests_native_func_typedef_test;
 import 'header_parser_tests/nested_parsing_test.dart'
     as header_parser_tests_nested_parsing_test;
 import 'header_parser_tests/typedef_test.dart'
@@ -37,9 +41,11 @@
   example_tests_libclang_example_test.main();
   collision_tests_decl_decl_collision_test.main();
   collision_tests_reserved_keyword_collision_test.main();
+  header_parser_tests_dart_handle_test.main();
   header_parser_tests_functions_test.main();
   header_parser_tests_macros_test.main();
   header_parser_tests_function_n_struct_test.main();
+  header_parser_tests_native_func_typedef_test.main();
   header_parser_tests_nested_parsing_test.main();
   header_parser_tests_typedef_test.main();
   header_parser_tests_unnamed_enums_test.main();
diff --git a/test/test_utils.dart b/test/test_utils.dart
index 0d94d29..1eebadb 100644
--- a/test/test_utils.dart
+++ b/test/test_utils.dart
@@ -4,6 +4,7 @@
 
 import 'dart:io';
 
+import 'package:collection/collection.dart' show IterableExtension;
 import 'package:ffigen/src/code_generator.dart';
 import 'package:logging/logging.dart';
 import 'package:path/path.dart' as path;
@@ -14,8 +15,7 @@
 extension LibraryTestExt on Library {
   /// Get a [Binding]'s generated string with a given name.
   String getBindingAsString(String name) {
-    final b = bindings.firstWhere((element) => element.name == name,
-        orElse: () => null);
+    final b = bindings.firstWhereOrNull((element) => element.name == name);
     if (b == null) {
       throw NotFoundException("Binding '$name' not found.");
     } else {
@@ -25,8 +25,7 @@
 
   /// Get a [Binding] with a given name.
   Binding getBinding(String name) {
-    final b = bindings.firstWhere((element) => element.name == name,
-        orElse: () => null);
+    final b = bindings.firstWhereOrNull((element) => element.name == name);
     if (b == null) {
       throw NotFoundException("Binding '$name' not found.");
     } else {
@@ -53,7 +52,7 @@
       file.delete();
     }
   } catch (e) {
-    print('Failed test: Debug generated file: ${file.absolute?.path}');
+    print('Failed test: Debug generated file: ${file.absolute.path}');
     rethrow;
   }
 }
diff --git a/tool/coverage.sh b/tool/coverage.sh
new file mode 100755
index 0000000..d43016d
--- /dev/null
+++ b/tool/coverage.sh
@@ -0,0 +1,19 @@
+#!/bin/bash
+
+# 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.
+
+# Fast fail the script on failures.
+set -e
+
+# Gather coverage.
+pub global activate remove_from_coverage
+pub global activate coverage
+# Generate coverage report.
+dart --no-sound-null-safety --pause-isolates-on-exit --disable-service-auth-codes --enable-vm-service=3000 test/test_coverage.dart &
+dart pub global run coverage:collect_coverage --wait-paused --uri=http://127.0.0.1:3000/ -o coverage.json --resume-isolates
+dart pub global run coverage:format_coverage --lcov -i coverage.json -o lcov.info
+
+# Remove extra files from coverage report.
+pub global run remove_from_coverage -f lcov.info -r ".pub-cache"
diff --git a/tool/travis.sh b/tool/travis.sh
deleted file mode 100755
index 341aada..0000000
--- a/tool/travis.sh
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/bash
-
-# 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.
-
-# Fast fail the script on failures.
-set -e
-
-# Gather coverage.
-pub global activate remove_from_coverage
-pub global activate dart_coveralls
-# Generate coverage report.
-pub global run dart_coveralls calc test/test_coverage.dart > lcov.info
-# Remove extra files from coverage report.
-pub global run remove_from_coverage -f lcov.info -r ".pub-cache"