| 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.dill_class_builder; | 5 library fasta.dill_class_builder; |
| 6 | 6 |
| 7 import 'package:kernel/ast.dart' | 7 import 'package:kernel/ast.dart' show Class, Member; |
| 8 show Class, Constructor, Member, Procedure, ProcedureKind; | |
| 9 | 8 |
| 10 import '../errors.dart' show internalError; | 9 import '../errors.dart' show internalError; |
| 11 | 10 |
| 12 import '../kernel/kernel_builder.dart' | 11 import '../kernel/kernel_builder.dart' |
| 13 show Builder, KernelClassBuilder, KernelTypeBuilder; | 12 show MemberBuilder, KernelClassBuilder, KernelTypeBuilder, Scope; |
| 14 | 13 |
| 15 import '../modifier.dart' show abstractMask; | 14 import '../modifier.dart' show abstractMask; |
| 16 | 15 |
| 17 import 'dill_member_builder.dart' show DillMemberBuilder; | 16 import 'dill_member_builder.dart' show DillMemberBuilder; |
| 18 | 17 |
| 19 import 'dill_library_builder.dart' show DillLibraryBuilder; | 18 import 'dill_library_builder.dart' show DillLibraryBuilder; |
| 20 | 19 |
| 21 class DillClassBuilder extends KernelClassBuilder { | 20 class DillClassBuilder extends KernelClassBuilder { |
| 22 final Class cls; | 21 final Class cls; |
| 23 | 22 |
| 24 @override | |
| 25 final Map<String, Builder> constructors = <String, Builder>{}; | |
| 26 | |
| 27 DillClassBuilder(Class cls, DillLibraryBuilder parent) | 23 DillClassBuilder(Class cls, DillLibraryBuilder parent) |
| 28 : cls = cls, | 24 : cls = cls, |
| 29 super(null, computeModifiers(cls), cls.name, null, null, null, | 25 super( |
| 30 <String, Builder>{}, parent, cls.fileOffset); | 26 null, |
| 27 computeModifiers(cls), |
| 28 cls.name, |
| 29 null, |
| 30 null, |
| 31 null, |
| 32 new Scope(<String, MemberBuilder>{}, <String, MemberBuilder>{}, |
| 33 parent.scope, isModifiable: false), |
| 34 new Scope(<String, MemberBuilder>{}, null, null, |
| 35 isModifiable: false), |
| 36 parent, |
| 37 cls.fileOffset); |
| 31 | 38 |
| 32 void addMember(Member member) { | 39 void addMember(Member member) { |
| 33 DillMemberBuilder builder = new DillMemberBuilder(member, this); | 40 DillMemberBuilder builder = new DillMemberBuilder(member, this); |
| 34 String name = member.name.name; | 41 String name = member.name.name; |
| 35 if (member is Constructor || | 42 if (builder.isConstructor || builder.isFactory) { |
| 36 (member is Procedure && member.kind == ProcedureKind.Factory)) { | 43 constructorScopeBuilder.addMember(name, builder); |
| 37 constructors[name] = builder; | 44 } else if (builder.isSetter) { |
| 45 scopeBuilder.addSetter(name, builder); |
| 38 } else { | 46 } else { |
| 39 DillMemberBuilder existing = members[name]; | 47 scopeBuilder.addMember(name, builder); |
| 40 if (existing == null) { | |
| 41 members[name] = builder; | |
| 42 } else { | |
| 43 existing.next = builder; | |
| 44 } | |
| 45 } | 48 } |
| 46 } | 49 } |
| 47 | 50 |
| 48 /// Returns true if this class is the result of applying a mixin to its | 51 /// Returns true if this class is the result of applying a mixin to its |
| 49 /// superclass. | 52 /// superclass. |
| 50 bool get isMixinApplication => cls.isMixinApplication; | 53 bool get isMixinApplication => cls.isMixinApplication; |
| 51 | 54 |
| 52 KernelTypeBuilder get mixedInType => internalError("Not implemented."); | 55 KernelTypeBuilder get mixedInType => internalError("Not implemented."); |
| 53 } | 56 } |
| 54 | 57 |
| 55 int computeModifiers(Class cls) { | 58 int computeModifiers(Class cls) { |
| 56 return cls.isAbstract ? abstractMask : 0; | 59 return cls.isAbstract ? abstractMask : 0; |
| 57 } | 60 } |
| OLD | NEW |