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

Side by Side Diff: sdk/lib/_internal/compiler/implementation/ssa/optimize.dart

Issue 11413184: Create specialized versions of getInterceptor. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years 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 | Annotate | Revision Log
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 ssa; 5 part of ssa;
6 6
7 abstract class OptimizationPhase { 7 abstract class OptimizationPhase {
8 String get name; 8 String get name;
9 void visitGraph(HGraph graph); 9 void visitGraph(HGraph graph);
10 } 10 }
(...skipping 663 matching lines...) Expand 10 before | Expand all | Expand 10 after
674 if (!constant.constant.isPrimitive()) return node; 674 if (!constant.constant.isPrimitive()) return node;
675 PrimitiveConstant primitive = constant.constant; 675 PrimitiveConstant primitive = constant.constant;
676 folded = new DartString.concat(folded, primitive.toDartString()); 676 folded = new DartString.concat(folded, primitive.toDartString());
677 } 677 }
678 return graph.addConstant(constantSystem.createString(folded, node.node)); 678 return graph.addConstant(constantSystem.createString(folded, node.node));
679 } 679 }
680 680
681 HInstruction visitInterceptor(HInterceptor node) { 681 HInstruction visitInterceptor(HInterceptor node) {
682 if (node.isConstant()) return node; 682 if (node.isConstant()) return node;
683 HType type = types[node.inputs[0]]; 683 HType type = types[node.inputs[0]];
684 Element constantInterceptor; 684 ClassElement constantInterceptor;
685 if (type.isInteger()) { 685 if (type.isInteger()) {
686 constantInterceptor = backend.intInterceptor; 686 constantInterceptor = backend.jsIntClass;
687 } else if (type.isDouble()) { 687 } else if (type.isDouble()) {
688 constantInterceptor = backend.doubleInterceptor; 688 constantInterceptor = backend.jsDoubleClass;
689 } else if (type.isBoolean()) { 689 } else if (type.isBoolean()) {
690 constantInterceptor = backend.boolInterceptor; 690 constantInterceptor = backend.jsBoolClass;
691 } else if (type.isString()) { 691 } else if (type.isString()) {
692 constantInterceptor = backend.stringInterceptor; 692 constantInterceptor = backend.jsStringClass;
693 } else if (type.isArray()) { 693 } else if (type.isArray()) {
694 constantInterceptor = backend.arrayInterceptor; 694 constantInterceptor = backend.jsArrayClass;
695 } else if (type.isNull()) { 695 } else if (type.isNull()) {
696 constantInterceptor = backend.nullInterceptor; 696 constantInterceptor = backend.jsIntClass;
697 } else if (type.isNumber()) { 697 } else if (type.isNumber()) {
698 Set<ClassElement> intercepted = node.interceptedClasses; 698 Set<ClassElement> intercepted = node.interceptedClasses;
699 // If the method being intercepted is not defined in [int] or 699 // If the method being intercepted is not defined in [int] or
700 // [double] we can safely use the number interceptor. 700 // [double] we can safely use the number interceptor.
701 if (!intercepted.contains(compiler.intClass) 701 if (!intercepted.contains(compiler.intClass)
702 && !intercepted.contains(compiler.doubleClass)) { 702 && !intercepted.contains(compiler.doubleClass)) {
703 constantInterceptor = backend.numberInterceptor; 703 constantInterceptor = backend.jsNumberClass;
704 } 704 }
705 } 705 }
706 706
707 if (constantInterceptor == null) return node; 707 if (constantInterceptor == null) return node;
708 708
709 ConstantHandler handler = compiler.constantHandler; 709 ConstantHandler handler = compiler.constantHandler;
710 return graph.addConstant(handler.compileVariable(constantInterceptor)); 710 Constant constant = new ConstructedConstant(
711 constantInterceptor.computeType(compiler), <Constant>[]);
712 handler.registerCompileTimeConstant(constant);
713 return graph.addConstant(constant);
711 } 714 }
712 } 715 }
713 716
714 class SsaCheckInserter extends HBaseVisitor implements OptimizationPhase { 717 class SsaCheckInserter extends HBaseVisitor implements OptimizationPhase {
715 final HTypeMap types; 718 final HTypeMap types;
716 final ConstantSystem constantSystem; 719 final ConstantSystem constantSystem;
717 final Set<HInstruction> boundsChecked; 720 final Set<HInstruction> boundsChecked;
718 final WorkItem work; 721 final WorkItem work;
719 final String name = "SsaCheckInserter"; 722 final String name = "SsaCheckInserter";
720 HGraph graph; 723 HGraph graph;
(...skipping 685 matching lines...) Expand 10 before | Expand all | Expand 10 after
1406 } 1409 }
1407 1410
1408 // For other fields having setters in the generative constructor body, set 1411 // For other fields having setters in the generative constructor body, set
1409 // the type to UNKNOWN to avoid relying on the type set in the initializer 1412 // the type to UNKNOWN to avoid relying on the type set in the initializer
1410 // list. 1413 // list.
1411 allSetters.forEach((Element element) { 1414 allSetters.forEach((Element element) {
1412 backend.registerFieldConstructor(element, HType.UNKNOWN); 1415 backend.registerFieldConstructor(element, HType.UNKNOWN);
1413 }); 1416 });
1414 } 1417 }
1415 } 1418 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698