Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(337)

Side by Side Diff: pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart

Issue 2788153002: Create separate scopes for constructors, setters, and other members. (Closed)
Patch Set: One more flaky standalone/io test. Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 }
OLDNEW
« no previous file with comments | « pkg/front_end/lib/src/fasta/builder/prefix_builder.dart ('k') | pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698