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

Side by Side Diff: pkg/compiler/lib/src/kernel/kernel_visitor.dart

Issue 2297853003: implement kernel -> ssa for simple binary expression (Closed)
Patch Set: add TODO, rename adapter method Created 4 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
« no previous file with comments | « no previous file | pkg/compiler/lib/src/ssa/builder.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.md file. 3 // BSD-style license that can be found in the LICENSE.md file.
4 4
5 import 'package:kernel/ast.dart' as ir; 5 import 'package:kernel/ast.dart' as ir;
6 import 'package:kernel/frontend/accessors.dart' 6 import 'package:kernel/frontend/accessors.dart'
7 show 7 show
8 Accessor, 8 Accessor,
9 IndexAccessor, 9 IndexAccessor,
10 NullAwarePropertyAccessor, 10 NullAwarePropertyAccessor,
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
192 final Map<JumpTarget, ir.LabeledStatement> breakTargets = 192 final Map<JumpTarget, ir.LabeledStatement> breakTargets =
193 <JumpTarget, ir.LabeledStatement>{}; 193 <JumpTarget, ir.LabeledStatement>{};
194 194
195 final Map<LocalElement, ir.VariableDeclaration> locals = 195 final Map<LocalElement, ir.VariableDeclaration> locals =
196 <LocalElement, ir.VariableDeclaration>{}; 196 <LocalElement, ir.VariableDeclaration>{};
197 197
198 final Map<CascadeReceiver, ir.VariableGet> cascadeReceivers = 198 final Map<CascadeReceiver, ir.VariableGet> cascadeReceivers =
199 <CascadeReceiver, ir.VariableGet>{}; 199 <CascadeReceiver, ir.VariableGet>{};
200 200
201 final Map<ir.Node, Element> nodeToElement = <ir.Node, Element>{}; 201 final Map<ir.Node, Element> nodeToElement = <ir.Node, Element>{};
202 final Map<ir.Node, Node> nodeToAst = <ir.Node, Node>{};
202 203
203 ir.Node associate(ir.Node node, Element element) { 204 ir.Node associateElement(ir.Node node, Element element) {
204 nodeToElement[node] = element; 205 nodeToElement[node] = element;
205 return node; 206 return node;
206 } 207 }
207 208
208 final Map<ir.Node, Node> nodeToAst = <ir.Node, Node>{}; 209 ir.Node associateNode(ir.Node node, Node ast) {
210 nodeToAst[node] = ast;
211 return node;
212 }
209 213
210 bool isVoidContext = false; 214 bool isVoidContext = false;
211 215
212 KernelVisitor(this.currentElement, this.elements, this.kernel); 216 KernelVisitor(this.currentElement, this.elements, this.kernel);
213 217
214 KernelVisitor get sendVisitor => this; 218 KernelVisitor get sendVisitor => this;
215 219
216 KernelVisitor get declVisitor => this; 220 KernelVisitor get declVisitor => this;
217 221
218 ir.TreeNode visitForValue(Expression node) { 222 ir.TreeNode visitForValue(Expression node) {
(...skipping 904 matching lines...) Expand 10 before | Expand all | Expand 10 after
1123 1127
1124 @override 1128 @override
1125 ir.AsExpression visitAs(Send node, Node expression, DartType type, _) { 1129 ir.AsExpression visitAs(Send node, Node expression, DartType type, _) {
1126 return new ir.AsExpression( 1130 return new ir.AsExpression(
1127 visitForValue(expression), kernel.typeToIr(type)); 1131 visitForValue(expression), kernel.typeToIr(type));
1128 } 1132 }
1129 1133
1130 @override 1134 @override
1131 ir.MethodInvocation visitBinary( 1135 ir.MethodInvocation visitBinary(
1132 Send node, Node left, BinaryOperator operator, Node right, _) { 1136 Send node, Node left, BinaryOperator operator, Node right, _) {
1133 return buildBinaryOperator(left, operator.selectorName, right); 1137 return associateNode(
1138 buildBinaryOperator(left, operator.selectorName, right), node);
1134 } 1139 }
1135 1140
1136 ir.Expression buildConstructorInvoke(NewExpression node, {bool isConst}) { 1141 ir.Expression buildConstructorInvoke(NewExpression node, {bool isConst}) {
1137 ConstructorElement constructor = elements[node.send]; 1142 ConstructorElement constructor = elements[node.send];
1138 ConstructorTarget target = 1143 ConstructorTarget target =
1139 kernel.computeEffectiveTarget(constructor, elements.getType(node)); 1144 kernel.computeEffectiveTarget(constructor, elements.getType(node));
1140 NodeList arguments = node.send.argumentsNode; 1145 NodeList arguments = node.send.argumentsNode;
1141 if (kernel.isSyntheticError(target.element)) { 1146 if (kernel.isSyntheticError(target.element)) {
1142 return new ir.MethodInvocation(new ir.InvalidExpression(), 1147 return new ir.MethodInvocation(new ir.InvalidExpression(),
1143 kernel.irName("call", currentElement), buildArguments(arguments)); 1148 kernel.irName("call", currentElement), buildArguments(arguments));
(...skipping 771 matching lines...) Expand 10 before | Expand all | Expand 10 after
1915 if (setterKind == CompoundSetter.INVALID) { 1920 if (setterKind == CompoundSetter.INVALID) {
1916 setter = null; 1921 setter = null;
1917 } 1922 }
1918 return buildStaticAccessor(getter, setter).buildNullAwareAssignment( 1923 return buildStaticAccessor(getter, setter).buildNullAwareAssignment(
1919 visitForValue(rhs), 1924 visitForValue(rhs),
1920 voidContext: isVoidContext); 1925 voidContext: isVoidContext);
1921 } 1926 }
1922 1927
1923 ir.VariableDeclaration getLocal(LocalElement local) { 1928 ir.VariableDeclaration getLocal(LocalElement local) {
1924 return locals.putIfAbsent(local, () { 1929 return locals.putIfAbsent(local, () {
1925 return associate( 1930 return associateElement(
1926 new ir.VariableDeclaration(local.name, 1931 new ir.VariableDeclaration(local.name,
1927 initializer: null, 1932 initializer: null,
1928 type: typeToIrHack(local.type), 1933 type: typeToIrHack(local.type),
1929 isFinal: local.isFinal, 1934 isFinal: local.isFinal,
1930 isConst: local.isConst), 1935 isConst: local.isConst),
1931 local); 1936 local);
1932 }); 1937 });
1933 } 1938 }
1934 1939
1935 ir.FunctionNode buildFunctionNode(FunctionElement function, Node bodyNode) { 1940 ir.FunctionNode buildFunctionNode(FunctionElement function, Node bodyNode) {
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
1991 break; 1996 break;
1992 1997
1993 default: 1998 default:
1994 internalError( 1999 internalError(
1995 function, "Unknown async maker: ${function.asyncMarker}"); 2000 function, "Unknown async maker: ${function.asyncMarker}");
1996 break; 2001 break;
1997 } 2002 }
1998 } 2003 }
1999 ir.Statement body = 2004 ir.Statement body =
2000 (bodyNode == null) ? null : buildStatementInBlock(bodyNode); 2005 (bodyNode == null) ? null : buildStatementInBlock(bodyNode);
2001 return associate( 2006 return associateElement(
2002 new ir.FunctionNode(body, 2007 new ir.FunctionNode(body,
2003 asyncMarker: asyncMarker, 2008 asyncMarker: asyncMarker,
2004 returnType: returnType, 2009 returnType: returnType,
2005 typeParameters: typeParameters, 2010 typeParameters: typeParameters,
2006 positionalParameters: positionalParameters, 2011 positionalParameters: positionalParameters,
2007 namedParameters: namedParameters, 2012 namedParameters: namedParameters,
2008 requiredParameterCount: requiredParameterCount), 2013 requiredParameterCount: requiredParameterCount),
2009 function); 2014 function);
2010 } 2015 }
2011 2016
(...skipping 697 matching lines...) Expand 10 before | Expand all | Expand 10 after
2709 : this(null, true, node, initializers); 2714 : this(null, true, node, initializers);
2710 2715
2711 accept(ir.Visitor v) => throw "unsupported"; 2716 accept(ir.Visitor v) => throw "unsupported";
2712 2717
2713 visitChildren(ir.Visitor v) => throw "unsupported"; 2718 visitChildren(ir.Visitor v) => throw "unsupported";
2714 2719
2715 String toString() { 2720 String toString() {
2716 return "IrFunction($kind, $isConstructor, $node, $initializers)"; 2721 return "IrFunction($kind, $isConstructor, $node, $initializers)";
2717 } 2722 }
2718 } 2723 }
OLDNEW
« no previous file with comments | « no previous file | pkg/compiler/lib/src/ssa/builder.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698