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

Side by Side Diff: pkg/compiler/lib/src/inferrer/type_system.dart

Issue 2970953003: Use entities in ParameterTypeInformation (Closed)
Patch Set: Fix Created 3 years, 5 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) 2017, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2017, 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 import '../common.dart'; 5 import '../common.dart';
6 import '../elements/elements.dart'; 6 import '../elements/elements.dart';
7 import '../elements/entities.dart'; 7 import '../elements/entities.dart';
8 import '../elements/types.dart'; 8 import '../elements/types.dart';
9 import '../tree/nodes.dart' as ast; 9 import '../tree/nodes.dart' as ast;
10 import '../types/masks.dart'; 10 import '../types/masks.dart';
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after
338 338
339 ParameterTypeInformation getInferredTypeOfParameter( 339 ParameterTypeInformation getInferredTypeOfParameter(
340 ParameterElement parameter) { 340 ParameterElement parameter) {
341 parameter = parameter.implementation; 341 parameter = parameter.implementation;
342 342
343 ParameterTypeInformation createTypeInformation() { 343 ParameterTypeInformation createTypeInformation() {
344 if (parameter.functionDeclaration.isLocal) { 344 if (parameter.functionDeclaration.isLocal) {
345 LocalFunctionElement localFunction = parameter.functionDeclaration; 345 LocalFunctionElement localFunction = parameter.functionDeclaration;
346 MethodElement callMethod = localFunction.callMethod; 346 MethodElement callMethod = localFunction.callMethod;
347 return new ParameterTypeInformation.localFunction( 347 return new ParameterTypeInformation.localFunction(
348 getInferredTypeOfMember(callMethod), parameter, callMethod); 348 getInferredTypeOfMember(callMethod),
349 parameter,
350 parameter.type,
351 callMethod);
349 } else if (parameter.functionDeclaration.isInstanceMember) { 352 } else if (parameter.functionDeclaration.isInstanceMember) {
350 MethodElement method = parameter.functionDeclaration; 353 MethodElement method = parameter.functionDeclaration;
351 return new ParameterTypeInformation.instanceMember( 354 return new ParameterTypeInformation.instanceMember(
352 getInferredTypeOfMember(method), 355 getInferredTypeOfMember(method),
353 parameter, 356 parameter,
357 parameter.type,
354 method, 358 method,
355 new ParameterAssignments()); 359 new ParameterAssignments());
356 } else { 360 } else {
357 MethodElement method = parameter.functionDeclaration; 361 MethodElement method = parameter.functionDeclaration;
358 return new ParameterTypeInformation.static( 362 return new ParameterTypeInformation.static(
359 getInferredTypeOfMember(method), parameter, method); 363 getInferredTypeOfMember(method), parameter, parameter.type, method,
364 // TODO(johnniwinther): Is this still valid now that initializing
365 // formals also introduce locals?
366 isInitializingFormal: parameter.isInitializingFormal);
360 } 367 }
361 } 368 }
362 369
363 return parameterTypeInformations.putIfAbsent(parameter, () { 370 return parameterTypeInformations.putIfAbsent(parameter, () {
364 ParameterTypeInformation typeInformation = createTypeInformation(); 371 ParameterTypeInformation typeInformation = createTypeInformation();
365 _orderedTypeInformations.add(typeInformation); 372 _orderedTypeInformations.add(typeInformation);
366 return typeInformation; 373 return typeInformation;
367 }); 374 });
368 } 375 }
369 376
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after
624 TypeMask newType = null; 631 TypeMask newType = null;
625 for (TypeMask mask in list) { 632 for (TypeMask mask in list) {
626 newType = newType == null ? mask : newType.union(mask, closedWorld); 633 newType = newType == null ? mask : newType.union(mask, closedWorld);
627 // Likewise - stop early if we already reach dynamic. 634 // Likewise - stop early if we already reach dynamic.
628 if (newType.containsAll(closedWorld)) return dynamicType; 635 if (newType.containsAll(closedWorld)) return dynamicType;
629 } 636 }
630 637
631 return newType ?? const TypeMask.nonNullEmpty(); 638 return newType ?? const TypeMask.nonNullEmpty();
632 } 639 }
633 } 640 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/inferrer/type_graph_nodes.dart ('k') | pkg/compiler/lib/src/js_backend/backend.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698