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

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: Removed obsolete TODO 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 // Constructor body cannot be overriden or intercepted, so we can
floitsch 2015/01/20 17:26:27 For this to work, we need to guarantee that the cl
asgerf 2015/01/21 09:55:58 Nice catch. Since the bug also exists in the sabl
floitsch 2015/01/21 11:37:54 maybe. I actually thought that we had direct calls
221 // use the short form for this invocation.
222 return js.js('#.#(#)',
223 [visitExpression(node.receiver),
224 glue.instanceMethodName(node.target),
225 visitArguments(node.arguments)]);
226 }
219 return js.js('#.#.call(#, #)', 227 return js.js('#.#.call(#, #)',
220 [glue.prototypeAccess(node.target.enclosingClass), 228 [glue.prototypeAccess(node.target.enclosingClass),
221 glue.invocationName(node.selector), 229 glue.invocationName(node.selector),
222 visitExpression(node.receiver), 230 visitExpression(node.receiver),
223 visitArguments(node.arguments)]); 231 visitArguments(node.arguments)]);
224 } 232 }
225 233
226 @override 234 @override
227 js.Expression visitLiteralList(tree_ir.LiteralList node) { 235 js.Expression visitLiteralList(tree_ir.LiteralList node) {
228 registry.registerInstantiatedClass(glue.listClass); 236 registry.registerInstantiatedClass(glue.listClass);
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
428 return giveup(node); 436 return giveup(node);
429 // TODO: implement SuperInitializer 437 // TODO: implement SuperInitializer
430 } 438 }
431 439
432 @override 440 @override
433 js.Expression visitCreateBox(tree_ir.CreateBox node) { 441 js.Expression visitCreateBox(tree_ir.CreateBox node) {
434 return new js.ObjectInitializer([]); 442 return new js.ObjectInitializer([]);
435 } 443 }
436 444
437 @override 445 @override
438 js.Expression visitCreateClosureClass(tree_ir.CreateClosureClass node) { 446 js.Expression visitCreateInstance(tree_ir.CreateInstance node) {
439 registry.registerInstantiatedClass(node.classElement); 447 registry.registerInstantiatedClass(node.classElement);
440 return new js.New(glue.closureClassConstructorAccess(node.classElement), 448 return new js.New(glue.internalConstructorAccess(node.classElement),
441 node.arguments.map(visitExpression).toList()); 449 node.arguments.map(visitExpression).toList());
442 } 450 }
443 451
444 @override 452 @override
445 js.Expression visitGetField(tree_ir.GetField node) { 453 js.Expression visitGetField(tree_ir.GetField node) {
446 return new js.PropertyAccess.field( 454 return new js.PropertyAccess.field(
447 visitExpression(node.object), 455 visitExpression(node.object),
448 glue.instanceFieldPropertyName(node.field)); 456 glue.instanceFieldPropertyName(node.field));
449 } 457 }
450 458
451 @override 459 @override
452 void visitSetField(tree_ir.SetField node) { 460 void visitSetField(tree_ir.SetField node) {
453 js.PropertyAccess field = 461 js.PropertyAccess field =
454 new js.PropertyAccess.field( 462 new js.PropertyAccess.field(
455 visitExpression(node.object), 463 visitExpression(node.object),
456 glue.instanceFieldPropertyName(node.field)); 464 glue.instanceFieldPropertyName(node.field));
457 js.Assignment asn = new js.Assignment(field, visitExpression(node.value)); 465 js.Assignment asn = new js.Assignment(field, visitExpression(node.value));
458 accumulator.add(new js.ExpressionStatement(asn)); 466 accumulator.add(new js.ExpressionStatement(asn));
459 visitStatement(node.next); 467 visitStatement(node.next);
460 } 468 }
461 } 469 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698