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

Side by Side Diff: pkg/front_end/lib/src/fasta/source/source_library_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.source_library_builder; 5 library fasta.source_library_builder;
6 6
7 import 'package:front_end/src/fasta/scanner/token.dart' show SymbolToken, Token;
8
9 import 'package:front_end/src/fasta/type_inference/type_inferrer.dart'
10 show TypeInferrer;
11
7 import 'package:kernel/ast.dart' show AsyncMarker, ProcedureKind; 12 import 'package:kernel/ast.dart' show AsyncMarker, ProcedureKind;
8 13
9 import '../combinator.dart' show Combinator; 14 import '../combinator.dart' show Combinator;
10 15
11 import '../errors.dart' show inputError, internalError; 16 import '../errors.dart' show inputError, internalError;
12 17
13 import '../export.dart' show Export; 18 import '../export.dart' show Export;
14 19
15 import '../import.dart' show Import; 20 import '../import.dart' show Import;
16 21
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 void addNamedMixinApplication( 169 void addNamedMixinApplication(
165 List<MetadataBuilder> metadata, 170 List<MetadataBuilder> metadata,
166 String name, 171 String name,
167 List<TypeVariableBuilder> typeVariables, 172 List<TypeVariableBuilder> typeVariables,
168 int modifiers, 173 int modifiers,
169 T mixinApplication, 174 T mixinApplication,
170 List<T> interfaces, 175 List<T> interfaces,
171 int charOffset); 176 int charOffset);
172 177
173 void addField(List<MetadataBuilder> metadata, int modifiers, T type, 178 void addField(List<MetadataBuilder> metadata, int modifiers, T type,
174 String name, int charOffset); 179 String name, int charOffset, Token initializer);
175 180
176 void addFields(List<MetadataBuilder> metadata, int modifiers, T type, 181 void addFields(List<MetadataBuilder> metadata, int modifiers, T type,
177 List<Object> namesAndOffsets) { 182 List<Object> namesOffsetsAndInitializers) {
178 for (int i = 0; i < namesAndOffsets.length; i += 2) { 183 for (int i = 0; i < namesOffsetsAndInitializers.length; i += 4) {
179 String name = namesAndOffsets[i]; 184 String name = namesOffsetsAndInitializers[i];
180 int charOffset = namesAndOffsets[i + 1]; 185 int charOffset = namesOffsetsAndInitializers[i + 1];
181 addField(metadata, modifiers, type, name, charOffset); 186 Token initializer;
187 if (type == null) {
188 initializer = namesOffsetsAndInitializers[i + 2];
189 Token afterInitializer = namesOffsetsAndInitializers[i + 3];
190 // TODO(paulberry): figure out a way to do this without using
191 // Token.previous.
192 afterInitializer?.previous
193 ?.setNext(new SymbolToken.eof(afterInitializer.offset));
194 }
195 addField(metadata, modifiers, type, name, charOffset, initializer);
182 } 196 }
183 } 197 }
184 198
185 void addProcedure( 199 void addProcedure(
186 List<MetadataBuilder> metadata, 200 List<MetadataBuilder> metadata,
187 int modifiers, 201 int modifiers,
188 T returnType, 202 T returnType,
189 String name, 203 String name,
190 List<TypeVariableBuilder> typeVariables, 204 List<TypeVariableBuilder> typeVariables,
191 List<FormalParameterBuilder> formals, 205 List<FormalParameterBuilder> formals,
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after
462 count += member.resolveConstructors(this); 476 count += member.resolveConstructors(this);
463 }); 477 });
464 return count; 478 return count;
465 } 479 }
466 480
467 List<TypeVariableBuilder> copyTypeVariables( 481 List<TypeVariableBuilder> copyTypeVariables(
468 List<TypeVariableBuilder> original); 482 List<TypeVariableBuilder> original);
469 483
470 @override 484 @override
471 String get fullNameForErrors => name ?? "<library '$relativeFileUri'>"; 485 String get fullNameForErrors => name ?? "<library '$relativeFileUri'>";
486
487 @override
488 void prepareInitializerInference(TypeInferrer typeInferrer,
489 LibraryBuilder library, ClassBuilder currentClass) {
490 forEach((String name, Builder member) {
491 member.prepareInitializerInference(typeInferrer, library, currentClass);
492 });
493 }
472 } 494 }
473 495
474 /// Unlike [Scope], this scope is used during construction of builders to 496 /// Unlike [Scope], this scope is used during construction of builders to
475 /// ensure types and members are added to and resolved in the correct location. 497 /// ensure types and members are added to and resolved in the correct location.
476 class DeclarationBuilder<T extends TypeBuilder> { 498 class DeclarationBuilder<T extends TypeBuilder> {
477 final DeclarationBuilder<T> parent; 499 final DeclarationBuilder<T> parent;
478 500
479 final Map<String, Builder> members; 501 final Map<String, Builder> members;
480 502
481 final Map<String, Builder> constructors; 503 final Map<String, Builder> constructors;
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
556 /// synthesize type variables on the factory matching the class'. 578 /// synthesize type variables on the factory matching the class'.
557 void addFactoryDeclaration( 579 void addFactoryDeclaration(
558 ProcedureBuilder procedure, DeclarationBuilder<T> factoryDeclaration) { 580 ProcedureBuilder procedure, DeclarationBuilder<T> factoryDeclaration) {
559 factoryDeclarations[procedure] = factoryDeclaration; 581 factoryDeclarations[procedure] = factoryDeclaration;
560 } 582 }
561 583
562 Scope toScope(Scope parent) { 584 Scope toScope(Scope parent) {
563 return new Scope(members, setters, parent, isModifiable: false); 585 return new Scope(members, setters, parent, isModifiable: false);
564 } 586 }
565 } 587 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698