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

Side by Side Diff: pkg/analyzer/lib/src/dart/resolver/inheritance_manager.dart

Issue 2015513003: Optimize more megamorphic dispatch sites (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 4 years, 6 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 import 'dart:collection'; 5 import 'dart:collection';
6 6
7 import 'package:analyzer/dart/ast/ast.dart'; 7 import 'package:analyzer/dart/ast/ast.dart';
8 import 'package:analyzer/dart/ast/token.dart'; 8 import 'package:analyzer/dart/ast/token.dart';
9 import 'package:analyzer/dart/element/element.dart'; 9 import 'package:analyzer/dart/element/element.dart';
10 import 'package:analyzer/dart/element/type.dart'; 10 import 'package:analyzer/dart/element/type.dart';
(...skipping 507 matching lines...) Expand 10 before | Expand all | Expand 10 after
518 visitedInterfaces.remove(mixinElement); 518 visitedInterfaces.remove(mixinElement);
519 } 519 }
520 } else { 520 } else {
521 return null; 521 return null;
522 } 522 }
523 } 523 }
524 } 524 }
525 // 525 //
526 // Interface elements 526 // Interface elements
527 // 527 //
528 for (InterfaceType interfaceType in interfaces) { 528 int interfaceLength = interfaces.length;
529 for (int i = 0; i < interfaceLength; i++) {
530 InterfaceType interfaceType = interfaces[i];
529 ClassElement interfaceElement = interfaceType.element; 531 ClassElement interfaceElement = interfaceType.element;
530 if (interfaceElement != null) { 532 if (interfaceElement != null) {
531 if (!visitedInterfaces.contains(interfaceElement)) { 533 if (!visitedInterfaces.contains(interfaceElement)) {
532 try { 534 try {
533 visitedInterfaces.add(interfaceElement); 535 visitedInterfaces.add(interfaceElement);
534 // 536 //
535 // Recursively compute the map for the interfaces. 537 // Recursively compute the map for the interfaces.
536 // 538 //
537 Map<String, ExecutableElement> map = 539 Map<String, ExecutableElement> map =
538 _computeInterfaceLookupMap(interfaceElement, visitedInterfaces); 540 _computeInterfaceLookupMap(interfaceElement, visitedInterfaces);
(...skipping 15 matching lines...) Expand all
554 } 556 }
555 } 557 }
556 } 558 }
557 if (lookupMaps.length == 0) { 559 if (lookupMaps.length == 0) {
558 return null; 560 return null;
559 } 561 }
560 return lookupMaps; 562 return lookupMaps;
561 } 563 }
562 564
563 /** 565 /**
564 * Given some [ClassElement], this method finds and returns the [ExecutableEle ment] of 566 * Given some [classElement], this method finds and returns the executable
565 * the passed name in the class element. Static members, members in super type s and members not 567 * element with the given [memberName] in the class element. Static members,
566 * accessible from the current library are not considered. 568 * members in super types and members not accessible from the current library
567 * 569 * are not considered.
568 * @param classElt the class element to query
569 * @param memberName the name of the member to lookup in the class
570 * @return the found [ExecutableElement], or `null` if no such member was foun d
571 */ 570 */
572 ExecutableElement _lookupMemberInClass( 571 ExecutableElement _lookupMemberInClass(
573 ClassElement classElt, String memberName) { 572 ClassElement classElement, String memberName) {
574 List<MethodElement> methods = classElt.methods; 573 List<MethodElement> methods = classElement.methods;
575 for (MethodElement method in methods) { 574 int methodLength = methods.length;
575 for (int i = 0; i < methodLength; i++) {
576 MethodElement method = methods[i];
576 if (memberName == method.name && 577 if (memberName == method.name &&
577 method.isAccessibleIn(_library) && 578 method.isAccessibleIn(_library) &&
578 !method.isStatic) { 579 !method.isStatic) {
579 return method; 580 return method;
580 } 581 }
581 } 582 }
582 List<PropertyAccessorElement> accessors = classElt.accessors; 583 List<PropertyAccessorElement> accessors = classElement.accessors;
583 for (PropertyAccessorElement accessor in accessors) { 584 int accessorLength = accessors.length;
585 for (int i = 0; i < accessorLength; i++) {
586 PropertyAccessorElement accessor = accessors[i];
584 if (memberName == accessor.name && 587 if (memberName == accessor.name &&
585 accessor.isAccessibleIn(_library) && 588 accessor.isAccessibleIn(_library) &&
586 !accessor.isStatic) { 589 !accessor.isStatic) {
587 return accessor; 590 return accessor;
588 } 591 }
589 } 592 }
590 return null; 593 return null;
591 } 594 }
592 595
593 /** 596 /**
(...skipping 633 matching lines...) Expand 10 before | Expand all | Expand 10 after
1227 } 1230 }
1228 1231
1229 /** 1232 /**
1230 * Initializes [keys] and [values]. 1233 * Initializes [keys] and [values].
1231 */ 1234 */
1232 void _initArrays(int initialCapacity) { 1235 void _initArrays(int initialCapacity) {
1233 _keys = new List<String>(initialCapacity); 1236 _keys = new List<String>(initialCapacity);
1234 _values = new List<ExecutableElement>(initialCapacity); 1237 _values = new List<ExecutableElement>(initialCapacity);
1235 } 1238 }
1236 } 1239 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698