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

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

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

Powered by Google App Engine
This is Rietveld 408576698