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

Side by Side Diff: pkg/compiler/lib/src/js_backend/backend_impact.dart

Issue 1421003004: Add CoreClasses (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Updated cf. comment. Created 5 years, 1 month 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) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, 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 dart2js.js_helpers.impact; 5 library dart2js.js_helpers.impact;
6 6
7 import '../common/names.dart' show 7 import '../common/names.dart' show
8 Identifiers; 8 Identifiers;
9 import '../compiler.dart' show 9 import '../compiler.dart' show
10 Compiler; 10 Compiler;
11 import '../core_types.dart' show
12 CoreClasses;
11 import '../dart_types.dart' show 13 import '../dart_types.dart' show
12 InterfaceType; 14 InterfaceType;
13 import '../elements/elements.dart' show 15 import '../elements/elements.dart' show
14 ClassElement, 16 ClassElement,
15 Element; 17 Element;
16 18
17 import 'backend_helpers.dart'; 19 import 'backend_helpers.dart';
18 import 'constant_system_javascript.dart'; 20 import 'constant_system_javascript.dart';
19 import 'js_backend.dart'; 21 import 'js_backend.dart';
20 22
(...skipping 13 matching lines...) Expand all
34 /// The JavaScript backend dependencies for various features. 36 /// The JavaScript backend dependencies for various features.
35 class BackendImpacts { 37 class BackendImpacts {
36 final Compiler compiler; 38 final Compiler compiler;
37 39
38 BackendImpacts(this.compiler); 40 BackendImpacts(this.compiler);
39 41
40 JavaScriptBackend get backend => compiler.backend; 42 JavaScriptBackend get backend => compiler.backend;
41 43
42 BackendHelpers get helpers => backend.helpers; 44 BackendHelpers get helpers => backend.helpers;
43 45
46 CoreClasses get coreClasses => compiler.coreClasses;
47
44 BackendImpact get getRuntimeTypeArgument => new BackendImpact( 48 BackendImpact get getRuntimeTypeArgument => new BackendImpact(
45 staticUses: [ 49 staticUses: [
46 helpers.getRuntimeTypeArgument, 50 helpers.getRuntimeTypeArgument,
47 helpers.getTypeArgumentByIndex, 51 helpers.getTypeArgumentByIndex,
48 helpers.copyTypeArguments]); 52 helpers.copyTypeArguments]);
49 53
50 BackendImpact get computeSignature => new BackendImpact( 54 BackendImpact get computeSignature => new BackendImpact(
51 staticUses: [ 55 staticUses: [
52 helpers.setRuntimeTypeInfo, 56 helpers.setRuntimeTypeInfo,
53 helpers.getRuntimeTypeInfo, 57 helpers.getRuntimeTypeInfo,
54 helpers.computeSignature, 58 helpers.computeSignature,
55 helpers.getRuntimeTypeArguments], 59 helpers.getRuntimeTypeArguments],
56 instantiatedClasses: [ 60 instantiatedClasses: [
57 compiler.listClass]); 61 coreClasses.listClass]);
58 62
59 BackendImpact get asyncBody => new BackendImpact( 63 BackendImpact get asyncBody => new BackendImpact(
60 staticUses: [ 64 staticUses: [
61 helpers.asyncHelper, 65 helpers.asyncHelper,
62 helpers.syncCompleterConstructor, 66 helpers.syncCompleterConstructor,
63 helpers.streamIteratorConstructor, 67 helpers.streamIteratorConstructor,
64 helpers.wrapBody]); 68 helpers.wrapBody]);
65 69
66 BackendImpact get syncStarBody => new BackendImpact( 70 BackendImpact get syncStarBody => new BackendImpact(
67 staticUses: [ 71 staticUses: [
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 needsList( 115 needsList(
112 'Needed to encode the arguments for throw NoSuchMethodError.'), 116 'Needed to encode the arguments for throw NoSuchMethodError.'),
113 needsString( 117 needsString(
114 'Needed to encode the name for throw NoSuchMethodError.')]); 118 'Needed to encode the name for throw NoSuchMethodError.')]);
115 119
116 BackendImpact get throwRuntimeError => new BackendImpact( 120 BackendImpact get throwRuntimeError => new BackendImpact(
117 staticUses: [ 121 staticUses: [
118 helpers.throwRuntimeError], 122 helpers.throwRuntimeError],
119 // Also register the types of the arguments passed to this method. 123 // Also register the types of the arguments passed to this method.
120 instantiatedClasses: [ 124 instantiatedClasses: [
121 helpers.compiler.stringClass]); 125 coreClasses.stringClass]);
122 126
123 BackendImpact get superNoSuchMethod => new BackendImpact( 127 BackendImpact get superNoSuchMethod => new BackendImpact(
124 staticUses: [ 128 staticUses: [
125 helpers.createInvocationMirror, 129 helpers.createInvocationMirror,
126 helpers.compiler.objectClass.lookupLocalMember( 130 coreClasses.objectClass.lookupLocalMember(Identifiers.noSuchMethod_)],
127 Identifiers.noSuchMethod_)],
128 otherImpacts: [ 131 otherImpacts: [
129 needsInt( 132 needsInt(
130 'Needed to encode the invocation kind of super.noSuchMethod.'), 133 'Needed to encode the invocation kind of super.noSuchMethod.'),
131 needsList( 134 needsList(
132 'Needed to encode the arguments of super.noSuchMethod.'), 135 'Needed to encode the arguments of super.noSuchMethod.'),
133 needsString( 136 needsString(
134 'Needed to encode the name of super.noSuchMethod.')]); 137 'Needed to encode the name of super.noSuchMethod.')]);
135 138
136 BackendImpact get constantMapLiteral { 139 BackendImpact get constantMapLiteral {
137 140
138 ClassElement find(String name) { 141 ClassElement find(String name) {
139 return helpers.find(backend.jsHelperLibrary, name); 142 return helpers.find(backend.jsHelperLibrary, name);
140 } 143 }
141 144
142 return new BackendImpact( 145 return new BackendImpact(
143 instantiatedClasses: [ 146 instantiatedClasses: [
144 find(JavaScriptMapConstant.DART_CLASS), 147 find(JavaScriptMapConstant.DART_CLASS),
145 find(JavaScriptMapConstant.DART_PROTO_CLASS), 148 find(JavaScriptMapConstant.DART_PROTO_CLASS),
146 find(JavaScriptMapConstant.DART_STRING_CLASS), 149 find(JavaScriptMapConstant.DART_STRING_CLASS),
147 find(JavaScriptMapConstant.DART_GENERAL_CLASS)]); 150 find(JavaScriptMapConstant.DART_GENERAL_CLASS)]);
148 } 151 }
149 152
150 BackendImpact get symbolConstructor => new BackendImpact( 153 BackendImpact get symbolConstructor => new BackendImpact(
151 staticUses: [ 154 staticUses: [
152 helpers.compiler.symbolValidatedConstructor]); 155 helpers.compiler.symbolValidatedConstructor]);
153 156
154 BackendImpact get constSymbol => new BackendImpact( 157 BackendImpact get constSymbol => new BackendImpact(
155 instantiatedClasses: [ 158 instantiatedClasses: [
156 compiler.symbolClass], 159 coreClasses.symbolClass],
157 staticUses: [ 160 staticUses: [
158 compiler.symbolConstructor.declaration]); 161 compiler.symbolConstructor.declaration]);
159 162
160 BackendImpact get incDecOperation => 163 BackendImpact get incDecOperation =>
161 needsInt('Needed for the `+ 1` or `- 1` operation of ++/--.'); 164 needsInt('Needed for the `+ 1` or `- 1` operation of ++/--.');
162 165
163 /// Helper for registering that `int` is needed. 166 /// Helper for registering that `int` is needed.
164 BackendImpact needsInt(String reason) { 167 BackendImpact needsInt(String reason) {
165 // TODO(johnniwinther): Register [reason] for use in dump-info. 168 // TODO(johnniwinther): Register [reason] for use in dump-info.
166 return new BackendImpact( 169 return new BackendImpact(
167 instantiatedClasses: [helpers.compiler.intClass]); 170 instantiatedClasses: [coreClasses.intClass]);
168 } 171 }
169 172
170 /// Helper for registering that `List` is needed. 173 /// Helper for registering that `List` is needed.
171 BackendImpact needsList(String reason) { 174 BackendImpact needsList(String reason) {
172 // TODO(johnniwinther): Register [reason] for use in dump-info. 175 // TODO(johnniwinther): Register [reason] for use in dump-info.
173 return new BackendImpact( 176 return new BackendImpact(
174 instantiatedClasses: [helpers.compiler.listClass]); 177 instantiatedClasses: [coreClasses.listClass]);
175 } 178 }
176 179
177 /// Helper for registering that `String` is needed. 180 /// Helper for registering that `String` is needed.
178 BackendImpact needsString(String reason) { 181 BackendImpact needsString(String reason) {
179 // TODO(johnniwinther): Register [reason] for use in dump-info. 182 // TODO(johnniwinther): Register [reason] for use in dump-info.
180 return new BackendImpact( 183 return new BackendImpact(
181 instantiatedClasses: [ 184 instantiatedClasses: [
182 helpers.compiler.stringClass]); 185 coreClasses.stringClass]);
183 } 186 }
184 187
185 BackendImpact get assertWithoutMessage => new BackendImpact( 188 BackendImpact get assertWithoutMessage => new BackendImpact(
186 staticUses: [ 189 staticUses: [
187 helpers.assertHelper]); 190 helpers.assertHelper]);
188 191
189 BackendImpact get assertWithMessage => new BackendImpact( 192 BackendImpact get assertWithMessage => new BackendImpact(
190 staticUses: [ 193 staticUses: [
191 helpers.assertTest, 194 helpers.assertTest,
192 helpers.assertThrow]); 195 helpers.assertThrow]);
(...skipping 26 matching lines...) Expand all
219 helpers.cyclicThrowHelper]); 222 helpers.cyclicThrowHelper]);
220 223
221 BackendImpact get typeLiteral => new BackendImpact( 224 BackendImpact get typeLiteral => new BackendImpact(
222 instantiatedClasses: [ 225 instantiatedClasses: [
223 backend.typeImplementation], 226 backend.typeImplementation],
224 staticUses: [ 227 staticUses: [
225 helpers.createRuntimeType]); 228 helpers.createRuntimeType]);
226 229
227 BackendImpact get stackTraceInCatch => new BackendImpact( 230 BackendImpact get stackTraceInCatch => new BackendImpact(
228 instantiatedClasses: [ 231 instantiatedClasses: [
229 helpers.compiler.stackTraceClass], 232 coreClasses.stackTraceClass],
230 staticUses: [ 233 staticUses: [
231 helpers.traceFromException]); 234 helpers.traceFromException]);
232 235
233 BackendImpact get syncForIn => new BackendImpact( 236 BackendImpact get syncForIn => new BackendImpact(
234 // The SSA builder recognizes certain for-in loops and can generate calls 237 // The SSA builder recognizes certain for-in loops and can generate calls
235 // to throwConcurrentModificationError. 238 // to throwConcurrentModificationError.
236 staticUses: [ 239 staticUses: [
237 helpers.checkConcurrentModificationError]); 240 helpers.checkConcurrentModificationError]);
238 241
239 BackendImpact get typeVariableExpression => new BackendImpact( 242 BackendImpact get typeVariableExpression => new BackendImpact(
240 staticUses: [ 243 staticUses: [
241 helpers.setRuntimeTypeInfo, 244 helpers.setRuntimeTypeInfo,
242 helpers.getRuntimeTypeInfo, 245 helpers.getRuntimeTypeInfo,
243 helpers.runtimeTypeToString, 246 helpers.runtimeTypeToString,
244 helpers.createRuntimeType], 247 helpers.createRuntimeType],
245 instantiatedClasses: [ 248 instantiatedClasses: [
246 helpers.compiler.listClass], 249 coreClasses.listClass],
247 otherImpacts: [ 250 otherImpacts: [
248 getRuntimeTypeArgument, 251 getRuntimeTypeArgument,
249 needsInt('Needed for accessing a type variable literal on this.')]); 252 needsInt('Needed for accessing a type variable literal on this.')]);
250 253
251 BackendImpact get typeCheck => new BackendImpact( 254 BackendImpact get typeCheck => new BackendImpact(
252 instantiatedClasses: [ 255 instantiatedClasses: [
253 helpers.compiler.boolClass]); 256 coreClasses.boolClass]);
254 257
255 BackendImpact get checkedModeTypeCheck => new BackendImpact( 258 BackendImpact get checkedModeTypeCheck => new BackendImpact(
256 staticUses: [ 259 staticUses: [
257 helpers.throwRuntimeError]); 260 helpers.throwRuntimeError]);
258 261
259 BackendImpact get malformedTypeCheck => new BackendImpact( 262 BackendImpact get malformedTypeCheck => new BackendImpact(
260 staticUses: [ 263 staticUses: [
261 helpers.throwTypeError]); 264 helpers.throwTypeError]);
262 265
263 BackendImpact get genericTypeCheck => new BackendImpact( 266 BackendImpact get genericTypeCheck => new BackendImpact(
264 staticUses: [ 267 staticUses: [
265 helpers.checkSubtype, 268 helpers.checkSubtype,
266 // TODO(johnniwinther): Investigate why this is needed. 269 // TODO(johnniwinther): Investigate why this is needed.
267 helpers.setRuntimeTypeInfo, 270 helpers.setRuntimeTypeInfo,
268 helpers.getRuntimeTypeInfo], 271 helpers.getRuntimeTypeInfo],
269 instantiatedClasses: [ 272 instantiatedClasses: [
270 helpers.compiler.listClass], 273 coreClasses.listClass],
271 otherImpacts: [ 274 otherImpacts: [
272 getRuntimeTypeArgument]); 275 getRuntimeTypeArgument]);
273 276
274 BackendImpact get genericCheckedModeTypeCheck => new BackendImpact( 277 BackendImpact get genericCheckedModeTypeCheck => new BackendImpact(
275 staticUses: [ 278 staticUses: [
276 helpers.assertSubtype]); 279 helpers.assertSubtype]);
277 280
278 BackendImpact get typeVariableTypeCheck => new BackendImpact( 281 BackendImpact get typeVariableTypeCheck => new BackendImpact(
279 staticUses: [ 282 staticUses: [
280 helpers.checkSubtypeOfRuntimeType]); 283 helpers.checkSubtypeOfRuntimeType]);
281 284
282 BackendImpact get typeVariableCheckedModeTypeCheck => new BackendImpact( 285 BackendImpact get typeVariableCheckedModeTypeCheck => new BackendImpact(
283 staticUses: [ 286 staticUses: [
284 helpers.assertSubtypeOfRuntimeType]); 287 helpers.assertSubtypeOfRuntimeType]);
285 288
286 BackendImpact get functionTypeCheck => new BackendImpact( 289 BackendImpact get functionTypeCheck => new BackendImpact(
287 staticUses: [ 290 staticUses: [
288 helpers.functionTypeTestMetaHelper]); 291 helpers.functionTypeTestMetaHelper]);
289 292
290 BackendImpact get nativeTypeCheck => new BackendImpact( 293 BackendImpact get nativeTypeCheck => new BackendImpact(
291 staticUses: [ 294 staticUses: [
292 // We will neeed to add the "$is" and "$as" properties on the 295 // We will neeed to add the "$is" and "$as" properties on the
293 // JavaScript object prototype, so we make sure 296 // JavaScript object prototype, so we make sure
294 // [:defineProperty:] is compiled. 297 // [:defineProperty:] is compiled.
295 helpers.defineProperty]); 298 helpers.defineProperty]);
296 299
297 BackendImpact get closure => new BackendImpact( 300 BackendImpact get closure => new BackendImpact(
298 instantiatedClasses: [ 301 instantiatedClasses: [
299 helpers.compiler.functionClass]); 302 coreClasses.functionClass]);
300 } 303 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js_backend/backend.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