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

Side by Side Diff: pkg/compiler/lib/src/ssa/builder.dart

Issue 2366363002: Move remaining functionality from ClassWorld to ClosedWorld (Closed)
Patch Set: Created 4 years, 2 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 import 'dart:collection'; 5 import 'dart:collection';
6 6
7 import 'package:js_runtime/shared/embedded_names.dart'; 7 import 'package:js_runtime/shared/embedded_names.dart';
8 8
9 import '../closure.dart'; 9 import '../closure.dart';
10 import '../common.dart'; 10 import '../common.dart';
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 * 325 *
326 * However, inlining can only be performed when the target function can be 326 * However, inlining can only be performed when the target function can be
327 * resolved statically. The defaults can therefore be included at this point. 327 * resolved statically. The defaults can therefore be included at this point.
328 * 328 *
329 * The [providedArguments] list contains first all positional arguments, then 329 * The [providedArguments] list contains first all positional arguments, then
330 * the provided named arguments (the named arguments that are defined in the 330 * the provided named arguments (the named arguments that are defined in the
331 * [selector]) in a specific order (see [addDynamicSendArgumentsToList]). 331 * [selector]) in a specific order (see [addDynamicSendArgumentsToList]).
332 */ 332 */
333 List<HInstruction> completeDynamicSendArgumentsList(Selector selector, 333 List<HInstruction> completeDynamicSendArgumentsList(Selector selector,
334 FunctionElement function, List<HInstruction> providedArguments) { 334 FunctionElement function, List<HInstruction> providedArguments) {
335 assert(selector.applies(function, backend)); 335 assert(selector.applies(function));
336 FunctionSignature signature = function.functionSignature; 336 FunctionSignature signature = function.functionSignature;
337 List<HInstruction> compiledArguments = new List<HInstruction>( 337 List<HInstruction> compiledArguments = new List<HInstruction>(
338 signature.parameterCount + 1); // Plus one for receiver. 338 signature.parameterCount + 1); // Plus one for receiver.
339 339
340 compiledArguments[0] = providedArguments[0]; // Receiver. 340 compiledArguments[0] = providedArguments[0]; // Receiver.
341 int index = 1; 341 int index = 1;
342 for (; index <= signature.requiredParameterCount; index++) { 342 for (; index <= signature.requiredParameterCount; index++) {
343 compiledArguments[index] = providedArguments[index]; 343 compiledArguments[index] = providedArguments[index];
344 } 344 }
345 if (!signature.optionalParametersAreNamed) { 345 if (!signature.optionalParametersAreNamed) {
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
419 bool meetsHardConstraints() { 419 bool meetsHardConstraints() {
420 if (compiler.options.disableInlining) return false; 420 if (compiler.options.disableInlining) return false;
421 421
422 assert(invariant( 422 assert(invariant(
423 currentNode != null ? currentNode : element, 423 currentNode != null ? currentNode : element,
424 selector != null || 424 selector != null ||
425 Elements.isStaticOrTopLevel(element) || 425 Elements.isStaticOrTopLevel(element) ||
426 element.isGenerativeConstructorBody, 426 element.isGenerativeConstructorBody,
427 message: "Missing selector for inlining of $element.")); 427 message: "Missing selector for inlining of $element."));
428 if (selector != null) { 428 if (selector != null) {
429 if (!selector.applies(function, backend)) return false; 429 if (!selector.applies(function)) return false;
430 if (mask != null && 430 if (mask != null &&
431 !mask.canHit(function, selector, compiler.closedWorld)) { 431 !mask.canHit(function, selector, compiler.closedWorld)) {
432 return false; 432 return false;
433 } 433 }
434 } 434 }
435 435
436 if (backend.isJsInterop(element)) return false; 436 if (backend.isJsInterop(element)) return false;
437 437
438 // Don't inline operator== methods if the parameter can be null. 438 // Don't inline operator== methods if the parameter can be null.
439 if (element.name == '==') { 439 if (element.name == '==') {
(...skipping 2754 matching lines...) Expand 10 before | Expand all | Expand 10 after
3194 var inputs = <HInstruction>[pop()]; 3194 var inputs = <HInstruction>[pop()];
3195 push(buildInvokeSuper(Selectors.noSuchMethod_, element, inputs)); 3195 push(buildInvokeSuper(Selectors.noSuchMethod_, element, inputs));
3196 } 3196 }
3197 3197
3198 /// Generate a call to a super method or constructor. 3198 /// Generate a call to a super method or constructor.
3199 void generateSuperInvoke(ast.Send node, FunctionElement function, 3199 void generateSuperInvoke(ast.Send node, FunctionElement function,
3200 SourceInformation sourceInformation) { 3200 SourceInformation sourceInformation) {
3201 // TODO(5347): Try to avoid the need for calling [implementation] before 3201 // TODO(5347): Try to avoid the need for calling [implementation] before
3202 // calling [makeStaticArgumentList]. 3202 // calling [makeStaticArgumentList].
3203 Selector selector = elements.getSelector(node); 3203 Selector selector = elements.getSelector(node);
3204 assert(invariant(node, selector.applies(function.implementation, backend), 3204 assert(invariant(node, selector.applies(function.implementation),
3205 message: "$selector does not apply to ${function.implementation}")); 3205 message: "$selector does not apply to ${function.implementation}"));
3206 List<HInstruction> inputs = makeStaticArgumentList( 3206 List<HInstruction> inputs = makeStaticArgumentList(
3207 selector.callStructure, node.arguments, function.implementation); 3207 selector.callStructure, node.arguments, function.implementation);
3208 push(buildInvokeSuper(selector, function, inputs, sourceInformation)); 3208 push(buildInvokeSuper(selector, function, inputs, sourceInformation));
3209 } 3209 }
3210 3210
3211 /// Access the value from the super [element]. 3211 /// Access the value from the super [element].
3212 void handleSuperGet(ast.Send node, Element element) { 3212 void handleSuperGet(ast.Send node, Element element) {
3213 Selector selector = elements.getSelector(node); 3213 Selector selector = elements.getSelector(node);
3214 SourceInformation sourceInformation = 3214 SourceInformation sourceInformation =
(...skipping 1231 matching lines...) Expand 10 before | Expand all | Expand 10 after
4446 node, 4446 node,
4447 sourceInformation: 4447 sourceInformation:
4448 sourceInformationBuilder.buildGeneric(node.assignmentOperator)); 4448 sourceInformationBuilder.buildGeneric(node.assignmentOperator));
4449 } 4449 }
4450 4450
4451 void handleSuperSendSet(ast.SendSet node) { 4451 void handleSuperSendSet(ast.SendSet node) {
4452 Element element = elements[node]; 4452 Element element = elements[node];
4453 List<HInstruction> setterInputs = <HInstruction>[]; 4453 List<HInstruction> setterInputs = <HInstruction>[];
4454 void generateSuperSendSet() { 4454 void generateSuperSendSet() {
4455 Selector setterSelector = elements.getSelector(node); 4455 Selector setterSelector = elements.getSelector(node);
4456 if (Elements.isUnresolved(element) || 4456 if (Elements.isUnresolved(element) || !setterSelector.applies(element)) {
4457 !setterSelector.applies(element, compiler.backend)) {
4458 generateSuperNoSuchMethodSend(node, setterSelector, setterInputs); 4457 generateSuperNoSuchMethodSend(node, setterSelector, setterInputs);
4459 pop(); 4458 pop();
4460 } else { 4459 } else {
4461 add(buildInvokeSuper(setterSelector, element, setterInputs)); 4460 add(buildInvokeSuper(setterSelector, element, setterInputs));
4462 } 4461 }
4463 } 4462 }
4464 4463
4465 if (identical(node.assignmentOperator.source, '=')) { 4464 if (identical(node.assignmentOperator.source, '=')) {
4466 addDynamicSendArgumentsToList(node, setterInputs); 4465 addDynamicSendArgumentsToList(node, setterInputs);
4467 generateSuperSendSet(); 4466 generateSuperSendSet();
(...skipping 2596 matching lines...) Expand 10 before | Expand all | Expand 10 after
7064 if (unaliased is TypedefType) throw 'unable to unalias $type'; 7063 if (unaliased is TypedefType) throw 'unable to unalias $type';
7065 unaliased.accept(this, builder); 7064 unaliased.accept(this, builder);
7066 } 7065 }
7067 7066
7068 void visitDynamicType(DynamicType type, SsaBuilder builder) { 7067 void visitDynamicType(DynamicType type, SsaBuilder builder) {
7069 JavaScriptBackend backend = builder.compiler.backend; 7068 JavaScriptBackend backend = builder.compiler.backend;
7070 ClassElement cls = backend.helpers.DynamicRuntimeType; 7069 ClassElement cls = backend.helpers.DynamicRuntimeType;
7071 builder.push(new HDynamicType(type, new TypeMask.exact(cls, closedWorld))); 7070 builder.push(new HDynamicType(type, new TypeMask.exact(cls, closedWorld)));
7072 } 7071 }
7073 } 7072 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698