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

Side by Side Diff: pkg/compiler/lib/src/js_backend/codegen/codegen.dart

Issue 862703002: Implement constructor bodies and initializers in CPS->JS backend. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Rebase again Created 5 years, 11 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 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 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 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 library code_generator; 5 library code_generator;
6 6
7 import 'glue.dart'; 7 import 'glue.dart';
8 8
9 import '../../tree_ir/tree_ir_nodes.dart' as tree_ir; 9 import '../../tree_ir/tree_ir_nodes.dart' as tree_ir;
10 import '../../js/js.dart' as js; 10 import '../../js/js.dart' as js;
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 giveup(node, 'static getters and setters are not supported.'); 209 giveup(node, 'static getters and setters are not supported.');
210 } 210 }
211 return buildStaticInvoke(node.selector, 211 return buildStaticInvoke(node.selector,
212 node.target, 212 node.target,
213 visitArguments(node.arguments)); 213 visitArguments(node.arguments));
214 } 214 }
215 215
216 @override 216 @override
217 js.Expression visitInvokeMethodDirectly(tree_ir.InvokeMethodDirectly node) { 217 js.Expression visitInvokeMethodDirectly(tree_ir.InvokeMethodDirectly node) {
218 registry.registerDirectInvocation(node.target.declaration); 218 registry.registerDirectInvocation(node.target.declaration);
219 if (node.target is ConstructorBodyElement) {
220 // A constructor body cannot be overriden or intercepted, so we can
221 // use the short form for this invocation.
222 // TODO(asgerf): prevent name clash between constructor bodies.
223 return js.js('#.#(#)',
224 [visitExpression(node.receiver),
225 glue.instanceMethodName(node.target),
226 visitArguments(node.arguments)]);
227 }
219 return js.js('#.#.call(#, #)', 228 return js.js('#.#.call(#, #)',
220 [glue.prototypeAccess(node.target.enclosingClass), 229 [glue.prototypeAccess(node.target.enclosingClass),
221 glue.invocationName(node.selector), 230 glue.invocationName(node.selector),
222 visitExpression(node.receiver), 231 visitExpression(node.receiver),
223 visitArguments(node.arguments)]); 232 visitArguments(node.arguments)]);
224 } 233 }
225 234
226 @override 235 @override
227 js.Expression visitLiteralList(tree_ir.LiteralList node) { 236 js.Expression visitLiteralList(tree_ir.LiteralList node) {
228 registry.registerInstantiatedClass(glue.listClass); 237 registry.registerInstantiatedClass(glue.listClass);
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
428 return giveup(node); 437 return giveup(node);
429 // TODO: implement SuperInitializer 438 // TODO: implement SuperInitializer
430 } 439 }
431 440
432 @override 441 @override
433 js.Expression visitCreateBox(tree_ir.CreateBox node) { 442 js.Expression visitCreateBox(tree_ir.CreateBox node) {
434 return new js.ObjectInitializer([]); 443 return new js.ObjectInitializer([]);
435 } 444 }
436 445
437 @override 446 @override
438 js.Expression visitCreateClosureClass(tree_ir.CreateClosureClass node) { 447 js.Expression visitCreateInstance(tree_ir.CreateInstance node) {
439 registry.registerInstantiatedClass(node.classElement); 448 registry.registerInstantiatedClass(node.classElement);
440 return new js.New(glue.closureClassConstructorAccess(node.classElement), 449 return new js.New(glue.constructorAccess(node.classElement),
441 node.arguments.map(visitExpression).toList()); 450 node.arguments.map(visitExpression).toList());
442 } 451 }
443 452
444 @override 453 @override
445 js.Expression visitGetField(tree_ir.GetField node) { 454 js.Expression visitGetField(tree_ir.GetField node) {
446 return new js.PropertyAccess.field( 455 return new js.PropertyAccess.field(
447 visitExpression(node.object), 456 visitExpression(node.object),
448 glue.instanceFieldPropertyName(node.field)); 457 glue.instanceFieldPropertyName(node.field));
449 } 458 }
450 459
451 @override 460 @override
452 void visitSetField(tree_ir.SetField node) { 461 void visitSetField(tree_ir.SetField node) {
453 js.PropertyAccess field = 462 js.PropertyAccess field =
454 new js.PropertyAccess.field( 463 new js.PropertyAccess.field(
455 visitExpression(node.object), 464 visitExpression(node.object),
456 glue.instanceFieldPropertyName(node.field)); 465 glue.instanceFieldPropertyName(node.field));
457 js.Assignment asn = new js.Assignment(field, visitExpression(node.value)); 466 js.Assignment asn = new js.Assignment(field, visitExpression(node.value));
458 accumulator.add(new js.ExpressionStatement(asn)); 467 accumulator.add(new js.ExpressionStatement(asn));
459 visitStatement(node.next); 468 visitStatement(node.next);
460 } 469 }
461 } 470 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/dart_backend/backend_ast_emitter.dart ('k') | pkg/compiler/lib/src/js_backend/codegen/glue.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698