Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(68)

Unified Diff: pkg/front_end/lib/src/fasta/kernel/kernel_enum_builder.dart

Issue 2771983004: Implement character offsets for fields and enum constants. (Closed)
Patch Set: Remove TODO. Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: pkg/front_end/lib/src/fasta/kernel/kernel_enum_builder.dart
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_enum_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_enum_builder.dart
index 0e29eee0ab2bb744deb4b13ed3f1770fff140450..6c44b1f74f183f04c08e0ace3e1daa22092bf9e0 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_enum_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_enum_builder.dart
@@ -54,7 +54,7 @@ import '../names.dart' show indexGetName;
class KernelEnumBuilder extends SourceClassBuilder
implements EnumBuilder<KernelTypeBuilder, InterfaceType> {
- final List<String> constants;
+ final List<Object> constantNamesAndOffsets;
final MapLiteral toStringMap;
@@ -67,7 +67,7 @@ class KernelEnumBuilder extends SourceClassBuilder
String name,
Map<String, Builder> members,
Class cls,
- this.constants,
+ this.constantNamesAndOffsets,
this.toStringMap,
this.intType,
this.stringType,
@@ -79,11 +79,11 @@ class KernelEnumBuilder extends SourceClassBuilder
factory KernelEnumBuilder(
List<MetadataBuilder> metadata,
String name,
- List<String> constants,
+ List<Object> constantNamesAndOffsets,
KernelLibraryBuilder parent,
int charOffset,
int charEndOffset) {
- constants ??= const <String>[];
+ constantNamesAndOffsets ??= const <Object>[];
// TODO(ahe): These types shouldn't be looked up in scope, they come
// directly from dart:core.
KernelTypeBuilder intType = parent.addType(
@@ -144,18 +144,15 @@ class KernelEnumBuilder extends SourceClassBuilder
charEndOffset);
members["toString"] = toStringBuilder;
String className = name;
- for (String name in constants) {
+ for (int i = 0; i < constantNamesAndOffsets.length; i += 2) {
+ String name = constantNamesAndOffsets[i];
+ int charOffset = constantNamesAndOffsets[i + 1];
if (members.containsKey(name)) {
inputError(null, null, "Duplicated name: $name");
continue;
}
KernelFieldBuilder fieldBuilder = new KernelFieldBuilder(
- null,
- selfType,
- name,
- constMask | staticMask,
- parent,
- charOffset); // TODO(ahe): Get charOffset from [name].
+ null, selfType, name, constMask | staticMask, parent, charOffset);
members[name] = fieldBuilder;
toStringEntries.add(new MapEntry(
new IntLiteral(index), new StringLiteral("$className.$name")));
@@ -167,7 +164,7 @@ class KernelEnumBuilder extends SourceClassBuilder
name,
members,
cls,
- constants,
+ constantNamesAndOffsets,
toStringMap,
intType,
stringType,
@@ -190,7 +187,7 @@ class KernelEnumBuilder extends SourceClassBuilder
}
Class build(KernelLibraryBuilder libraryBuilder) {
- if (constants.isEmpty) {
+ if (constantNamesAndOffsets.isEmpty) {
libraryBuilder.addCompileTimeError(
-1, "An enum declaration can't be empty.");
}
@@ -206,7 +203,8 @@ class KernelEnumBuilder extends SourceClassBuilder
new DirectPropertyGet(new ThisExpression(), indexField)
])));
List<Expression> values = <Expression>[];
- for (String name in constants) {
+ for (int i = 0; i < constantNamesAndOffsets.length; i += 2) {
+ String name = constantNamesAndOffsets[i];
KernelFieldBuilder builder = members[name];
values.add(new StaticGet(builder.build(libraryBuilder)));
}
@@ -222,7 +220,8 @@ class KernelEnumBuilder extends SourceClassBuilder
new VariableGet(constructor.function.positionalParameters.single))
..parent = constructor);
int index = 0;
- for (String constant in constants) {
+ for (int i = 0; i < constantNamesAndOffsets.length; i += 2) {
+ String constant = constantNamesAndOffsets[i];
KernelFieldBuilder field = members[constant];
field.build(libraryBuilder);
Arguments arguments =
« no previous file with comments | « pkg/front_end/lib/src/fasta/builder/enum_builder.dart ('k') | pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698