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

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

Issue 2691523002: Ensure locations are always provided, but don't store them yet. (Closed)
Patch Set: Address comments. Created 3 years, 10 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library fasta.kernel_enum_builder; 5 library fasta.kernel_enum_builder;
6 6
7 import 'package:kernel/ast.dart' show 7 import 'package:kernel/ast.dart' show
8 Arguments, 8 Arguments,
9 AsyncMarker, 9 AsyncMarker,
10 Class, 10 Class,
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 60
61 final MapLiteral toStringMap; 61 final MapLiteral toStringMap;
62 62
63 final KernelTypeBuilder intType; 63 final KernelTypeBuilder intType;
64 64
65 final KernelTypeBuilder stringType; 65 final KernelTypeBuilder stringType;
66 66
67 KernelEnumBuilder.internal(List<MetadataBuilder> metadata, String name, 67 KernelEnumBuilder.internal(List<MetadataBuilder> metadata, String name,
68 Map<String, Builder> members, List<KernelTypeBuilder> types, Class cls, 68 Map<String, Builder> members, List<KernelTypeBuilder> types, Class cls,
69 this.constants, this.toStringMap, this.intType, this.stringType, 69 this.constants, this.toStringMap, this.intType, this.stringType,
70 LibraryBuilder parent) 70 LibraryBuilder parent, int charOffset)
71 : super(metadata, 0, name, null, null, null, members, types, parent, null, 71 : super(metadata, 0, name, null, null, null, members, types, parent, null,
72 cls); 72 charOffset, cls);
73 73
74 factory KernelEnumBuilder(List<MetadataBuilder> metadata, String name, 74 factory KernelEnumBuilder(List<MetadataBuilder> metadata, String name,
75 List<String> constants, LibraryBuilder parent) { 75 List<String> constants, LibraryBuilder parent, int charOffset) {
76 constants ??= const <String>[]; 76 constants ??= const <String>[];
77 // TODO(ahe): These types shouldn't be looked up in scope, they come 77 // TODO(ahe): These types shouldn't be looked up in scope, they come
78 // directly from dart:core. 78 // directly from dart:core.
79 KernelTypeBuilder objectType = 79 KernelTypeBuilder objectType =
80 new KernelNamedTypeBuilder("Object", null); 80 new KernelNamedTypeBuilder("Object", null, charOffset, parent.fileUri);
81 KernelTypeBuilder intType = 81 KernelTypeBuilder intType =
82 new KernelNamedTypeBuilder("int", null); 82 new KernelNamedTypeBuilder("int", null, charOffset, parent.fileUri);
83 KernelTypeBuilder stringType = 83 KernelTypeBuilder stringType =
84 new KernelNamedTypeBuilder("String", null); 84 new KernelNamedTypeBuilder("String", null, charOffset, parent.fileUri);
85 List<KernelTypeBuilder> types = <KernelTypeBuilder>[ 85 List<KernelTypeBuilder> types = <KernelTypeBuilder>[
86 objectType, 86 objectType,
87 intType, 87 intType,
88 stringType]; 88 stringType];
89 Class cls = new Class(name: name); 89 Class cls = new Class(name: name);
90 Map<String, Builder> members = <String, Builder>{}; 90 Map<String, Builder> members = <String, Builder>{};
91 KernelNamedTypeBuilder selfType = new KernelNamedTypeBuilder( 91 KernelNamedTypeBuilder selfType = new KernelNamedTypeBuilder(
92 name, null); 92 name, null, charOffset, parent.fileUri);
93 KernelTypeBuilder listType = 93 KernelTypeBuilder listType =
94 new KernelNamedTypeBuilder("List", <KernelTypeBuilder>[selfType]); 94 new KernelNamedTypeBuilder(
95 "List", <KernelTypeBuilder>[selfType], charOffset, parent.fileUri);
95 types.add(listType); 96 types.add(listType);
96 97
97 /// From Dart Programming Language Specification 4th Edition/December 2015: 98 /// From Dart Programming Language Specification 4th Edition/December 2015:
98 /// metadata class E { 99 /// metadata class E {
99 /// final int index; 100 /// final int index;
100 /// const E(this.index); 101 /// const E(this.index);
101 /// static const E id0 = const E(0); 102 /// static const E id0 = const E(0);
102 /// ... 103 /// ...
103 /// static const E idn-1 = const E(n - 1); 104 /// static const E idn-1 = const E(n - 1);
104 /// static const List<E> values = const <E>[id0, ..., idn-1]; 105 /// static const List<E> values = const <E>[id0, ..., idn-1];
105 /// String toString() => { 0: ‘E.id0’, . . ., n-1: ‘E.idn-1’}[index] 106 /// String toString() => { 0: ‘E.id0’, . . ., n-1: ‘E.idn-1’}[index]
106 /// } 107 /// }
107 members["index"] = 108 members["index"] = new KernelFieldBuilder(null, intType, "index", finalMask,
108 new KernelFieldBuilder(null, intType, "index", finalMask); 109 parent, charOffset);
109 KernelConstructorBuilder constructorBuilder = new KernelConstructorBuilder( 110 KernelConstructorBuilder constructorBuilder = new KernelConstructorBuilder(
110 null, constMask, null, "", null, <FormalParameterBuilder>[ 111 null, constMask, null, "", null, <FormalParameterBuilder>[
111 new KernelFormalParameterBuilder(null, 0, intType, "index", true)]); 112 new KernelFormalParameterBuilder(null, 0, intType, "index", true,
113 parent, charOffset)], parent, charOffset);
112 members[""] = constructorBuilder; 114 members[""] = constructorBuilder;
113 int index = 0; 115 int index = 0;
114 List<MapEntry> toStringEntries = <MapEntry>[]; 116 List<MapEntry> toStringEntries = <MapEntry>[];
115 KernelFieldBuilder valuesBuilder = new KernelFieldBuilder(null, listType, 117 KernelFieldBuilder valuesBuilder = new KernelFieldBuilder(null, listType,
116 "values", constMask | staticMask); 118 "values", constMask | staticMask, parent, charOffset);
117 members["values"] = valuesBuilder; 119 members["values"] = valuesBuilder;
118 KernelProcedureBuilder toStringBuilder = new KernelProcedureBuilder(null, 0, 120 KernelProcedureBuilder toStringBuilder = new KernelProcedureBuilder(null, 0,
119 stringType, "toString", null, null, AsyncMarker.Sync, 121 stringType, "toString", null, null, AsyncMarker.Sync,
120 ProcedureKind.Method); 122 ProcedureKind.Method, parent, charOffset);
121 members["toString"] = toStringBuilder; 123 members["toString"] = toStringBuilder;
122 String className = name; 124 String className = name;
123 for (String name in constants) { 125 for (String name in constants) {
124 if (members.containsKey(name)) { 126 if (members.containsKey(name)) {
125 inputError(null, null, "Duplicated name: $name"); 127 inputError(null, null, "Duplicated name: $name");
126 continue; 128 continue;
127 } 129 }
128 KernelFieldBuilder fieldBuilder = 130 KernelFieldBuilder fieldBuilder =
129 new KernelFieldBuilder(null, selfType, name, constMask | staticMask); 131 new KernelFieldBuilder(null, selfType, name, constMask | staticMask,
132 parent, charOffset); // TODO(ahe): Get charOffset from [name].
130 members[name] = fieldBuilder; 133 members[name] = fieldBuilder;
131 toStringEntries.add(new MapEntry( 134 toStringEntries.add(new MapEntry(
132 new IntLiteral(index), new StringLiteral("$className.$name"))); 135 new IntLiteral(index), new StringLiteral("$className.$name")));
133 index++; 136 index++;
134 } 137 }
135 MapLiteral toStringMap = new MapLiteral(toStringEntries, isConst: true); 138 MapLiteral toStringMap = new MapLiteral(toStringEntries, isConst: true);
136 KernelEnumBuilder enumBuilder = new KernelEnumBuilder.internal(metadata, 139 KernelEnumBuilder enumBuilder = new KernelEnumBuilder.internal(metadata,
137 name, members, types, cls, constants, toStringMap, intType, stringType, 140 name, members, types, cls, constants, toStringMap, intType, stringType,
138 parent); 141 parent, charOffset);
139 members.forEach((String name, MemberBuilder builder) { 142 members.forEach((String name, MemberBuilder builder) {
140 builder.parent = enumBuilder; 143 builder.parent = enumBuilder;
141 }); 144 });
142 selfType.builder = enumBuilder; 145 selfType.builder = enumBuilder;
143 return enumBuilder; 146 return enumBuilder;
144 } 147 }
145 148
146 InterfaceType buildType(List<KernelTypeBuilder> arguments) { 149 InterfaceType buildType(List<KernelTypeBuilder> arguments) {
147 return cls.rawType; 150 return cls.rawType;
148 } 151 }
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 Arguments arguments = 185 Arguments arguments =
183 new Arguments(<Expression>[new IntLiteral(index++)]); 186 new Arguments(<Expression>[new IntLiteral(index++)]);
184 field.initializer = 187 field.initializer =
185 new ConstructorInvocation(constructor, arguments, isConst: true); 188 new ConstructorInvocation(constructor, arguments, isConst: true);
186 } 189 }
187 return super.build(libraryBuilder); 190 return super.build(libraryBuilder);
188 } 191 }
189 192
190 Builder findConstructorOrFactory(String name) => null; 193 Builder findConstructorOrFactory(String name) => null;
191 } 194 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698