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

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

Issue 3002953002: Split getClosureRepresentationInfo into MemberEntity and (ir/ast) nodes (Closed)
Patch Set: Update cf. comments Created 3 years, 4 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
« no previous file with comments | « pkg/compiler/lib/src/ssa/builder.dart ('k') | pkg/compiler/lib/src/ssa/kernel_ast_adapter.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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 'package:kernel/ast.dart' as ir; 5 import 'package:kernel/ast.dart' as ir;
6 6
7 import '../closure.dart'; 7 import '../closure.dart';
8 import '../common.dart'; 8 import '../common.dart';
9 import '../common/codegen.dart' show CodegenRegistry; 9 import '../common/codegen.dart' show CodegenRegistry;
10 import '../common/names.dart'; 10 import '../common/names.dart';
(...skipping 3049 matching lines...) Expand 10 before | Expand all | Expand 10 after
3060 } else if (selector.isSetter) { 3060 } else if (selector.isSetter) {
3061 push(new HInvokeDynamicSetter(selector, mask, null, inputs, type)); 3061 push(new HInvokeDynamicSetter(selector, mask, null, inputs, type));
3062 } else { 3062 } else {
3063 push(new HInvokeDynamicMethod( 3063 push(new HInvokeDynamicMethod(
3064 selector, mask, inputs, type, isIntercepted)); 3064 selector, mask, inputs, type, isIntercepted));
3065 } 3065 }
3066 } 3066 }
3067 3067
3068 @override 3068 @override
3069 visitFunctionNode(ir.FunctionNode node) { 3069 visitFunctionNode(ir.FunctionNode node) {
3070 Local methodElement = localsMap.getLocalFunction(node.parent);
3071 ClosureRepresentationInfo closureInfo = 3070 ClosureRepresentationInfo closureInfo =
3072 closureDataLookup.getClosureRepresentationInfo(methodElement); 3071 localsMap.getClosureRepresentationInfo(closureDataLookup, node.parent);
3073 ClassEntity closureClassEntity = closureInfo.closureClassEntity; 3072 ClassEntity closureClassEntity = closureInfo.closureClassEntity;
3074 3073
3075 List<HInstruction> capturedVariables = <HInstruction>[]; 3074 List<HInstruction> capturedVariables = <HInstruction>[];
3076 closureInfo.createdFieldEntities.forEach((Local capturedLocal) { 3075 closureInfo.createdFieldEntities.forEach((Local capturedLocal) {
3077 assert(capturedLocal != null); 3076 assert(capturedLocal != null);
3078 capturedVariables.add(localsHandler.readLocal(capturedLocal)); 3077 capturedVariables.add(localsHandler.readLocal(capturedLocal));
3079 }); 3078 });
3080 3079
3081 TypeMask type = new TypeMask.nonNullExact(closureClassEntity, closedWorld); 3080 TypeMask type = new TypeMask.nonNullExact(closureClassEntity, closedWorld);
3082 // TODO(efortuna): Add source information here. 3081 // TODO(efortuna): Add source information here.
3083 push(new HCreate(closureClassEntity, capturedVariables, type, 3082 push(new HCreate(closureClassEntity, capturedVariables, type,
3084 callMethod: closureInfo.callMethod)); 3083 callMethod: closureInfo.callMethod));
3085 } 3084 }
3086 3085
3087 @override 3086 @override
3088 visitFunctionDeclaration(ir.FunctionDeclaration declaration) { 3087 visitFunctionDeclaration(ir.FunctionDeclaration declaration) {
3089 assert(isReachable); 3088 assert(isReachable);
3090 declaration.function.accept(this); 3089 declaration.function.accept(this);
3091 Local localFunction = localsMap.getLocalFunction(declaration); 3090 Local local = localsMap.getLocalVariable(declaration.variable);
3092 localsHandler.updateLocal(localFunction, pop()); 3091 localsHandler.updateLocal(local, pop());
3093 } 3092 }
3094 3093
3095 @override 3094 @override
3096 void visitFunctionExpression(ir.FunctionExpression funcExpression) { 3095 void visitFunctionExpression(ir.FunctionExpression funcExpression) {
3097 funcExpression.function.accept(this); 3096 funcExpression.function.accept(this);
3098 } 3097 }
3099 3098
3100 // TODO(het): Decide when to inline 3099 // TODO(het): Decide when to inline
3101 @override 3100 @override
3102 void visitMethodInvocation(ir.MethodInvocation invocation) { 3101 void visitMethodInvocation(ir.MethodInvocation invocation) {
(...skipping 581 matching lines...) Expand 10 before | Expand all | Expand 10 after
3684 enterBlock.setBlockFlow( 3683 enterBlock.setBlockFlow(
3685 new HTryBlockInformation( 3684 new HTryBlockInformation(
3686 kernelBuilder.wrapStatementGraph(bodyGraph), 3685 kernelBuilder.wrapStatementGraph(bodyGraph),
3687 exception, 3686 exception,
3688 kernelBuilder.wrapStatementGraph(catchGraph), 3687 kernelBuilder.wrapStatementGraph(catchGraph),
3689 kernelBuilder.wrapStatementGraph(finallyGraph)), 3688 kernelBuilder.wrapStatementGraph(finallyGraph)),
3690 exitBlock); 3689 exitBlock);
3691 kernelBuilder.inTryStatement = previouslyInTryStatement; 3690 kernelBuilder.inTryStatement = previouslyInTryStatement;
3692 } 3691 }
3693 } 3692 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/ssa/builder.dart ('k') | pkg/compiler/lib/src/ssa/kernel_ast_adapter.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698