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

Side by Side Diff: pkg/front_end/lib/src/fasta/kernel/kernel_field_builder.dart

Issue 2830313002: Split up TypeInferrer class. (Closed)
Patch Set: 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.kernel_field_builder; 5 library fasta.kernel_field_builder;
6 6
7 import 'package:front_end/src/fasta/builder/ast_factory.dart' show AstFactory; 7 import 'package:front_end/src/fasta/builder/ast_factory.dart' show AstFactory;
8 8
9 import 'package:front_end/src/fasta/kernel/body_builder.dart' show BodyBuilder; 9 import 'package:front_end/src/fasta/kernel/body_builder.dart' show BodyBuilder;
10 10
11 import 'package:front_end/src/fasta/parser/parser.dart' show Parser; 11 import 'package:front_end/src/fasta/parser/parser.dart' show Parser;
12 12
13 import 'package:front_end/src/fasta/scanner/token.dart' show Token; 13 import 'package:front_end/src/fasta/scanner/token.dart' show Token;
14 14
15 import 'package:front_end/src/fasta/builder/class_builder.dart' 15 import 'package:front_end/src/fasta/builder/class_builder.dart'
16 show ClassBuilder; 16 show ClassBuilder;
17 17
18 import 'package:front_end/src/fasta/type_inference/type_inferrer.dart' 18 import 'package:front_end/src/fasta/type_inference/type_inference_engine.dart'
19 show TypeInferrer; 19 show TypeInferenceEngine;
20 20
21 import 'package:kernel/ast.dart' show Expression, Field, Name; 21 import 'package:kernel/ast.dart' show Expression, Field, Name;
22 22
23 import 'kernel_builder.dart' 23 import 'kernel_builder.dart'
24 show 24 show
25 Builder, 25 Builder,
26 FieldBuilder, 26 FieldBuilder,
27 KernelTypeBuilder, 27 KernelTypeBuilder,
28 LibraryBuilder, 28 LibraryBuilder,
29 MetadataBuilder; 29 MetadataBuilder;
30 30
31 class KernelFieldBuilder extends FieldBuilder<Expression> { 31 class KernelFieldBuilder extends FieldBuilder<Expression> {
32 final AstFactory astFactory; 32 final AstFactory astFactory;
33 final TypeInferrer typeInferrer; 33 final TypeInferenceEngine typeInferenceEngine;
34 final Field field; 34 final Field field;
35 final List<MetadataBuilder> metadata; 35 final List<MetadataBuilder> metadata;
36 final KernelTypeBuilder type; 36 final KernelTypeBuilder type;
37 final Token initializerToken; 37 final Token initializerToken;
38 38
39 KernelFieldBuilder( 39 KernelFieldBuilder(
40 this.astFactory, 40 this.astFactory,
41 this.typeInferrer, 41 this.typeInferenceEngine,
42 this.metadata, 42 this.metadata,
43 this.type, 43 this.type,
44 String name, 44 String name,
45 int modifiers, 45 int modifiers,
46 Builder compilationUnit, 46 Builder compilationUnit,
47 int charOffset, 47 int charOffset,
48 this.initializerToken) 48 this.initializerToken)
49 : field = astFactory.field(null, charOffset, 49 : field = astFactory.field(null, charOffset,
50 fileUri: compilationUnit?.relativeFileUri), 50 fileUri: compilationUnit?.relativeFileUri),
51 super(name, modifiers, compilationUnit, charOffset); 51 super(name, modifiers, compilationUnit, charOffset);
52 52
53 void set initializer(Expression value) { 53 void set initializer(Expression value) {
54 field.initializer = value..parent = field; 54 field.initializer = value..parent = field;
55 } 55 }
56 56
57 Field build(LibraryBuilder library) { 57 Field build(LibraryBuilder library) {
58 field.name ??= new Name(name, library.target); 58 field.name ??= new Name(name, library.target);
59 if (type != null) { 59 if (type != null) {
60 field.type = type.build(library); 60 field.type = type.build(library);
61 } 61 }
62 bool isInstanceMember = !isStatic && !isTopLevel; 62 bool isInstanceMember = !isStatic && !isTopLevel;
63 field 63 field
64 ..isFinal = isFinal 64 ..isFinal = isFinal
65 ..isConst = isConst 65 ..isConst = isConst
66 ..hasImplicitGetter = isInstanceMember 66 ..hasImplicitGetter = isInstanceMember
67 ..hasImplicitSetter = isInstanceMember && !isConst && !isFinal 67 ..hasImplicitSetter = isInstanceMember && !isConst && !isFinal
68 ..isStatic = !isInstanceMember; 68 ..isStatic = !isInstanceMember;
69 if (initializerToken != null) { 69 if (initializerToken != null) {
70 typeInferrer.recordField(field); 70 typeInferenceEngine.recordField(field);
71 } 71 }
72 return field; 72 return field;
73 } 73 }
74 74
75 Field get target => field; 75 Field get target => field;
76 76
77 @override 77 @override
78 void prepareInitializerInference(TypeInferrer typeInferrer, 78 void prepareInitializerInference(TypeInferenceEngine typeInferenceEngine,
79 LibraryBuilder library, ClassBuilder currentClass) { 79 LibraryBuilder library, ClassBuilder currentClass) {
80 if (initializerToken != null) { 80 if (initializerToken != null) {
81 var memberScope = 81 var memberScope =
82 currentClass == null ? library.scope : currentClass.scope; 82 currentClass == null ? library.scope : currentClass.scope;
83 // TODO(paulberry): Is it correct to pass library.uri into BodyBuilder, or
84 // should it be the part URI?
83 var bodyBuilder = new BodyBuilder( 85 var bodyBuilder = new BodyBuilder(
84 library, 86 library,
85 this, 87 this,
86 memberScope, 88 memberScope,
87 null, 89 null,
88 typeInferrer.classHierarchy, 90 typeInferenceEngine.classHierarchy,
89 typeInferrer.coreTypes, 91 typeInferenceEngine.coreTypes,
90 currentClass, 92 currentClass,
91 isInstanceMember, 93 isInstanceMember,
92 library.uri, 94 library.uri,
93 typeInferrer, 95 typeInferenceEngine.createTopLevelTypeInferrer(field),
94 astFactory, 96 astFactory,
95 fieldDependencies: typeInferrer.getFieldDependencies(field)); 97 fieldDependencies: typeInferenceEngine.getFieldDependencies(field));
96 Parser parser = new Parser(bodyBuilder); 98 Parser parser = new Parser(bodyBuilder);
97 Token token = parser.parseExpression(initializerToken); 99 Token token = parser.parseExpression(initializerToken);
98 Expression expression = bodyBuilder.popForValue(); 100 Expression expression = bodyBuilder.popForValue();
99 bodyBuilder.checkEmpty(token.charOffset); 101 bodyBuilder.checkEmpty(token.charOffset);
100 initializer = expression; 102 initializer = expression;
101 } 103 }
102 } 104 }
103 } 105 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698