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:kernel/ast.dart' | 7 import 'package:kernel/ast.dart' |
8 show | 8 show |
9 Arguments, | 9 Arguments, |
10 Class, | 10 Class, |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
118 /// From Dart Programming Language Specification 4th Edition/December 2015: | 118 /// From Dart Programming Language Specification 4th Edition/December 2015: |
119 /// metadata class E { | 119 /// metadata class E { |
120 /// final int index; | 120 /// final int index; |
121 /// const E(this.index); | 121 /// const E(this.index); |
122 /// static const E id0 = const E(0); | 122 /// static const E id0 = const E(0); |
123 /// ... | 123 /// ... |
124 /// static const E idn-1 = const E(n - 1); | 124 /// static const E idn-1 = const E(n - 1); |
125 /// static const List<E> values = const <E>[id0, ..., idn-1]; | 125 /// static const List<E> values = const <E>[id0, ..., idn-1]; |
126 /// String toString() => { 0: ‘E.id0’, . . ., n-1: ‘E.idn-1’}[index] | 126 /// String toString() => { 0: ‘E.id0’, . . ., n-1: ‘E.idn-1’}[index] |
127 /// } | 127 /// } |
128 members["index"] = new KernelFieldBuilder(null, null, intType, "index", | 128 members["index"] = new KernelFieldBuilder( |
129 finalMask, parent, charOffset, null, true); | 129 null, intType, "index", finalMask, parent, charOffset, null, true); |
130 KernelConstructorBuilder constructorBuilder = new KernelConstructorBuilder( | 130 KernelConstructorBuilder constructorBuilder = new KernelConstructorBuilder( |
131 null, | 131 null, |
132 null, | |
133 constMask, | 132 constMask, |
134 null, | 133 null, |
135 "", | 134 "", |
136 null, | 135 null, |
137 <FormalParameterBuilder>[ | 136 <FormalParameterBuilder>[ |
138 new KernelFormalParameterBuilder( | 137 new KernelFormalParameterBuilder( |
139 null, 0, intType, "index", true, parent, charOffset) | 138 null, 0, intType, "index", true, parent, charOffset) |
140 ], | 139 ], |
141 parent, | 140 parent, |
142 charOffset, | 141 charOffset, |
143 charOffset, | 142 charOffset, |
144 charEndOffset); | 143 charEndOffset); |
145 constructors[""] = constructorBuilder; | 144 constructors[""] = constructorBuilder; |
146 int index = 0; | 145 int index = 0; |
147 List<MapEntry> toStringEntries = <MapEntry>[]; | 146 List<MapEntry> toStringEntries = <MapEntry>[]; |
148 KernelFieldBuilder valuesBuilder = new KernelFieldBuilder( | 147 KernelFieldBuilder valuesBuilder = new KernelFieldBuilder(null, listType, |
149 null, | 148 "values", constMask | staticMask, parent, charOffset, null, true); |
150 null, | |
151 listType, | |
152 "values", | |
153 constMask | staticMask, | |
154 parent, | |
155 charOffset, | |
156 null, | |
157 true); | |
158 members["values"] = valuesBuilder; | 149 members["values"] = valuesBuilder; |
159 KernelProcedureBuilder toStringBuilder = new KernelProcedureBuilder( | 150 KernelProcedureBuilder toStringBuilder = new KernelProcedureBuilder( |
160 null, | 151 null, |
161 null, | |
162 0, | 152 0, |
163 stringType, | 153 stringType, |
164 "toString", | 154 "toString", |
165 null, | 155 null, |
166 null, | 156 null, |
167 ProcedureKind.Method, | 157 ProcedureKind.Method, |
168 parent, | 158 parent, |
169 charOffset, | 159 charOffset, |
170 charOffset, | 160 charOffset, |
171 charEndOffset); | 161 charEndOffset); |
172 members["toString"] = toStringBuilder; | 162 members["toString"] = toStringBuilder; |
173 String className = name; | 163 String className = name; |
174 for (int i = 0; i < constantNamesAndOffsets.length; i += 2) { | 164 for (int i = 0; i < constantNamesAndOffsets.length; i += 2) { |
175 String name = constantNamesAndOffsets[i]; | 165 String name = constantNamesAndOffsets[i]; |
176 int charOffset = constantNamesAndOffsets[i + 1]; | 166 int charOffset = constantNamesAndOffsets[i + 1]; |
177 if (members.containsKey(name)) { | 167 if (members.containsKey(name)) { |
178 parent.addCompileTimeError(templateDuplicatedName.withArguments(name), | 168 parent.addCompileTimeError(templateDuplicatedName.withArguments(name), |
179 charOffset, parent.fileUri); | 169 charOffset, parent.fileUri); |
180 constantNamesAndOffsets[i] = null; | 170 constantNamesAndOffsets[i] = null; |
181 continue; | 171 continue; |
182 } | 172 } |
183 if (name == className) { | 173 if (name == className) { |
184 parent.addCompileTimeError( | 174 parent.addCompileTimeError( |
185 templateEnumConstantSameNameAsEnclosing.withArguments(name), | 175 templateEnumConstantSameNameAsEnclosing.withArguments(name), |
186 charOffset, | 176 charOffset, |
187 parent.fileUri); | 177 parent.fileUri); |
188 constantNamesAndOffsets[i] = null; | 178 constantNamesAndOffsets[i] = null; |
189 continue; | 179 continue; |
190 } | 180 } |
191 KernelFieldBuilder fieldBuilder = new KernelFieldBuilder( | 181 KernelFieldBuilder fieldBuilder = new KernelFieldBuilder(null, selfType, |
192 null, | 182 name, constMask | staticMask, parent, charOffset, null, true); |
193 null, | |
194 selfType, | |
195 name, | |
196 constMask | staticMask, | |
197 parent, | |
198 charOffset, | |
199 null, | |
200 true); | |
201 members[name] = fieldBuilder; | 183 members[name] = fieldBuilder; |
202 toStringEntries.add(new MapEntry( | 184 toStringEntries.add(new MapEntry( |
203 new IntLiteral(index), new StringLiteral("$className.$name"))); | 185 new IntLiteral(index), new StringLiteral("$className.$name"))); |
204 index++; | 186 index++; |
205 } | 187 } |
206 MapLiteral toStringMap = new MapLiteral(toStringEntries, isConst: true); | 188 MapLiteral toStringMap = new MapLiteral(toStringEntries, isConst: true); |
207 KernelEnumBuilder enumBuilder = new KernelEnumBuilder.internal( | 189 KernelEnumBuilder enumBuilder = new KernelEnumBuilder.internal( |
208 null, | 190 null, |
209 metadata, | 191 metadata, |
210 name, | 192 name, |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
306 } | 288 } |
307 return super.build(libraryBuilder, coreLibrary); | 289 return super.build(libraryBuilder, coreLibrary); |
308 } | 290 } |
309 | 291 |
310 @override | 292 @override |
311 Builder findConstructorOrFactory( | 293 Builder findConstructorOrFactory( |
312 String name, int charOffset, Uri uri, LibraryBuilder library) { | 294 String name, int charOffset, Uri uri, LibraryBuilder library) { |
313 return null; | 295 return null; |
314 } | 296 } |
315 } | 297 } |
OLD | NEW |