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

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

Issue 1313323002: Add visitor methods specific to ??= to SemanticSendVisitor. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Updated cf. comments. Created 5 years, 3 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 ssa; 5 part of ssa;
6 6
7 class SsaFunctionCompiler implements FunctionCompiler { 7 class SsaFunctionCompiler implements FunctionCompiler {
8 final SsaCodeGeneratorTask generator; 8 final SsaCodeGeneratorTask generator;
9 final SsaBuilderTask builder; 9 final SsaBuilderTask builder;
10 final SsaOptimizerTask optimizer; 10 final SsaOptimizerTask optimizer;
(...skipping 972 matching lines...) Expand 10 before | Expand all | Expand 10 after
983 } 983 }
984 super.close(); 984 super.close();
985 } 985 }
986 } 986 }
987 987
988 /** 988 /**
989 * This class builds SSA nodes for functions represented in AST. 989 * This class builds SSA nodes for functions represented in AST.
990 */ 990 */
991 class SsaBuilder extends ast.Visitor 991 class SsaBuilder extends ast.Visitor
992 with BaseImplementationOfCompoundsMixin, 992 with BaseImplementationOfCompoundsMixin,
993 BaseImplementationOfSetIfNullsMixin,
993 SendResolverMixin, 994 SendResolverMixin,
994 SemanticSendResolvedMixin, 995 SemanticSendResolvedMixin,
995 NewBulkMixin, 996 NewBulkMixin,
996 ErrorBulkMixin 997 ErrorBulkMixin
997 implements SemanticSendVisitor { 998 implements SemanticSendVisitor {
998 final Compiler compiler; 999 final Compiler compiler;
999 final JavaScriptBackend backend; 1000 final JavaScriptBackend backend;
1000 final ConstantSystem constantSystem; 1001 final ConstantSystem constantSystem;
1001 final CodegenWorkItem work; 1002 final CodegenWorkItem work;
1002 final RuntimeTypes rti; 1003 final RuntimeTypes rti;
(...skipping 5718 matching lines...) Expand 10 before | Expand all | Expand 10 after
6721 ast.SendSet node, 6722 ast.SendSet node,
6722 Element getter, 6723 Element getter,
6723 CompoundGetter getterKind, 6724 CompoundGetter getterKind,
6724 Element setter, 6725 Element setter,
6725 CompoundSetter setterKind, 6726 CompoundSetter setterKind,
6726 CompoundRhs rhs, 6727 CompoundRhs rhs,
6727 _) { 6728 _) {
6728 handleCompoundSendSet(node); 6729 handleCompoundSendSet(node);
6729 } 6730 }
6730 6731
6732 @override
6733 handleDynamicSetIfNulls(
6734 ast.Send node,
6735 ast.Node receiver,
6736 Name name,
6737 ast.Node rhs,
6738 arg) {
6739 handleCompoundSendSet(node);
6740 }
6741
6742 @override
6743 handleLocalSetIfNulls(
6744 ast.SendSet node,
6745 LocalElement local,
6746 ast.Node rhs,
6747 arg,
6748 {bool isSetterValid}) {
6749 handleCompoundSendSet(node);
6750 }
6751
6752 @override
6753 handleStaticSetIfNulls(
6754 ast.SendSet node,
6755 Element getter,
6756 CompoundGetter getterKind,
6757 Element setter,
6758 CompoundSetter setterKind,
6759 ast.Node rhs,
6760 arg) {
6761 handleCompoundSendSet(node);
6762 }
6763
6764 @override
6765 handleSuperSetIfNulls(
6766 ast.SendSet node,
6767 Element getter,
6768 CompoundGetter getterKind,
6769 Element setter,
6770 CompoundSetter setterKind,
6771 ast.Node rhs,
6772 arg) {
6773 handleSuperSendSet(node);
6774 }
6775
6776 @override
6777 handleTypeLiteralConstantSetIfNulls(
6778 ast.SendSet node,
6779 ConstantExpression constant,
6780 ast.Node rhs,
6781 arg) {
6782 // The type variable is never `null`.
6783 generateConstantTypeLiteral(node);
6784 }
6785
6786 @override
6787 visitTypeVariableTypeLiteralSetIfNull(
6788 ast.Send node,
6789 TypeVariableElement element,
6790 ast.Node rhs,
6791 arg) {
6792 // The type variable is never `null`.
6793 generateTypeVariableLiteral(node, element.type);
6794 }
6795
6731 void visitLiteralInt(ast.LiteralInt node) { 6796 void visitLiteralInt(ast.LiteralInt node) {
6732 stack.add(graph.addConstantInt(node.value, compiler)); 6797 stack.add(graph.addConstantInt(node.value, compiler));
6733 } 6798 }
6734 6799
6735 void visitLiteralDouble(ast.LiteralDouble node) { 6800 void visitLiteralDouble(ast.LiteralDouble node) {
6736 stack.add(graph.addConstantDouble(node.value, compiler)); 6801 stack.add(graph.addConstantDouble(node.value, compiler));
6737 } 6802 }
6738 6803
6739 void visitLiteralBool(ast.LiteralBool node) { 6804 void visitLiteralBool(ast.LiteralBool node) {
6740 stack.add(graph.addConstantBool(node.value, compiler)); 6805 stack.add(graph.addConstantBool(node.value, compiler));
(...skipping 1443 matching lines...) Expand 10 before | Expand all | Expand 10 after
8184 localsHandler.updateLocal(returnLocal, value); 8249 localsHandler.updateLocal(returnLocal, value);
8185 } 8250 }
8186 } 8251 }
8187 8252
8188 @override 8253 @override
8189 void handleTypeLiteralConstantCompounds( 8254 void handleTypeLiteralConstantCompounds(
8190 ast.SendSet node, 8255 ast.SendSet node,
8191 ConstantExpression constant, 8256 ConstantExpression constant,
8192 CompoundRhs rhs, 8257 CompoundRhs rhs,
8193 _) { 8258 _) {
8194 if (rhs.operator.kind == BinaryOperatorKind.IF_NULL) { 8259 handleTypeLiteralCompound(node);
8195 handleCompoundSendSet(node);
8196 } else {
8197 handleTypeLiteralCompound(node);
8198 }
8199 } 8260 }
8200 8261
8201 @override 8262 @override
8202 void handleTypeVariableTypeLiteralCompounds( 8263 void handleTypeVariableTypeLiteralCompounds(
8203 ast.SendSet node, 8264 ast.SendSet node,
8204 TypeVariableElement typeVariable, 8265 TypeVariableElement typeVariable,
8205 CompoundRhs rhs, 8266 CompoundRhs rhs,
8206 _) { 8267 _) {
8207 handleTypeLiteralCompound(node); 8268 handleTypeLiteralCompound(node);
8208 } 8269 }
(...skipping 656 matching lines...) Expand 10 before | Expand all | Expand 10 after
8865 if (unaliased is TypedefType) throw 'unable to unalias $type'; 8926 if (unaliased is TypedefType) throw 'unable to unalias $type';
8866 unaliased.accept(this, builder); 8927 unaliased.accept(this, builder);
8867 } 8928 }
8868 8929
8869 void visitDynamicType(DynamicType type, SsaBuilder builder) { 8930 void visitDynamicType(DynamicType type, SsaBuilder builder) {
8870 JavaScriptBackend backend = builder.compiler.backend; 8931 JavaScriptBackend backend = builder.compiler.backend;
8871 ClassElement cls = backend.findHelper('DynamicRuntimeType'); 8932 ClassElement cls = backend.findHelper('DynamicRuntimeType');
8872 builder.push(new HDynamicType(type, new TypeMask.exact(cls, classWorld))); 8933 builder.push(new HDynamicType(type, new TypeMask.exact(cls, classWorld)));
8873 } 8934 }
8874 } 8935 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/resolution/send_structure.dart ('k') | pkg/compiler/lib/src/use_unused_api.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698