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 |