OLD | NEW |
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:front_end/src/fasta/builder/ast_factory.dart' show AstFactory; |
| 8 |
7 import 'package:kernel/ast.dart' | 9 import 'package:kernel/ast.dart' |
8 show | 10 show |
9 Arguments, | 11 Arguments, |
10 AsyncMarker, | 12 AsyncMarker, |
11 Class, | 13 Class, |
12 Constructor, | 14 Constructor, |
13 ConstructorInvocation, | 15 ConstructorInvocation, |
14 DirectPropertyGet, | 16 DirectPropertyGet, |
15 Expression, | 17 Expression, |
16 Field, | 18 Field, |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
80 this.intType, | 82 this.intType, |
81 this.listType, | 83 this.listType, |
82 this.objectType, | 84 this.objectType, |
83 this.stringType, | 85 this.stringType, |
84 LibraryBuilder parent, | 86 LibraryBuilder parent, |
85 int charOffset) | 87 int charOffset) |
86 : super(metadata, 0, name, null, null, null, scope, constructors, parent, | 88 : super(metadata, 0, name, null, null, null, scope, constructors, parent, |
87 null, charOffset, cls); | 89 null, charOffset, cls); |
88 | 90 |
89 factory KernelEnumBuilder( | 91 factory KernelEnumBuilder( |
| 92 AstFactory astFactory, |
90 List<MetadataBuilder> metadata, | 93 List<MetadataBuilder> metadata, |
91 String name, | 94 String name, |
92 List<Object> constantNamesAndOffsets, | 95 List<Object> constantNamesAndOffsets, |
93 KernelLibraryBuilder parent, | 96 KernelLibraryBuilder parent, |
94 int charOffset, | 97 int charOffset, |
95 int charEndOffset) { | 98 int charEndOffset) { |
96 constantNamesAndOffsets ??= const <Object>[]; | 99 constantNamesAndOffsets ??= const <Object>[]; |
97 // TODO(ahe): These types shouldn't be looked up in scope, they come | 100 // TODO(ahe): These types shouldn't be looked up in scope, they come |
98 // directly from dart:core. | 101 // directly from dart:core. |
99 KernelTypeBuilder intType = | 102 KernelTypeBuilder intType = |
(...skipping 14 matching lines...) Expand all Loading... |
114 /// metadata class E { | 117 /// metadata class E { |
115 /// final int index; | 118 /// final int index; |
116 /// const E(this.index); | 119 /// const E(this.index); |
117 /// static const E id0 = const E(0); | 120 /// static const E id0 = const E(0); |
118 /// ... | 121 /// ... |
119 /// static const E idn-1 = const E(n - 1); | 122 /// static const E idn-1 = const E(n - 1); |
120 /// static const List<E> values = const <E>[id0, ..., idn-1]; | 123 /// static const List<E> values = const <E>[id0, ..., idn-1]; |
121 /// String toString() => { 0: ‘E.id0’, . . ., n-1: ‘E.idn-1’}[index] | 124 /// String toString() => { 0: ‘E.id0’, . . ., n-1: ‘E.idn-1’}[index] |
122 /// } | 125 /// } |
123 members["index"] = new KernelFieldBuilder( | 126 members["index"] = new KernelFieldBuilder( |
124 null, intType, "index", finalMask, parent, charOffset); | 127 astFactory, |
| 128 parent.loader.topLevelTypeInferrer, |
| 129 null, |
| 130 intType, |
| 131 "index", |
| 132 finalMask, |
| 133 parent, |
| 134 charOffset, |
| 135 null); |
125 KernelConstructorBuilder constructorBuilder = new KernelConstructorBuilder( | 136 KernelConstructorBuilder constructorBuilder = new KernelConstructorBuilder( |
126 null, | 137 null, |
127 constMask, | 138 constMask, |
128 null, | 139 null, |
129 "", | 140 "", |
130 null, | 141 null, |
131 <FormalParameterBuilder>[ | 142 <FormalParameterBuilder>[ |
132 new KernelFormalParameterBuilder( | 143 new KernelFormalParameterBuilder( |
133 null, 0, intType, "index", true, parent, charOffset) | 144 null, 0, intType, "index", true, parent, charOffset) |
134 ], | 145 ], |
135 parent, | 146 parent, |
136 charOffset, | 147 charOffset, |
137 charOffset, | 148 charOffset, |
138 charEndOffset); | 149 charEndOffset); |
139 constructors[""] = constructorBuilder; | 150 constructors[""] = constructorBuilder; |
140 int index = 0; | 151 int index = 0; |
141 List<MapEntry> toStringEntries = <MapEntry>[]; | 152 List<MapEntry> toStringEntries = <MapEntry>[]; |
142 KernelFieldBuilder valuesBuilder = new KernelFieldBuilder( | 153 KernelFieldBuilder valuesBuilder = new KernelFieldBuilder( |
143 null, listType, "values", constMask | staticMask, parent, charOffset); | 154 astFactory, |
| 155 parent.loader.topLevelTypeInferrer, |
| 156 null, |
| 157 listType, |
| 158 "values", |
| 159 constMask | staticMask, |
| 160 parent, |
| 161 charOffset, |
| 162 null); |
144 members["values"] = valuesBuilder; | 163 members["values"] = valuesBuilder; |
145 KernelProcedureBuilder toStringBuilder = new KernelProcedureBuilder( | 164 KernelProcedureBuilder toStringBuilder = new KernelProcedureBuilder( |
146 null, | 165 null, |
147 0, | 166 0, |
148 stringType, | 167 stringType, |
149 "toString", | 168 "toString", |
150 null, | 169 null, |
151 null, | 170 null, |
152 AsyncMarker.Sync, | 171 AsyncMarker.Sync, |
153 ProcedureKind.Method, | 172 ProcedureKind.Method, |
154 parent, | 173 parent, |
155 charOffset, | 174 charOffset, |
156 charOffset, | 175 charOffset, |
157 charEndOffset); | 176 charEndOffset); |
158 members["toString"] = toStringBuilder; | 177 members["toString"] = toStringBuilder; |
159 String className = name; | 178 String className = name; |
160 for (int i = 0; i < constantNamesAndOffsets.length; i += 2) { | 179 for (int i = 0; i < constantNamesAndOffsets.length; i += 2) { |
161 String name = constantNamesAndOffsets[i]; | 180 String name = constantNamesAndOffsets[i]; |
162 int charOffset = constantNamesAndOffsets[i + 1]; | 181 int charOffset = constantNamesAndOffsets[i + 1]; |
163 if (members.containsKey(name)) { | 182 if (members.containsKey(name)) { |
164 inputError(null, null, "Duplicated name: $name"); | 183 inputError(null, null, "Duplicated name: $name"); |
165 continue; | 184 continue; |
166 } | 185 } |
167 KernelFieldBuilder fieldBuilder = new KernelFieldBuilder( | 186 KernelFieldBuilder fieldBuilder = new KernelFieldBuilder( |
168 null, selfType, name, constMask | staticMask, parent, charOffset); | 187 astFactory, |
| 188 parent.loader.topLevelTypeInferrer, |
| 189 null, |
| 190 selfType, |
| 191 name, |
| 192 constMask | staticMask, |
| 193 parent, |
| 194 charOffset, |
| 195 null); |
169 members[name] = fieldBuilder; | 196 members[name] = fieldBuilder; |
170 toStringEntries.add(new MapEntry( | 197 toStringEntries.add(new MapEntry( |
171 new IntLiteral(index), new StringLiteral("$className.$name"))); | 198 new IntLiteral(index), new StringLiteral("$className.$name"))); |
172 index++; | 199 index++; |
173 } | 200 } |
174 MapLiteral toStringMap = new MapLiteral(toStringEntries, isConst: true); | 201 MapLiteral toStringMap = new MapLiteral(toStringEntries, isConst: true); |
175 KernelEnumBuilder enumBuilder = new KernelEnumBuilder.internal( | 202 KernelEnumBuilder enumBuilder = new KernelEnumBuilder.internal( |
176 metadata, | 203 metadata, |
177 name, | 204 name, |
178 new Scope(members, null, parent.scope, isModifiable: false), | 205 new Scope(members, null, parent.scope, isModifiable: false), |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
268 new ConstructorInvocation(constructor, arguments, isConst: true); | 295 new ConstructorInvocation(constructor, arguments, isConst: true); |
269 } | 296 } |
270 return super.build(libraryBuilder, coreLibrary); | 297 return super.build(libraryBuilder, coreLibrary); |
271 } | 298 } |
272 | 299 |
273 @override | 300 @override |
274 Builder findConstructorOrFactory(String name, int charOffset, Uri uri) { | 301 Builder findConstructorOrFactory(String name, int charOffset, Uri uri) { |
275 return null; | 302 return null; |
276 } | 303 } |
277 } | 304 } |
OLD | NEW |