[cfe] Introduce a Kernel annotation builder
Introduce an annotation builder that will eventually be used to
compile Dart annotations to Kernel in outlines.
Change-Id: If882ce27b6012001c04257b867b5dcc596a72105
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/103621
Commit-Queue: Kevin Millikin <kmillikin@google.com>
Commit-Queue: Dmitry Stefantsov <dmitryas@google.com>
Auto-Submit: Kevin Millikin <kmillikin@google.com>
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
diff --git a/pkg/front_end/lib/src/fasta/builder/metadata_builder.dart b/pkg/front_end/lib/src/fasta/builder/metadata_builder.dart
index d3a43df..f43b4a6 100644
--- a/pkg/front_end/lib/src/fasta/builder/metadata_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/metadata_builder.dart
@@ -4,8 +4,6 @@
library fasta.metadata_builder;
-class MetadataBuilder {
- final int charOffset;
-
- MetadataBuilder(this.charOffset);
+abstract class MetadataBuilder {
+ int get charOffset;
}
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_builder.dart
index afd74e5..0206595 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_builder.dart
@@ -34,6 +34,8 @@
export 'kernel_library_builder.dart' show KernelLibraryBuilder;
+export 'kernel_metadata_builder.dart' show KernelMetadataBuilder;
+
export 'kernel_mixin_application_builder.dart'
show KernelMixinApplicationBuilder;
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_metadata_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_metadata_builder.dart
new file mode 100644
index 0000000..7cfa901
--- /dev/null
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_metadata_builder.dart
@@ -0,0 +1,15 @@
+// Copyright (c) 2019, 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.
+
+library fasta.kernel_metadata_builder;
+
+import 'kernel_builder.dart' show MetadataBuilder;
+
+import '../scanner.dart' show Token;
+
+class KernelMetadataBuilder extends MetadataBuilder {
+ final int charOffset;
+
+ KernelMetadataBuilder(Token beginToken) : charOffset = beginToken.charOffset;
+}
diff --git a/pkg/front_end/lib/src/fasta/source/outline_builder.dart b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
index 5cf43f9..43536a0 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -41,6 +41,7 @@
// TODO(ahe): The outline isn't supposed to import kernel-specific builders.
import '../kernel/kernel_builder.dart'
show
+ KernelMetadataBuilder,
KernelMixinApplicationBuilder,
KernelNamedTypeBuilder,
KernelTypeBuilder;
@@ -137,25 +138,17 @@
@override
void endMetadata(Token beginToken, Token periodBeforeName, Token endToken) {
debugEvent("Metadata");
- List arguments = pop();
- popIfNotNull(periodBeforeName); // charOffset.
- String postfix = popIfNotNull(periodBeforeName);
- List<TypeBuilder> typeArguments = pop();
- if (arguments == null) {
- pop(); // charOffset
- pop(); // expression
- push(new MetadataBuilder(beginToken.charOffset));
- } else {
- int charOffset = pop();
- Object typeName = pop();
- if (typeName is ParserRecovery) {
- push(typeName);
- } else {
- library.addConstructorReference(
- typeName, typeArguments, postfix, charOffset);
- push(new MetadataBuilder(beginToken.charOffset));
- }
+ pop(); // arguments
+ if (periodBeforeName != null) {
+ pop(); // offset
+ pop(); // constructor name
}
+ pop(); // type arguments
+ pop(); // offset
+ Object sentinel = pop(); // prefix or constructor
+ push(sentinel is ParserRecovery
+ ? sentinel
+ : new KernelMetadataBuilder(beginToken));
}
@override