| OLD | NEW |
| 1 // Copyright (c) 2015, the Fletch project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Fletch 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.md file. | 3 // BSD-style license that can be found in the LICENSE.md file. |
| 4 | 4 |
| 5 library fletchc.fletch_class_builder; | 5 library fletchc.fletch_class_builder; |
| 6 | 6 |
| 7 import 'package:compiler/src/dart_types.dart'; | 7 import 'package:compiler/src/dart_types.dart'; |
| 8 import 'package:compiler/src/elements/elements.dart'; | 8 import 'package:compiler/src/elements/elements.dart'; |
| 9 import 'package:compiler/src/universe/universe.dart'; | 9 import 'package:compiler/src/universe/selector.dart'; |
| 10 import 'package:persistent/persistent.dart'; | 10 import 'package:persistent/persistent.dart'; |
| 11 | 11 |
| 12 import 'fletch_function_builder.dart'; | 12 import 'fletch_function_builder.dart'; |
| 13 import 'fletch_context.dart'; | 13 import 'fletch_context.dart'; |
| 14 import 'fletch_backend.dart'; | 14 import 'fletch_backend.dart'; |
| 15 | 15 |
| 16 import '../fletch_system.dart'; | 16 import '../fletch_system.dart'; |
| 17 import '../commands.dart'; | 17 import '../commands.dart'; |
| 18 | 18 |
| 19 // TODO(ahe): Remove this import. | 19 // TODO(ahe): Remove this import. |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 149 | 149 |
| 150 void updateImplicitAccessors(FletchBackend backend) { | 150 void updateImplicitAccessors(FletchBackend backend) { |
| 151 _implicitAccessorTable.clear(); | 151 _implicitAccessorTable.clear(); |
| 152 // If we don't have an element (stub class), we don't have anything to | 152 // If we don't have an element (stub class), we don't have anything to |
| 153 // generate accessors for. | 153 // generate accessors for. |
| 154 if (element == null) return; | 154 if (element == null) return; |
| 155 // TODO(ajohnsen): Don't do this once dart2js can enqueue field getters in | 155 // TODO(ajohnsen): Don't do this once dart2js can enqueue field getters in |
| 156 // CodegenEnqueuer. | 156 // CodegenEnqueuer. |
| 157 int fieldIndex = superclassFields; | 157 int fieldIndex = superclassFields; |
| 158 element.implementation.forEachInstanceField((enclosing, field) { | 158 element.implementation.forEachInstanceField((enclosing, field) { |
| 159 var getter = new Selector.getter(field.name, field.library); | 159 var getter = new Selector.getter(field.memberName); |
| 160 int getterSelector = backend.context.toFletchSelector(getter); | 160 int getterSelector = backend.context.toFletchSelector(getter); |
| 161 _implicitAccessorTable[getterSelector] = backend.makeGetter(fieldIndex); | 161 _implicitAccessorTable[getterSelector] = backend.makeGetter(fieldIndex); |
| 162 | 162 |
| 163 if (!field.isFinal) { | 163 if (!field.isFinal) { |
| 164 var setter = new Selector.setter(field.name, field.library); | 164 var setter = new Selector.setter(new Name(field.name, field.library)); |
| 165 var setterSelector = backend.context.toFletchSelector(setter); | 165 var setterSelector = backend.context.toFletchSelector(setter); |
| 166 _implicitAccessorTable[setterSelector] = backend.makeSetter(fieldIndex); | 166 _implicitAccessorTable[setterSelector] = backend.makeSetter(fieldIndex); |
| 167 } | 167 } |
| 168 | 168 |
| 169 fieldIndex++; | 169 fieldIndex++; |
| 170 }); | 170 }); |
| 171 } | 171 } |
| 172 | 172 |
| 173 void createIsFunctionEntry(FletchBackend backend, int arity) { | 173 void createIsFunctionEntry(FletchBackend backend, int arity) { |
| 174 int fletchSelector = backend.context.toFletchIsSelector( | 174 int fletchSelector = backend.context.toFletchIsSelector( |
| 175 backend.compiler.functionClass); | 175 backend.compiler.coreClasses.functionClass); |
| 176 addIsSelector(fletchSelector); | 176 addIsSelector(fletchSelector); |
| 177 fletchSelector = backend.context.toFletchIsSelector( | 177 fletchSelector = backend.context.toFletchIsSelector( |
| 178 backend.compiler.functionClass, arity); | 178 backend.compiler.coreClasses.functionClass, arity); |
| 179 addIsSelector(fletchSelector); | 179 addIsSelector(fletchSelector); |
| 180 } | 180 } |
| 181 | 181 |
| 182 FletchClass finalizeClass( | 182 FletchClass finalizeClass( |
| 183 FletchContext context, | 183 FletchContext context, |
| 184 List<Command> commands) { | 184 List<Command> commands) { |
| 185 if (isBuiltin) { | 185 if (isBuiltin) { |
| 186 int nameId = context.getSymbolId(element.name); | 186 int nameId = context.getSymbolId(element.name); |
| 187 commands.add(new PushBuiltinClass(nameId, fields)); | 187 commands.add(new PushBuiltinClass(nameId, fields)); |
| 188 } else { | 188 } else { |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 271 } | 271 } |
| 272 | 272 |
| 273 void updateImplicitAccessors(FletchBackend backend) { | 273 void updateImplicitAccessors(FletchBackend backend) { |
| 274 // If we don't have an element (stub class), we don't have anything to | 274 // If we don't have an element (stub class), we don't have anything to |
| 275 // generate accessors for. | 275 // generate accessors for. |
| 276 if (element == null) return; | 276 if (element == null) return; |
| 277 // TODO(ajohnsen): Don't do this once dart2js can enqueue field getters in | 277 // TODO(ajohnsen): Don't do this once dart2js can enqueue field getters in |
| 278 // CodegenEnqueuer. | 278 // CodegenEnqueuer. |
| 279 int fieldIndex = superclassFields + extraFields; | 279 int fieldIndex = superclassFields + extraFields; |
| 280 element.implementation.forEachInstanceField((enclosing, field) { | 280 element.implementation.forEachInstanceField((enclosing, field) { |
| 281 var getter = new Selector.getter(field.name, field.library); | 281 var getter = new Selector.getter(new Name(field.name, field.library)); |
| 282 int getterSelector = backend.context.toFletchSelector(getter); | 282 int getterSelector = backend.context.toFletchSelector(getter); |
| 283 _implicitAccessorTable[getterSelector] = backend.makeGetter(fieldIndex); | 283 _implicitAccessorTable[getterSelector] = backend.makeGetter(fieldIndex); |
| 284 | 284 |
| 285 if (!field.isFinal) { | 285 if (!field.isFinal) { |
| 286 var setter = new Selector.setter(field.name, field.library); | 286 var setter = new Selector.setter(new Name(field.name, field.library)); |
| 287 var setterSelector = backend.context.toFletchSelector(setter); | 287 var setterSelector = backend.context.toFletchSelector(setter); |
| 288 _implicitAccessorTable[setterSelector] = backend.makeSetter(fieldIndex); | 288 _implicitAccessorTable[setterSelector] = backend.makeSetter(fieldIndex); |
| 289 } | 289 } |
| 290 | 290 |
| 291 fieldIndex++; | 291 fieldIndex++; |
| 292 }); | 292 }); |
| 293 | 293 |
| 294 for (FieldElement field in _removedFields) { | 294 for (FieldElement field in _removedFields) { |
| 295 Selector getter = new Selector.getter(field.name, field.library); | 295 Selector getter = |
| 296 new Selector.getter(new Name(field.name, field.library)); |
| 296 int getterSelector = backend.context.toFletchSelector(getter); | 297 int getterSelector = backend.context.toFletchSelector(getter); |
| 297 _removedAccessors.add(getterSelector); | 298 _removedAccessors.add(getterSelector); |
| 298 | 299 |
| 299 if (!field.isFinal) { | 300 if (!field.isFinal) { |
| 300 Selector setter = new Selector.setter(field.name, field.library); | 301 Selector setter = |
| 302 new Selector.setter(new Name(field.name, field.library)); |
| 301 int setterSelector = backend.context.toFletchSelector(setter); | 303 int setterSelector = backend.context.toFletchSelector(setter); |
| 302 _removedAccessors.add(setterSelector); | 304 _removedAccessors.add(setterSelector); |
| 303 } | 305 } |
| 304 } | 306 } |
| 305 } | 307 } |
| 306 | 308 |
| 307 PersistentMap<int, int> computeMethodTable() { | 309 PersistentMap<int, int> computeMethodTable() { |
| 308 PersistentMap<int, int> methodTable = klass.methodTable; | 310 PersistentMap<int, int> methodTable = klass.methodTable; |
| 309 | 311 |
| 310 for (int selector in _removedAccessors) { | 312 for (int selector in _removedAccessors) { |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 392 } | 394 } |
| 393 commands.add(new PushNewArray(afterFields.length * 2)); | 395 commands.add(new PushNewArray(afterFields.length * 2)); |
| 394 | 396 |
| 395 // Finally, ask the runtime to change the schemas! | 397 // Finally, ask the runtime to change the schemas! |
| 396 int fieldCountDelta = afterFields.length - klass.fields.length; | 398 int fieldCountDelta = afterFields.length - klass.fields.length; |
| 397 commands.add(new ChangeSchemas(numberOfClasses, fieldCountDelta)); | 399 commands.add(new ChangeSchemas(numberOfClasses, fieldCountDelta)); |
| 398 | 400 |
| 399 return true; | 401 return true; |
| 400 } | 402 } |
| 401 } | 403 } |
| OLD | NEW |