| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 dart._js_mirrors; | 5 library dart._js_mirrors; |
| 6 | 6 |
| 7 import 'dart:mirrors'; | 7 import 'dart:mirrors'; |
| 8 import 'dart:_foreign_helper' show JS; | 8 import 'dart:_foreign_helper' show JS; |
| 9 import 'dart:_internal' as _internal; | 9 import 'dart:_internal' as _internal; |
| 10 | 10 |
| (...skipping 421 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 432 if (typeArgs == null) { | 432 if (typeArgs == null) { |
| 433 _typeArguments = const []; | 433 _typeArguments = const []; |
| 434 } else { | 434 } else { |
| 435 _typeArguments = | 435 _typeArguments = |
| 436 new List.unmodifiable(typeArgs.map((t) => reflectType(_wrap(t)))); | 436 new List.unmodifiable(typeArgs.map((t) => reflectType(_wrap(t)))); |
| 437 } | 437 } |
| 438 } | 438 } |
| 439 | 439 |
| 440 InstanceMirror newInstance(Symbol constructorName, List args, | 440 InstanceMirror newInstance(Symbol constructorName, List args, |
| 441 [Map<Symbol, dynamic> namedArgs]) { | 441 [Map<Symbol, dynamic> namedArgs]) { |
| 442 // TODO(vsm): Support factory constructors and named arguments. | 442 // TODO(vsm): Support named arguments. |
| 443 var name = getName(constructorName); | 443 var name = getName(constructorName); |
| 444 assert(namedArgs == null || namedArgs.isEmpty); | 444 assert(namedArgs == null || namedArgs.isEmpty); |
| 445 // Default constructors are mapped to new. |
| 445 if (name == '') name = 'new'; | 446 if (name == '') name = 'new'; |
| 446 var instance = JS('', 'new (#.#)(...#)', _unwrap(_cls), name, args); | 447 var cls = _unwrap(_cls); |
| 448 var ctr = JS('', '#.#', cls, name); |
| 449 // Only generative Dart constructors are wired up as real JS constructors. |
| 450 var instance = JS('bool', '#.prototype == #.prototype', cls, ctr) |
| 451 // Generative |
| 452 ? JS('', 'new #(...#)', ctr, args) |
| 453 // Factory |
| 454 : JS('', '#(...#)', ctr, args); |
| 447 return reflect(instance); | 455 return reflect(instance); |
| 448 } | 456 } |
| 449 | 457 |
| 450 // TODO(vsm): Need to check for NSM, types on accessors below. Unlike the | 458 // TODO(vsm): Need to check for NSM, types on accessors below. Unlike the |
| 451 // InstanceMirror case, there is no dynamic helper to delegate to - we never | 459 // InstanceMirror case, there is no dynamic helper to delegate to - we never |
| 452 // need a dload, etc. on a static. | 460 // need a dload, etc. on a static. |
| 453 | 461 |
| 454 InstanceMirror getField(Symbol symbol) { | 462 InstanceMirror getField(Symbol symbol) { |
| 455 var name = getName(symbol); | 463 var name = getName(symbol); |
| 456 return reflect(JS('', '#[#]', _unwrap(_cls), name)); | 464 return reflect(JS('', '#[#]', _unwrap(_cls), name)); |
| (...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 658 var param = | 666 var param = |
| 659 new JsParameterMirror._(new Symbol(''), _wrap(type), metadata); | 667 new JsParameterMirror._(new Symbol(''), _wrap(type), metadata); |
| 660 params[i + args.length] = param; | 668 params[i + args.length] = param; |
| 661 } | 669 } |
| 662 | 670 |
| 663 _params = new List.unmodifiable(params); | 671 _params = new List.unmodifiable(params); |
| 664 } | 672 } |
| 665 | 673 |
| 666 String toString() => "MethodMirror on '$_name'"; | 674 String toString() => "MethodMirror on '$_name'"; |
| 667 } | 675 } |
| OLD | NEW |