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

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: Added missing copyright notices. 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
OLDNEW
1 library dart_codegen; 1 library dart_codegen;
Kevin Millikin (Google) 2014/05/09 11:12:59 This file also needs the copyright header.
2 2
3 import 'dart_tree.dart' as tree; 3 import 'dart_tree.dart' as tree;
4 import 'dart_printer.dart'; 4 import 'dart_printer.dart';
5 import 'dart_tree_printer.dart' show TreePrinter; 5 import 'dart_tree_printer.dart' show TreePrinter;
6 import '../tree/tree.dart' as frontend; 6 import '../tree/tree.dart' as frontend;
7 import '../dart2jslib.dart' as dart2js; 7 import '../dart2jslib.dart' as dart2js;
8 import '../elements/elements.dart'; 8 import '../elements/elements.dart';
9 import '../dart_types.dart'; 9 import '../dart_types.dart';
10 import '../elements/modelx.dart' as modelx; 10 import '../elements/modelx.dart' as modelx;
11 import '../universe/universe.dart'; 11 import '../universe/universe.dart';
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 Expression visitConstant(tree.Constant exp) { 156 Expression visitConstant(tree.Constant exp) {
157 return emitConstant(exp.value); 157 return emitConstant(exp.value);
158 } 158 }
159 159
160 Expression visitInvokeStatic(tree.InvokeStatic exp) { 160 Expression visitInvokeStatic(tree.InvokeStatic exp) {
161 List args = exp.arguments.map(visitExpression).toList(growable:false); 161 List args = exp.arguments.map(visitExpression).toList(growable:false);
162 return new CallStatic(null, exp.target.name, args) 162 return new CallStatic(null, exp.target.name, args)
163 ..element = exp.target; 163 ..element = exp.target;
164 } 164 }
165 165
166 Expression visitInvokeMethod(tree.InvokeMethod exp) {
167 // TODO: Derive named arguments from selector?
168 Expression receiver = visitExpression(exp.receiver);
169 List args = exp.arguments.map(visitExpression).toList(growable:false);
170 switch (exp.selector.kind) {
171 case SelectorKind.CALL:
172 return new CallMethod(receiver, exp.selector.name, args);
173
174 case SelectorKind.OPERATOR:
175 if (args.length == 0) {
176 String name = exp.selector.name;
177 if (name == 'unary-') {
178 name = '-';
179 }
180 return new UnaryOperator(name, receiver);
181 }
182 return new BinaryOperator(receiver, exp.selector.name, args[0]);
183
184 case SelectorKind.GETTER:
185 return new FieldExpression(receiver, exp.selector.name);
186
187 case SelectorKind.SETTER:
188 return new Assignment(
189 new FieldExpression(receiver, exp.selector.name),
190 '=',
191 args[0]);
192
193 case SelectorKind.INDEX:
194 Expression e = new IndexExpression(receiver, args[0]);
195 if (args.length == 2) {
196 e = new Assignment(e, '=', args[1]);
197 }
198 return e;
199
200 default:
201 throw "Unexpected selector in InvokeMethod: ${exp.selector.kind}";
202 }
203 }
204
205 Expression visitInvokeConstructor(tree.InvokeConstructor exp) {
206 List args = exp.arguments.map(visitExpression).toList(growable:false);
207 FunctionElement constructor = exp.target;
208 String name = constructor.name.isEmpty ? null : constructor.name;
209 return new CallNew(emitType(exp.type), args, constructorName: name)
210 ..constructor = constructor
211 ..dartType = exp.type;
212 }
213
166 Expression visitVariable(tree.Variable exp) { 214 Expression visitVariable(tree.Variable exp) {
167 return new Identifier(exp.name) 215 return new Identifier(exp.name)
168 ..element = exp.element; 216 ..element = exp.element;
169 } 217 }
170 218
171 TypeAnnotation emitType(DartType type) { 219 TypeAnnotation emitType(DartType type) {
172 if (type is GenericType) { // TODO(asgerf): faster Link.map 220 if (type is GenericType) { // TODO(asgerf): faster Link.map
173 return new TypeAnnotation( 221 return new TypeAnnotation(
174 type.element.name, 222 type.element.name,
175 type.typeArguments.toList(growable:false) 223 type.typeArguments.toList(growable:false)
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 emitConstant(constant.keys.entries[i]), 255 emitConstant(constant.keys.entries[i]),
208 emitConstant(constant.values[i]))); 256 emitConstant(constant.values[i])));
209 } 257 }
210 return new LiteralMap(entries, isConst: true); 258 return new LiteralMap(entries, isConst: true);
211 } else { 259 } else {
212 throw "Unsupported constant: ${constant.runtimeType}"; 260 throw "Unsupported constant: ${constant.runtimeType}";
213 } 261 }
214 } 262 }
215 } 263 }
216 264
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698