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

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

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

Powered by Google App Engine
This is Rietveld 408576698