Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 4 additions & 5 deletions pkgs/ffigen/lib/src/code_generator/func.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
// BSD-style license that can be found in the LICENSE file.

import '../code_generator.dart';
import '../config_provider/config_types.dart';
import '../visitor/ast.dart';

import 'binding_string.dart';
Expand Down Expand Up @@ -47,7 +46,7 @@ class Func extends LookUpBinding {
final bool isLeaf;
final bool objCReturnsRetained;
final bool useNameForLookup;
final FfiNativeConfig ffiNativeConfig;
final bool loadFromNativeAsset;
late final String funcPointerName;

/// Contains typealias for function type if [exposeFunctionTypedefs] is true.
Expand All @@ -69,7 +68,7 @@ class Func extends LookUpBinding {
this.objCReturnsRetained = false,
this.useNameForLookup = false,
super.isInternal,
this.ffiNativeConfig = const FfiNativeConfig(enabled: false),
this.loadFromNativeAsset = false,
}) : functionType = FunctionType(
returnType: returnType,
parameters: parameters ?? const [],
Expand Down Expand Up @@ -158,7 +157,7 @@ class Func extends LookUpBinding {
funcImplCall = '$funcVarName($argString)';
}

if (ffiNativeConfig.enabled) {
if (loadFromNativeAsset) {
final nativeFuncName = needsWrapper ? funcVarName : enclosingFuncName;
s.write('''
${makeNativeAnnotation(w, nativeType: cType, dartName: nativeFuncName, nativeSymbolName: _lookupName, isLeaf: isLeaf)}
Expand Down Expand Up @@ -223,7 +222,7 @@ late final $funcVarName = $funcPointerName.asFunction<$dartType>($isLeafString);
visitor.visit(functionType);
visitor.visit(_exposedFunctionTypealias);
visitor.visit(ffiImport);
if (ffiNativeConfig.enabled && exposeSymbolAddress) {
if (loadFromNativeAsset && exposeSymbolAddress) {
visitor.visit(selfImport);
}
}
Expand Down
1 change: 0 additions & 1 deletion pkgs/ffigen/lib/src/code_generator/func_type.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import '../code_generator.dart';
import '../context.dart';
import '../visitor/ast.dart';

import 'unique_namer.dart';

/// Represents a function type.
Expand Down
12 changes: 5 additions & 7 deletions pkgs/ffigen/lib/src/code_generator/global.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@
// 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 '../config_provider/config_types.dart';
import '../visitor/ast.dart';

import 'binding.dart';
import 'binding_string.dart';
import 'compound.dart';
Expand All @@ -27,7 +25,7 @@ import 'writer.dart';
class Global extends LookUpBinding {
final Type type;
final bool exposeSymbolAddress;
final FfiNativeConfig nativeConfig;
final bool loadFromNativeAsset;
final bool constant;

Global({
Expand All @@ -38,7 +36,7 @@ class Global extends LookUpBinding {
super.dartDoc,
this.exposeSymbolAddress = false,
this.constant = false,
this.nativeConfig = const FfiNativeConfig(enabled: false),
this.loadFromNativeAsset = false,
});

@override
Expand All @@ -52,7 +50,7 @@ class Global extends LookUpBinding {

// Removing pointer reference for ConstantArray cType since we always wrap
// globals with pointer below.
final cType = (type is ConstantArray && !nativeConfig.enabled)
final cType = (type is ConstantArray && !loadFromNativeAsset)
? (type as ConstantArray).child.getCType(context)
: type.getCType(context);

Expand Down Expand Up @@ -84,7 +82,7 @@ class Global extends LookUpBinding {
}
}

if (nativeConfig.enabled) {
if (loadFromNativeAsset) {
if (type case final ConstantArray arr) {
s.writeln(makeArrayAnnotation(w, arr));
}
Expand Down Expand Up @@ -168,7 +166,7 @@ class Global extends LookUpBinding {
super.visitChildren(visitor);
visitor.visit(type);
visitor.visit(ffiImport);
if (nativeConfig.enabled && exposeSymbolAddress) {
if (loadFromNativeAsset && exposeSymbolAddress) {
visitor.visit(selfImport);
}
}
Expand Down
32 changes: 14 additions & 18 deletions pkgs/ffigen/lib/src/code_generator/library.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import 'package:yaml_edit/yaml_edit.dart';

import '../code_generator.dart';
import '../code_generator/utils.dart';
import '../config_provider/config.dart' show Config;
import '../config_provider/config_types.dart';
import '../context.dart';

Expand All @@ -24,21 +23,20 @@ class Library {

Library._(this.bindings, this.writer, this.context);

static Library fromConfig({
required Config config,
static Library fromContext({
required List<Binding> bindings,
required Context context,
}) => Library(
name: config.wrapperName,
description: config.wrapperDocComment,
name: context.config.wrapperName,
description: context.config.wrapperDocComment,
bindings: bindings,
header: config.preamble,
header: context.config.preamble,
generateForPackageObjectiveC:
// ignore: deprecated_member_use_from_same_package
config.objectiveC?.generateForPackageObjectiveC ?? false,
libraryImports: config.libraryImports.values.toList(),
silenceEnumWarning: config.enums.silenceWarning,
nativeEntryPoints: config.entryPoints
context.config.objectiveC?.generateForPackageObjectiveC ?? false,
libraryImports: context.config.libraryImports.values.toList(),
silenceEnumWarning: context.config.enums.silenceWarning,
nativeEntryPoints: context.config.entryPoints
.map((uri) => uri.toFilePath())
.toList(),
context: context,
Expand All @@ -61,18 +59,16 @@ class Library {
FfiNativeConfig? nativeConfig;

for (final binding in bindings.whereType<LookUpBinding>()) {
final nativeConfigForBinding = switch (binding) {
Func() => binding.ffiNativeConfig,
Global() => binding.nativeConfig,
_ => null,
final loadFromNativeAsset = switch (binding) {
Func() => binding.loadFromNativeAsset,
Global() => binding.loadFromNativeAsset,
_ => false,
};

// At the moment, all bindings share their native config.
nativeConfig ??= nativeConfigForBinding;
if (loadFromNativeAsset) nativeConfig = context.config.ffiNativeConfig;

final usesLookup =
nativeConfigForBinding == null || !nativeConfigForBinding.enabled;
(usesLookup ? lookupBindings : nativeBindings).add(binding);
(loadFromNativeAsset ? nativeBindings : lookupBindings).add(binding);
}
final noLookUpBindings = bindings.whereType<NoLookUpBinding>().toList();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
// BSD-style license that can be found in the LICENSE file.

import '../code_generator.dart';
import '../config_provider/config_types.dart';
import '../context.dart';
import '../visitor/ast.dart';

Expand Down Expand Up @@ -180,7 +179,7 @@ class ObjCBuiltInFunctions {
isLeaf: true,
isInternal: true,
useNameForLookup: true,
ffiNativeConfig: const FfiNativeConfig(enabled: true),
loadFromNativeAsset: true,
);

final _protocolTrampolines = <String, ObjCProtocolMethodTrampoline>{};
Expand All @@ -202,7 +201,7 @@ class ObjCBuiltInFunctions {
isLeaf: false,
isInternal: true,
useNameForLookup: true,
ffiNativeConfig: const FfiNativeConfig(enabled: true),
loadFromNativeAsset: true,
),
);
}
Expand Down
2 changes: 1 addition & 1 deletion pkgs/ffigen/lib/src/code_generator/writer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -317,7 +317,7 @@ class Writer {
bindings.sort((a, b) => a.usr.compareTo(b.usr));

final usesFfiNative = bindings.whereType<Func>().any(
(element) => element.ffiNativeConfig.enabled,
(element) => element.loadFromNativeAsset,
);

return {
Expand Down
3 changes: 1 addition & 2 deletions pkgs/ffigen/lib/src/header_parser/parser.dart
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,8 @@ import 'translation_unit_parser.dart';
import 'utils.dart';

/// Main entrypoint for header_parser.
Library parse(Context context) => Library.fromConfig(
Library parse(Context context) => Library.fromContext(
bindings: transformBindings(parseToBindings(context), context),
config: context.config,
context: context,
);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ List<Func> parseFunctionDeclaration(
exposeFunctionTypedefs: config.functions.includeTypedef(decl),
isLeaf: config.functions.isLeaf(decl),
objCReturnsRetained: objCReturnsRetained,
ffiNativeConfig: config.ffiNativeConfig,
loadFromNativeAsset: config.ffiNativeConfig.enabled,
),
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ Global? parseVarDeclaration(Context context, clang_types.CXCursor cursor) {
dartDoc: getCursorDocComment(context, cursor),
exposeSymbolAddress: config.globals.includeSymbolAddress(decl),
constant: cType.isConstQualified,
nativeConfig: config.ffiNativeConfig,
loadFromNativeAsset: config.ffiNativeConfig.enabled,
);
bindingsIndex.addGlobalVarToSeen(usr, global);

Expand Down
Loading
Loading