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/compiler/lib/src/js_backend/backend.dart

Issue 1638863002: Revert "Optimize subclass/subtype queries" (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 4 years, 11 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) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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 part of js_backend; 5 part of js_backend;
6 6
7 const VERBOSE_OPTIMIZER_HINTS = false; 7 const VERBOSE_OPTIMIZER_HINTS = false;
8 8
9 class JavaScriptItemCompilationContext extends ItemCompilationContext { 9 class JavaScriptItemCompilationContext extends ItemCompilationContext {
10 final Set<HInstruction> boundsChecked = new Set<HInstruction>(); 10 final Set<HInstruction> boundsChecked = new Set<HInstruction>();
(...skipping 956 matching lines...) Expand 10 before | Expand all | Expand 10 after
967 } 967 }
968 return result; 968 return result;
969 }); 969 });
970 } 970 }
971 971
972 Set<ClassElement> nativeSubclassesOfMixin(ClassElement mixin) { 972 Set<ClassElement> nativeSubclassesOfMixin(ClassElement mixin) {
973 ClassWorld classWorld = compiler.world; 973 ClassWorld classWorld = compiler.world;
974 Iterable<MixinApplicationElement> uses = classWorld.mixinUsesOf(mixin); 974 Iterable<MixinApplicationElement> uses = classWorld.mixinUsesOf(mixin);
975 Set<ClassElement> result = null; 975 Set<ClassElement> result = null;
976 for (MixinApplicationElement use in uses) { 976 for (MixinApplicationElement use in uses) {
977 classWorld.forEachStrictSubclassOf(use, (ClassElement subclass) { 977 Iterable<ClassElement> subclasses = classWorld.strictSubclassesOf(use);
978 for (ClassElement subclass in subclasses) {
978 if (isNativeOrExtendsNative(subclass)) { 979 if (isNativeOrExtendsNative(subclass)) {
979 if (result == null) result = new Set<ClassElement>(); 980 if (result == null) result = new Set<ClassElement>();
980 result.add(subclass); 981 result.add(subclass);
981 } 982 }
982 }); 983 }
983 } 984 }
984 return result; 985 return result;
985 } 986 }
986 987
987 bool operatorEqHandlesNullArgument(FunctionElement operatorEqfunction) { 988 bool operatorEqHandlesNullArgument(FunctionElement operatorEqfunction) {
988 return specialOperatorEqClasses.contains( 989 return specialOperatorEqClasses.contains(
989 operatorEqfunction.enclosingClass); 990 operatorEqfunction.enclosingClass);
990 } 991 }
991 992
992 void validateInterceptorImplementsAllObjectMethods( 993 void validateInterceptorImplementsAllObjectMethods(
(...skipping 1195 matching lines...) Expand 10 before | Expand all | Expand 10 after
2188 }); 2189 });
2189 // 3) all members, including fields via getter/setters (if resolved) 2190 // 3) all members, including fields via getter/setters (if resolved)
2190 cls.forEachClassMember((Member member) { 2191 cls.forEachClassMember((Member member) {
2191 if (resolution.hasBeenProcessed(member.element)) { 2192 if (resolution.hasBeenProcessed(member.element)) {
2192 memberNames.add(member.name); 2193 memberNames.add(member.name);
2193 reflectableMembers.add(member.element); 2194 reflectableMembers.add(member.element);
2194 } 2195 }
2195 }); 2196 });
2196 // 4) all overriding members of subclasses/subtypes (should be resolved) 2197 // 4) all overriding members of subclasses/subtypes (should be resolved)
2197 if (compiler.world.hasAnyStrictSubtype(cls)) { 2198 if (compiler.world.hasAnyStrictSubtype(cls)) {
2198 compiler.world.forEachStrictSubtypeOf(cls, (ClassElement subcls) { 2199 for (ClassElement subcls in compiler.world.strictSubtypesOf(cls)) {
2199 subcls.forEachClassMember((Member member) { 2200 subcls.forEachClassMember((Member member) {
2200 if (memberNames.contains(member.name)) { 2201 if (memberNames.contains(member.name)) {
2201 // TODO(20993): find out why this assertion fails. 2202 // TODO(20993): find out why this assertion fails.
2202 // assert(invariant(member.element, 2203 // assert(invariant(member.element,
2203 // resolution.hasBeenProcessed(member.element))); 2204 // resolution.hasBeenProcessed(member.element)));
2204 if (resolution.hasBeenProcessed(member.element)) { 2205 if (resolution.hasBeenProcessed(member.element)) {
2205 reflectableMembers.add(member.element); 2206 reflectableMembers.add(member.element);
2206 } 2207 }
2207 } 2208 }
2208 }); 2209 });
2209 }); 2210 }
2210 } 2211 }
2211 // 5) all its closures 2212 // 5) all its closures
2212 List<LocalFunctionElement> closures = closureMap[cls]; 2213 List<LocalFunctionElement> closures = closureMap[cls];
2213 if (closures != null) { 2214 if (closures != null) {
2214 reflectableMembers.addAll(closures); 2215 reflectableMembers.addAll(closures);
2215 foundClosure = true; 2216 foundClosure = true;
2216 } 2217 }
2217 } else { 2218 } else {
2218 // check members themselves 2219 // check members themselves
2219 cls.constructors.forEach((ConstructorElement element) { 2220 cls.constructors.forEach((ConstructorElement element) {
(...skipping 948 matching lines...) Expand 10 before | Expand all | Expand 10 after
3168 } 3169 }
3169 } 3170 }
3170 3171
3171 @override 3172 @override
3172 void onImpactUsed(ImpactUseCase impactUse) { 3173 void onImpactUsed(ImpactUseCase impactUse) {
3173 if (impactUse == DeferredLoadTask.IMPACT_USE) { 3174 if (impactUse == DeferredLoadTask.IMPACT_USE) {
3174 resolution.emptyCache(); 3175 resolution.emptyCache();
3175 } 3176 }
3176 } 3177 }
3177 } 3178 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/elements/modelx.dart ('k') | pkg/compiler/lib/src/js_backend/codegen/glue.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698