| 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 AsyncMarker, | 10 AsyncMarker, |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 167 members.forEach((String name, dynamic b) { | 167 members.forEach((String name, dynamic b) { |
| 168 MemberBuilder builder = b; | 168 MemberBuilder builder = b; |
| 169 builder.parent = enumBuilder; | 169 builder.parent = enumBuilder; |
| 170 }); | 170 }); |
| 171 selfType.builder = enumBuilder; | 171 selfType.builder = enumBuilder; |
| 172 return enumBuilder; | 172 return enumBuilder; |
| 173 } | 173 } |
| 174 | 174 |
| 175 KernelTypeBuilder get mixedInType => null; | 175 KernelTypeBuilder get mixedInType => null; |
| 176 | 176 |
| 177 InterfaceType buildType(List<KernelTypeBuilder> arguments) { | 177 InterfaceType buildType( |
| 178 LibraryBuilder library, List<KernelTypeBuilder> arguments) { |
| 178 return cls.rawType; | 179 return cls.rawType; |
| 179 } | 180 } |
| 180 | 181 |
| 181 Class build(KernelLibraryBuilder libraryBuilder) { | 182 Class build(KernelLibraryBuilder libraryBuilder) { |
| 182 if (constants.isEmpty) { | 183 if (constants.isEmpty) { |
| 183 libraryBuilder.addCompileTimeError( | 184 libraryBuilder.addCompileTimeError( |
| 184 -1, "An enum declaration can't be empty."); | 185 -1, "An enum declaration can't be empty."); |
| 185 } | 186 } |
| 186 toStringMap.keyType = intType.build(); | 187 toStringMap.keyType = intType.build(libraryBuilder); |
| 187 toStringMap.valueType = stringType.build(); | 188 toStringMap.valueType = stringType.build(libraryBuilder); |
| 188 KernelFieldBuilder indexFieldBuilder = members["index"]; | 189 KernelFieldBuilder indexFieldBuilder = members["index"]; |
| 189 Field indexField = indexFieldBuilder.build(libraryBuilder.library); | 190 Field indexField = indexFieldBuilder.build(libraryBuilder); |
| 190 KernelProcedureBuilder toStringBuilder = members["toString"]; | 191 KernelProcedureBuilder toStringBuilder = members["toString"]; |
| 191 toStringBuilder.body = new ReturnStatement(new MethodInvocation( | 192 toStringBuilder.body = new ReturnStatement(new MethodInvocation( |
| 192 toStringMap, | 193 toStringMap, |
| 193 new Name("[]"), | 194 new Name("[]"), |
| 194 new Arguments(<Expression>[ | 195 new Arguments(<Expression>[ |
| 195 new DirectPropertyGet(new ThisExpression(), indexField) | 196 new DirectPropertyGet(new ThisExpression(), indexField) |
| 196 ]))); | 197 ]))); |
| 197 List<Expression> values = <Expression>[]; | 198 List<Expression> values = <Expression>[]; |
| 198 for (String name in constants) { | 199 for (String name in constants) { |
| 199 KernelFieldBuilder builder = members[name]; | 200 KernelFieldBuilder builder = members[name]; |
| 200 values.add(new StaticGet(builder.build(libraryBuilder.library))); | 201 values.add(new StaticGet(builder.build(libraryBuilder))); |
| 201 } | 202 } |
| 202 KernelFieldBuilder valuesBuilder = members["values"]; | 203 KernelFieldBuilder valuesBuilder = members["values"]; |
| 203 valuesBuilder.build(libraryBuilder.library); | 204 valuesBuilder.build(libraryBuilder); |
| 204 valuesBuilder.initializer = | 205 valuesBuilder.initializer = |
| 205 new ListLiteral(values, typeArgument: cls.rawType, isConst: true); | 206 new ListLiteral(values, typeArgument: cls.rawType, isConst: true); |
| 206 KernelConstructorBuilder constructorBuilder = members[""]; | 207 KernelConstructorBuilder constructorBuilder = members[""]; |
| 207 Constructor constructor = constructorBuilder.build(libraryBuilder.library); | 208 Constructor constructor = constructorBuilder.build(libraryBuilder); |
| 208 constructor.initializers.insert( | 209 constructor.initializers.insert( |
| 209 0, | 210 0, |
| 210 new FieldInitializer(indexField, | 211 new FieldInitializer(indexField, |
| 211 new VariableGet(constructor.function.positionalParameters.single)) | 212 new VariableGet(constructor.function.positionalParameters.single)) |
| 212 ..parent = constructor); | 213 ..parent = constructor); |
| 213 int index = 0; | 214 int index = 0; |
| 214 for (String constant in constants) { | 215 for (String constant in constants) { |
| 215 KernelFieldBuilder field = members[constant]; | 216 KernelFieldBuilder field = members[constant]; |
| 216 field.build(libraryBuilder.library); | 217 field.build(libraryBuilder); |
| 217 Arguments arguments = | 218 Arguments arguments = |
| 218 new Arguments(<Expression>[new IntLiteral(index++)]); | 219 new Arguments(<Expression>[new IntLiteral(index++)]); |
| 219 field.initializer = | 220 field.initializer = |
| 220 new ConstructorInvocation(constructor, arguments, isConst: true); | 221 new ConstructorInvocation(constructor, arguments, isConst: true); |
| 221 } | 222 } |
| 222 return super.build(libraryBuilder); | 223 return super.build(libraryBuilder); |
| 223 } | 224 } |
| 224 | 225 |
| 225 Builder findConstructorOrFactory(String name) => null; | 226 Builder findConstructorOrFactory(String name) => null; |
| 226 } | 227 } |
| OLD | NEW |