Skip to content
Draft
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
1 change: 1 addition & 0 deletions pkgs/ffigen/lib/ffigen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -55,3 +55,4 @@ export 'src/config_provider.dart'
macSdkUri,
xcodePath,
xcodeUri;
export 'src/public_ast.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