Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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/21 16:29:35
A constructor ...
asgerf
2015/01/22 10:18:58
Done.
| |
| 221 // use the short form for this invocation. | |
|
floitsch
2015/01/21 16:29:35
or not ;)
asgerf
2015/01/22 10:18:58
Inserted a TODO. Will update after the fix lands.
| |
| 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 Loading... | |
| 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.constructorAccess(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 } |
| OLD | NEW |