Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
Next Next commit
adds new internal options for each options class, fixes a few bits of…
… old broken code.
  • Loading branch information
tarrinneal committed Feb 21, 2025
commit 033b0ef5f7b9dfee583f7db3008de5421724520e
101 changes: 73 additions & 28 deletions packages/pigeon/lib/src/cpp/cpp_generator.dart
Original file line number Diff line number Diff line change
Expand Up @@ -93,15 +93,60 @@ class CppOptions {
}
}

/// Options that control how C++ code will be generated.
///
/// For internal use only.
class InternalCppOptions {
/// Creates a [InternalCppOptions] object.
const InternalCppOptions({
this.headerIncludePath,
this.cppHeaderOut,
this.cppSourceOut,
this.namespace,
this.copyrightHeader,
this.headerOutPath,
});

/// Creates InternalCppOptions from CppOptions.
InternalCppOptions.fromCppOptions(
CppOptions options, {
this.cppHeaderOut,
this.cppSourceOut,
Iterable<String>? copyrightHeader,
}) : headerIncludePath = options.headerIncludePath,
namespace = options.namespace,
copyrightHeader = options.copyrightHeader ?? copyrightHeader,
headerOutPath = options.headerOutPath;

/// The path to the header that will get placed in the source filed (example:
/// "foo.h").
final String? headerIncludePath;

/// Path to the ".h" C++ file that will be generated.
final String? cppHeaderOut;

/// Path to the ".cpp" C++ file that will be generated.
final String? cppSourceOut;

/// The namespace where the generated class will live.
final String? namespace;

/// A copyright header that will get prepended to generated code.
final Iterable<String>? copyrightHeader;

/// The path to the output header file location.
final String? headerOutPath;
}

/// Class that manages all Cpp code generation.
class CppGenerator extends Generator<OutputFileOptions<CppOptions>> {
class CppGenerator extends Generator<OutputFileOptions<InternalCppOptions>> {
/// Constructor.
const CppGenerator();

/// Generates C++ file of type specified in [generatorOptions]
@override
void generate(
OutputFileOptions<CppOptions> generatorOptions,
OutputFileOptions<InternalCppOptions> generatorOptions,
Root root,
StringSink sink, {
required String dartPackageName,
Expand All @@ -127,13 +172,13 @@ class CppGenerator extends Generator<OutputFileOptions<CppOptions>> {
}

/// Writes C++ header (.h) file to sink.
class CppHeaderGenerator extends StructuredGenerator<CppOptions> {
class CppHeaderGenerator extends StructuredGenerator<InternalCppOptions> {
/// Constructor.
const CppHeaderGenerator();

@override
void writeFilePrologue(
CppOptions generatorOptions,
InternalCppOptions generatorOptions,
Root root,
Indent indent, {
required String dartPackageName,
Expand All @@ -148,7 +193,7 @@ class CppHeaderGenerator extends StructuredGenerator<CppOptions> {

@override
void writeFileImports(
CppOptions generatorOptions,
InternalCppOptions generatorOptions,
Root root,
Indent indent, {
required String dartPackageName,
Expand Down Expand Up @@ -185,7 +230,7 @@ class CppHeaderGenerator extends StructuredGenerator<CppOptions> {

@override
void writeEnum(
CppOptions generatorOptions,
InternalCppOptions generatorOptions,
Root root,
Indent indent,
Enum anEnum, {
Expand All @@ -208,7 +253,7 @@ class CppHeaderGenerator extends StructuredGenerator<CppOptions> {

@override
void writeGeneralUtilities(
CppOptions generatorOptions,
InternalCppOptions generatorOptions,
Root root,
Indent indent, {
required String dartPackageName,
Expand All @@ -226,7 +271,7 @@ class CppHeaderGenerator extends StructuredGenerator<CppOptions> {

@override
void writeDataClasses(
CppOptions generatorOptions,
InternalCppOptions generatorOptions,
Root root,
Indent indent, {
required String dartPackageName,
Expand All @@ -252,7 +297,7 @@ class CppHeaderGenerator extends StructuredGenerator<CppOptions> {

@override
void writeDataClass(
CppOptions generatorOptions,
InternalCppOptions generatorOptions,
Root root,
Indent indent,
Class classDefinition, {
Expand Down Expand Up @@ -399,7 +444,7 @@ class CppHeaderGenerator extends StructuredGenerator<CppOptions> {

@override
void writeGeneralCodec(
CppOptions generatorOptions,
InternalCppOptions generatorOptions,
Root root,
Indent indent, {
required String dartPackageName,
Expand Down Expand Up @@ -443,7 +488,7 @@ class CppHeaderGenerator extends StructuredGenerator<CppOptions> {

@override
void writeFlutterApi(
CppOptions generatorOptions,
InternalCppOptions generatorOptions,
Root root,
Indent indent,
AstFlutterApi api, {
Expand Down Expand Up @@ -498,7 +543,7 @@ class CppHeaderGenerator extends StructuredGenerator<CppOptions> {

@override
void writeHostApi(
CppOptions generatorOptions,
InternalCppOptions generatorOptions,
Root root,
Indent indent,
AstHostApi api, {
Expand Down Expand Up @@ -660,7 +705,7 @@ $friendLines

@override
void writeCloseNamespace(
CppOptions generatorOptions,
InternalCppOptions generatorOptions,
Root root,
Indent indent, {
required String dartPackageName,
Expand All @@ -674,13 +719,13 @@ $friendLines
}

/// Writes C++ source (.cpp) file to sink.
class CppSourceGenerator extends StructuredGenerator<CppOptions> {
class CppSourceGenerator extends StructuredGenerator<InternalCppOptions> {
/// Constructor.
const CppSourceGenerator();

@override
void writeFilePrologue(
CppOptions generatorOptions,
InternalCppOptions generatorOptions,
Root root,
Indent indent, {
required String dartPackageName,
Expand All @@ -697,7 +742,7 @@ class CppSourceGenerator extends StructuredGenerator<CppOptions> {

@override
void writeFileImports(
CppOptions generatorOptions,
InternalCppOptions generatorOptions,
Root root,
Indent indent, {
required String dartPackageName,
Expand All @@ -721,7 +766,7 @@ class CppSourceGenerator extends StructuredGenerator<CppOptions> {

@override
void writeOpenNamespace(
CppOptions generatorOptions,
InternalCppOptions generatorOptions,
Root root,
Indent indent, {
required String dartPackageName,
Expand All @@ -733,7 +778,7 @@ class CppSourceGenerator extends StructuredGenerator<CppOptions> {

@override
void writeGeneralUtilities(
CppOptions generatorOptions,
InternalCppOptions generatorOptions,
Root root,
Indent indent, {
required String dartPackageName,
Expand Down Expand Up @@ -763,7 +808,7 @@ class CppSourceGenerator extends StructuredGenerator<CppOptions> {

@override
void writeDataClass(
CppOptions generatorOptions,
InternalCppOptions generatorOptions,
Root root,
Indent indent,
Class classDefinition, {
Expand Down Expand Up @@ -817,7 +862,7 @@ class CppSourceGenerator extends StructuredGenerator<CppOptions> {

@override
void writeClassEncode(
CppOptions generatorOptions,
InternalCppOptions generatorOptions,
Root root,
Indent indent,
Class classDefinition, {
Expand Down Expand Up @@ -848,7 +893,7 @@ class CppSourceGenerator extends StructuredGenerator<CppOptions> {

@override
void writeClassDecode(
CppOptions generatorOptions,
InternalCppOptions generatorOptions,
Root root,
Indent indent,
Class classDefinition, {
Expand Down Expand Up @@ -919,7 +964,7 @@ class CppSourceGenerator extends StructuredGenerator<CppOptions> {
}

void _writeCodecOverflowUtilities(
CppOptions generatorOptions,
InternalCppOptions generatorOptions,
Root root,
Indent indent,
List<EnumeratedType> types, {
Expand Down Expand Up @@ -986,7 +1031,7 @@ EncodableValue $_overflowClassName::FromEncodableList(

@override
void writeGeneralCodec(
CppOptions generatorOptions,
InternalCppOptions generatorOptions,
Root root,
Indent indent, {
required String dartPackageName,
Expand Down Expand Up @@ -1081,7 +1126,7 @@ EncodableValue $_overflowClassName::FromEncodableList(

@override
void writeFlutterApi(
CppOptions generatorOptions,
InternalCppOptions generatorOptions,
Root root,
Indent indent,
AstFlutterApi api, {
Expand Down Expand Up @@ -1215,7 +1260,7 @@ EncodableValue $_overflowClassName::FromEncodableList(

@override
void writeHostApi(
CppOptions generatorOptions,
InternalCppOptions generatorOptions,
Root root,
Indent indent,
AstHostApi api, {
Expand Down Expand Up @@ -1439,7 +1484,7 @@ return EncodableValue(EncodableList{
});
}

void _writeCppSourceClassField(CppOptions generatorOptions, Root root,
void _writeCppSourceClassField(InternalCppOptions generatorOptions, Root root,
Indent indent, Class classDefinition, NamedType field) {
final HostDatatype hostDatatype =
getFieldHostDatatype(field, _shortBaseCppTypeForBuiltinDartType);
Expand Down Expand Up @@ -1570,7 +1615,7 @@ ${prefix}reply(EncodableValue(std::move(wrapped)));''';

@override
void writeCloseNamespace(
CppOptions generatorOptions,
InternalCppOptions generatorOptions,
Root root,
Indent indent, {
required String dartPackageName,
Expand Down Expand Up @@ -2085,7 +2130,7 @@ void _writeAccessBlock(
}

/// Validates an AST to make sure the cpp generator supports everything.
List<Error> validateCpp(CppOptions options, Root root) {
List<Error> validateCpp(InternalCppOptions options, Root root) {
final List<Error> result = <Error>[];
for (final Api api in root.apis) {
for (final Method method in api.methods) {
Expand Down
Loading