Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
71a5ef1
Headers -> Input
liamappelbe Aug 5, 2026
6290055
Typedef.imported -> FfiGenerator.typedefImports
liamappelbe Aug 5, 2026
cff41da
consolidate import fields
liamappelbe Aug 5, 2026
0be4628
Remove library imports (dead code)
liamappelbe Aug 5, 2026
66321a9
Remove extension type Config utils
liamappelbe Aug 5, 2026
e46d542
Revert "Headers -> Input"
liamappelbe Aug 5, 2026
ac40afe
Revert "Remove library imports (dead code)"
liamappelbe Aug 5, 2026
ed24f4c
clean up
liamappelbe Aug 5, 2026
ae82773
Switch to callbacks for imports
liamappelbe Aug 5, 2026
e210b54
revert unnecessary ImportedType.usr field
liamappelbe Aug 5, 2026
2fe0314
Merge branch 'main' into ffigen_config_update_2
liamappelbe Aug 5, 2026
60caeb8
Renaming AST
liamappelbe Aug 6, 2026
19a0c6b
clean up
liamappelbe Aug 6, 2026
ae13ce9
nits
liamappelbe Aug 6, 2026
0281eda
Merge branch 'main' into ffigen_config_update_3
liamappelbe Aug 6, 2026
37c01ba
Inline visitor construction
liamappelbe Aug 6, 2026
8773112
wip
liamappelbe Aug 6, 2026
755df31
Parent/child relationships
liamappelbe Aug 6, 2026
f874e79
clean up
liamappelbe Aug 6, 2026
35c3038
clean up
liamappelbe Aug 6, 2026
434c236
clean up docs
liamappelbe Aug 7, 2026
ac20f15
clean up
liamappelbe Aug 7, 2026
dd77772
fmt
liamappelbe Aug 7, 2026
51cda38
clean up
liamappelbe Aug 7, 2026
698b959
clean up
liamappelbe Aug 7, 2026
26387fa
clean up
liamappelbe Aug 7, 2026
6d88f22
fix tests
liamappelbe Aug 7, 2026
bee766c
clean up
liamappelbe Aug 7, 2026
a50e8a2
fmt
liamappelbe Aug 7, 2026
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
2 changes: 2 additions & 0 deletions pkgs/ffigen/lib/ffigen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -55,3 +55,5 @@ export 'src/config_provider.dart'
macSdkUri,
xcodePath,
xcodeUri;
export 'src/public_ast.dart';
export 'src/public_visitor.dart';
4 changes: 4 additions & 0 deletions pkgs/ffigen/lib/src/code_generator/binding.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
// BSD-style license that can be found in the LICENSE file.

import '../config_provider/config_types.dart' show Declaration;
import '../public_ast.dart' as public_ast;
import '../visitor/ast.dart';
import 'binding_string.dart';
import 'scope.dart';
Expand Down Expand Up @@ -61,6 +62,9 @@ abstract class Binding extends AstNode implements Declaration {
/// Returns the Cpp glue code for this binding, if any.
String? toCppBindingString(Writer w) => null;

/// Returns the public AST node wrapper for this binding, or null.
public_ast.AstNode? toPublicAstNode() => null;

@override
void visit(Visitation visitation) => visitation.visitBinding(this);

Expand Down
8 changes: 4 additions & 4 deletions pkgs/ffigen/lib/src/code_generator/compound.dart
Original file line number Diff line number Diff line change
Expand Up @@ -252,21 +252,21 @@ class CompoundMember extends AstNode {
final String originalName;
final Type type;

final Symbol _symbol;
String get name => _symbol.name;
final Symbol symbol;
String get name => symbol.name;

CompoundMember({
String? originalName,
required String name,
required this.type,
this.dartDoc,
}) : originalName = originalName ?? name,
_symbol = Symbol(name, SymbolKind.field);
symbol = Symbol(name, SymbolKind.field);

@override
void visitChildren(Visitor visitor) {
super.visitChildren(visitor);
visitor.visit(_symbol);
visitor.visit(symbol);
visitor.visit(type);
}
}
7 changes: 7 additions & 0 deletions pkgs/ffigen/lib/src/code_generator/constant.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
// BSD-style license that can be found in the LICENSE file.

import '../header_parser/sub_parsers/api_availability.dart';
import '../public_ast.dart' as public_ast;
import '../visitor/ast.dart';
import 'binding.dart';
import 'binding_string.dart';
Expand Down Expand Up @@ -76,6 +77,9 @@ class UnnamedEnumConstant extends Constant {
super.apiAvailability,
});

@override
public_ast.AstNode? toPublicAstNode() => public_ast.UnnamedEnumConstant(this);

@override
void visit(Visitation visitation) =>
visitation.visitUnnamedEnumConstant(this);
Expand All @@ -93,6 +97,9 @@ class MacroConstant extends Constant {
super.apiAvailability,
});

@override
public_ast.AstNode? toPublicAstNode() => public_ast.MacroConstant(this);

@override
void visit(Visitation visitation) => visitation.visitMacroConstant(this);
}
4 changes: 4 additions & 0 deletions pkgs/ffigen/lib/src/code_generator/cpp_class.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

import '../code_generator.dart';
import '../context.dart';
import '../public_ast.dart' as public_ast;
import '../visitor/ast.dart';

import 'binding_string.dart';
Expand Down Expand Up @@ -80,6 +81,9 @@ class CppClass extends BindingType with HasLocalScope {
required this.fields,
});

@override
public_ast.AstNode? toPublicAstNode() => public_ast.CppClass(this);

@override
void visit(Visitation visitation) => visitation.visitCppClass(this);

Expand Down
13 changes: 9 additions & 4 deletions pkgs/ffigen/lib/src/code_generator/enum_class.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import 'package:collection/collection.dart';
import '../config_provider.dart';
import '../context.dart';
import '../header_parser/sub_parsers/api_availability.dart';
import '../public_ast.dart' as public_ast;
import '../visitor/ast.dart';
import 'binding_string.dart';
import 'imports.dart';
Expand Down Expand Up @@ -72,6 +73,10 @@ class EnumClass extends BindingType with HasLocalScope {
}) : nativeType = nativeType ?? intType,
enumConstants = enumConstants ?? [];

@override
public_ast.AstNode? toPublicAstNode() =>
isAnonymous ? null : public_ast.EnumClass(this);

/// Returns a string to declare the enum member and any documentation it may
/// have had.
String _formatValue(EnumConstant ec, {bool asInt = false}) {
Expand Down Expand Up @@ -300,20 +305,20 @@ class EnumConstant extends AstNode {
final String? dartDoc;
final int value;

final Symbol _symbol;
String get name => _symbol.name;
final Symbol symbol;
String get name => symbol.name;

EnumConstant({
String? originalName,
required String name,
required this.value,
this.dartDoc,
}) : originalName = originalName ?? name,
_symbol = Symbol(name, SymbolKind.field);
symbol = Symbol(name, SymbolKind.field);

@override
void visitChildren(Visitor visitor) {
super.visitChildren(visitor);
visitor.visit(_symbol);
visitor.visit(symbol);
}
}
4 changes: 4 additions & 0 deletions pkgs/ffigen/lib/src/code_generator/func.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import '../code_generator.dart';
import '../context.dart';
import '../header_parser/sub_parsers/api_availability.dart';
import '../public_ast.dart' as public_ast;
import '../visitor/ast.dart';
import 'binding_string.dart';
import 'local_variables.dart';
Expand Down Expand Up @@ -107,6 +108,9 @@ class Func extends LookUpBinding with HasLocalScope {
}
}

@override
public_ast.AstNode? toPublicAstNode() => public_ast.Func(this);

@override
BindingString toBindingString(Writer w) {
final s = StringBuffer();
Expand Down
4 changes: 4 additions & 0 deletions pkgs/ffigen/lib/src/code_generator/global.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +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 '../public_ast.dart' as public_ast;
import '../visitor/ast.dart';
import 'binding.dart';
import 'binding_string.dart';
Expand Down Expand Up @@ -43,6 +44,9 @@ class Global extends LookUpBinding with HasLocalScope {
this.loadFromNativeAsset = false,
}) : super(symbol: Symbol(name, SymbolKind.field));

@override
public_ast.AstNode? toPublicAstNode() => public_ast.Global(this);

@override
BindingString toBindingString(Writer w) {
final s = StringBuffer();
Expand Down
4 changes: 4 additions & 0 deletions pkgs/ffigen/lib/src/code_generator/objc_category.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import '../code_generator.dart';
import '../context.dart';
import '../header_parser/sub_parsers/api_availability.dart';
import '../public_ast.dart' as public_ast;
import '../visitor/ast.dart';
import 'binding_string.dart';
import 'scope.dart';
Expand Down Expand Up @@ -45,6 +46,9 @@ class ObjCCategory extends NoLookUpBinding with ObjCMethods, HasLocalScope {
bool get isObjCImport =>
context.objCBuiltInFunctions.isBuiltInCategory(originalName);

@override
public_ast.AstNode? toPublicAstNode() => public_ast.ObjCCategory(this);

@override
BindingString toBindingString(Writer w) {
final s = StringBuffer();
Expand Down
6 changes: 5 additions & 1 deletion pkgs/ffigen/lib/src/code_generator/objc_interface.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import '../code_generator.dart';
import '../context.dart';
import '../header_parser/sub_parsers/api_availability.dart';
import '../public_ast.dart' as public_ast;
import '../visitor/ast.dart';
import 'binding_string.dart';
import 'local_variables.dart';
Expand All @@ -19,7 +20,7 @@ class ObjCInterface extends BindingType with ObjCMethods, HasLocalScope {
bool filled = false;

final String? module;
late final NoLookUpBinding classObject;
late final ObjCClassGlobal classObject;
late final ObjCInternalGlobal _isKindOfClass;
late final ObjCMsgSendFunc _isKindOfClassMsgSend;
final protocols = <ObjCProtocol>[];
Expand Down Expand Up @@ -108,6 +109,9 @@ class ObjCInterface extends BindingType with ObjCMethods, HasLocalScope {

bool get unavailable => apiAvailability.availability == Availability.none;

@override
public_ast.AstNode? toPublicAstNode() => public_ast.ObjCInterface(this);

@override
BindingString toBindingString(Writer w) {
final context = w.context;
Expand Down
2 changes: 2 additions & 0 deletions pkgs/ffigen/lib/src/code_generator/objc_methods.dart
Original file line number Diff line number Diff line change
Expand Up @@ -324,6 +324,8 @@ class ObjCMethod extends AstNode with HasLocalScope {
bool get isProperty =>
kind == ObjCMethodKind.propertyGetter ||
kind == ObjCMethodKind.propertySetter;
bool get isPropertyGetter => kind == ObjCMethodKind.propertyGetter;
bool get isPropertySetter => kind == ObjCMethodKind.propertySetter;
bool get isRequired => !isOptional;
bool get isInstanceMethod => !isClassMethod;
bool get unavailable => apiAvailability.availability == Availability.none;
Expand Down
4 changes: 4 additions & 0 deletions pkgs/ffigen/lib/src/code_generator/objc_protocol.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import '../code_generator.dart';
import '../context.dart';
import '../header_parser/sub_parsers/api_availability.dart';
import '../public_ast.dart' as public_ast;
import '../visitor/ast.dart';
import 'binding_string.dart';
import 'local_variables.dart';
Expand Down Expand Up @@ -71,6 +72,9 @@ class ObjCProtocol extends BindingType with ObjCMethods, HasLocalScope {

bool get unavailable => apiAvailability.availability == Availability.none;

@override
public_ast.AstNode? toPublicAstNode() => public_ast.ObjCProtocol(this);

@override
BindingString toBindingString(Writer w) {
final protocolClass = ObjCBuiltInFunctions.protocolClass.gen(context);
Expand Down
4 changes: 4 additions & 0 deletions pkgs/ffigen/lib/src/code_generator/struct.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +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 '../public_ast.dart' as public_ast;
import '../visitor/ast.dart';

import 'compound.dart';
Expand Down Expand Up @@ -48,6 +49,9 @@ class Struct extends Compound {
@override
int? pack;

@override
public_ast.AstNode? toPublicAstNode() => public_ast.Struct(this);

@override
void visit(Visitation visitation) => visitation.visitStruct(this);
}
4 changes: 4 additions & 0 deletions pkgs/ffigen/lib/src/code_generator/typealias.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

import '../code_generator.dart';
import '../context.dart';
import '../public_ast.dart' as public_ast;
import '../strings.dart' as strings;
import '../visitor/ast.dart';
import 'binding_string.dart';
Expand Down Expand Up @@ -106,6 +107,9 @@ class Typealias extends BindingType {
return pointee.type;
}

@override
public_ast.AstNode? toPublicAstNode() => public_ast.Typealias(this);

@override
BindingString toBindingString(Writer w) {
assert(!isAnonymous);
Expand Down
4 changes: 4 additions & 0 deletions pkgs/ffigen/lib/src/code_generator/union.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +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 '../public_ast.dart' as public_ast;
import '../visitor/ast.dart';

import 'compound.dart';
Expand Down Expand Up @@ -45,6 +46,9 @@ class Union extends Compound {
@override
int? get pack => null;

@override
public_ast.AstNode? toPublicAstNode() => public_ast.Union(this);

@override
void visit(Visitation visitation) => visitation.visitUnion(this);
}
Loading
Loading