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

Side by Side Diff: sdk/lib/_internal/compiler/implementation/dart_backend/dart_codegen.dart

Issue 278823002: dart2dart: Method and constructor calls in new backend. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Removed call to addArgumentsToList. Created 6 years, 7 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | sdk/lib/_internal/compiler/implementation/dart_backend/dart_printer.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) 2014, the Dart project authors. Please see the AUTHORS file
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.
4
1 library dart_codegen; 5 library dart_codegen;
2 6
3 import 'dart_tree.dart' as tree; 7 import 'dart_tree.dart' as tree;
4 import 'dart_printer.dart'; 8 import 'dart_printer.dart';
5 import 'dart_tree_printer.dart' show TreePrinter; 9 import 'dart_tree_printer.dart' show TreePrinter;
6 import '../tree/tree.dart' as frontend; 10 import '../tree/tree.dart' as frontend;
7 import '../dart2jslib.dart' as dart2js; 11 import '../dart2jslib.dart' as dart2js;
8 import '../elements/elements.dart'; 12 import '../elements/elements.dart';
9 import '../dart_types.dart'; 13 import '../dart_types.dart';
10 import '../elements/modelx.dart' as modelx; 14 import '../elements/modelx.dart' as modelx;
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 Expression visitConstant(tree.Constant exp) { 160 Expression visitConstant(tree.Constant exp) {
157 return emitConstant(exp.value); 161 return emitConstant(exp.value);
158 } 162 }
159 163
160 Expression visitInvokeStatic(tree.InvokeStatic exp) { 164 Expression visitInvokeStatic(tree.InvokeStatic exp) {
161 List args = exp.arguments.map(visitExpression).toList(growable:false); 165 List args = exp.arguments.map(visitExpression).toList(growable:false);
162 return new CallStatic(null, exp.target.name, args) 166 return new CallStatic(null, exp.target.name, args)
163 ..element = exp.target; 167 ..element = exp.target;
164 } 168 }
165 169
170 Expression visitInvokeMethod(tree.InvokeMethod exp) {
171 // TODO: Derive named arguments from selector?
172 Expression receiver = visitExpression(exp.receiver);
173 List args = exp.arguments.map(visitExpression).toList(growable:false);
174 switch (exp.selector.kind) {
175 case SelectorKind.CALL:
176 return new CallMethod(receiver, exp.selector.name, args);
177
178 case SelectorKind.OPERATOR:
179 if (args.length == 0) {
180 String name = exp.selector.name;
181 if (name == 'unary-') {
182 name = '-';
183 }
184 return new UnaryOperator(name, receiver);
185 }
186 return new BinaryOperator(receiver, exp.selector.name, args[0]);
187
188 case SelectorKind.GETTER:
189 return new FieldExpression(receiver, exp.selector.name);
190
191 case SelectorKind.SETTER:
192 return new Assignment(
193 new FieldExpression(receiver, exp.selector.name),
194 '=',
195 args[0]);
196
197 case SelectorKind.INDEX:
198 Expression e = new IndexExpression(receiver, args[0]);
199 if (args.length == 2) {
200 e = new Assignment(e, '=', args[1]);
201 }
202 return e;
203
204 default:
205 throw "Unexpected selector in InvokeMethod: ${exp.selector.kind}";
206 }
207 }
208
209 Expression visitInvokeConstructor(tree.InvokeConstructor exp) {
210 List args = exp.arguments.map(visitExpression).toList(growable:false);
211 FunctionElement constructor = exp.target;
212 String name = constructor.name.isEmpty ? null : constructor.name;
213 return new CallNew(emitType(exp.type), args, constructorName: name)
214 ..constructor = constructor
215 ..dartType = exp.type;
216 }
217
166 Expression visitVariable(tree.Variable exp) { 218 Expression visitVariable(tree.Variable exp) {
167 return new Identifier(exp.name) 219 return new Identifier(exp.name)
168 ..element = exp.element; 220 ..element = exp.element;
169 } 221 }
170 222
171 TypeAnnotation emitType(DartType type) { 223 TypeAnnotation emitType(DartType type) {
172 if (type is GenericType) { // TODO(asgerf): faster Link.map 224 if (type is GenericType) { // TODO(asgerf): faster Link.map
173 return new TypeAnnotation( 225 return new TypeAnnotation(
174 type.element.name, 226 type.element.name,
175 type.typeArguments.toList(growable:false) 227 type.typeArguments.toList(growable:false)
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 emitConstant(constant.keys.entries[i]), 259 emitConstant(constant.keys.entries[i]),
208 emitConstant(constant.values[i]))); 260 emitConstant(constant.values[i])));
209 } 261 }
210 return new LiteralMap(entries, isConst: true); 262 return new LiteralMap(entries, isConst: true);
211 } else { 263 } else {
212 throw "Unsupported constant: ${constant.runtimeType}"; 264 throw "Unsupported constant: ${constant.runtimeType}";
213 } 265 }
214 } 266 }
215 } 267 }
216 268
OLDNEW
« no previous file with comments | « no previous file | sdk/lib/_internal/compiler/implementation/dart_backend/dart_printer.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698