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

Side by Side Diff: pkg/compiler/lib/src/js_emitter/type_test_registry.dart

Issue 1859343004: dartfmt pkg/compiler (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 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) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, 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 dart2js.js_emitter; 5 part of dart2js.js_emitter;
6 6
7 class TypeTestRegistry { 7 class TypeTestRegistry {
8 /** 8 /**
9 * Raw ClassElement symbols occuring in is-checks and type assertions. If the 9 * Raw ClassElement symbols occuring in is-checks and type assertions. If the
10 * program contains parameterized checks `x is Set<int>` and 10 * program contains parameterized checks `x is Set<int>` and
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 for (ClassElement cls in classes) { 72 for (ClassElement cls in classes) {
73 addClassWithSuperclasses(cls); 73 addClassWithSuperclasses(cls);
74 } 74 }
75 } 75 }
76 76
77 // 1. Add classes that are referenced by type arguments or substitutions in 77 // 1. Add classes that are referenced by type arguments or substitutions in
78 // argument checks. 78 // argument checks.
79 // TODO(karlklose): merge this case with 2 when unifying argument and 79 // TODO(karlklose): merge this case with 2 when unifying argument and
80 // object checks. 80 // object checks.
81 RuntimeTypes rti = backend.rti; 81 RuntimeTypes rti = backend.rti;
82 rti.getRequiredArgumentClasses(backend) 82 rti.getRequiredArgumentClasses(backend).forEach(addClassWithSuperclasses);
83 .forEach(addClassWithSuperclasses);
84 83
85 // 2. Add classes that are referenced by substitutions in object checks and 84 // 2. Add classes that are referenced by substitutions in object checks and
86 // their superclasses. 85 // their superclasses.
87 TypeChecks requiredChecks = 86 TypeChecks requiredChecks =
88 rti.computeChecks(rtiNeededClasses, checkedClasses); 87 rti.computeChecks(rtiNeededClasses, checkedClasses);
89 Set<ClassElement> classesUsedInSubstitutions = 88 Set<ClassElement> classesUsedInSubstitutions =
90 rti.getClassesUsedInSubstitutions(backend, requiredChecks); 89 rti.getClassesUsedInSubstitutions(backend, requiredChecks);
91 addClassesWithSuperclasses(classesUsedInSubstitutions); 90 addClassesWithSuperclasses(classesUsedInSubstitutions);
92 91
93 // 3. Add classes that contain checked generic function types. These are 92 // 3. Add classes that contain checked generic function types. These are
94 // needed to store the signature encoding. 93 // needed to store the signature encoding.
95 for (FunctionType type in checkedFunctionTypes) { 94 for (FunctionType type in checkedFunctionTypes) {
96 ClassElement contextClass = Types.getClassContext(type); 95 ClassElement contextClass = Types.getClassContext(type);
97 if (contextClass != null) { 96 if (contextClass != null) {
98 rtiNeededClasses.add(contextClass); 97 rtiNeededClasses.add(contextClass);
99 } 98 }
100 } 99 }
101 100
102 bool canTearOff(Element function) { 101 bool canTearOff(Element function) {
103 if (!function.isFunction || 102 if (!function.isFunction ||
104 function.isConstructor || 103 function.isConstructor ||
105 function.isAccessor) { 104 function.isAccessor) {
106 return false; 105 return false;
107 } else if (function.isInstanceMember) { 106 } else if (function.isInstanceMember) {
108 if (!function.enclosingClass.isClosure) { 107 if (!function.enclosingClass.isClosure) {
109 return compiler.codegenWorld.hasInvokedGetter( 108 return compiler.codegenWorld
110 function, compiler.world); 109 .hasInvokedGetter(function, compiler.world);
111 } 110 }
112 } 111 }
113 return false; 112 return false;
114 } 113 }
115 114
116 bool canBeReflectedAsFunction(Element element) { 115 bool canBeReflectedAsFunction(Element element) {
117 return element.kind == ElementKind.FUNCTION || 116 return element.kind == ElementKind.FUNCTION ||
118 element.kind == ElementKind.GETTER || 117 element.kind == ElementKind.GETTER ||
119 element.kind == ElementKind.SETTER || 118 element.kind == ElementKind.SETTER ||
120 element.kind == ElementKind.GENERATIVE_CONSTRUCTOR; 119 element.kind == ElementKind.GENERATIVE_CONSTRUCTOR;
(...skipping 16 matching lines...) Expand all
137 } 136 }
138 } 137 }
139 }); 138 });
140 139
141 return rtiNeededClasses; 140 return rtiNeededClasses;
142 } 141 }
143 142
144 void computeRequiredTypeChecks() { 143 void computeRequiredTypeChecks() {
145 assert(checkedClasses == null && checkedFunctionTypes == null); 144 assert(checkedClasses == null && checkedFunctionTypes == null);
146 145
147 backend.rti.addImplicitChecks(compiler.codegenWorld, 146 backend.rti.addImplicitChecks(
148 classesUsingTypeVariableTests); 147 compiler.codegenWorld, classesUsingTypeVariableTests);
149 148
150 checkedClasses = new Set<ClassElement>(); 149 checkedClasses = new Set<ClassElement>();
151 checkedFunctionTypes = new Set<FunctionType>(); 150 checkedFunctionTypes = new Set<FunctionType>();
152 compiler.codegenWorld.isChecks.forEach((DartType t) { 151 compiler.codegenWorld.isChecks.forEach((DartType t) {
153 if (t is InterfaceType) { 152 if (t is InterfaceType) {
154 checkedClasses.add(t.element); 153 checkedClasses.add(t.element);
155 } else if (t is FunctionType) { 154 } else if (t is FunctionType) {
156 checkedFunctionTypes.add(t); 155 checkedFunctionTypes.add(t);
157 } 156 }
158 }); 157 });
159 } 158 }
160 } 159 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart ('k') | pkg/compiler/lib/src/library_loader.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698