| 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 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 74 } | 74 } |
| 75 | 75 |
| 76 dynamic _defaultConstructorType(type) { | 76 dynamic _defaultConstructorType(type) { |
| 77 return JS('', '#.definiteFunctionType(#, [])', _dart, type); | 77 return JS('', '#.definiteFunctionType(#, [])', _dart, type); |
| 78 } | 78 } |
| 79 | 79 |
| 80 dynamic _getMixins(type) { | 80 dynamic _getMixins(type) { |
| 81 return JS('', '#.getMixins(#, [])', _dart, type); | 81 return JS('', '#.getMixins(#, [])', _dart, type); |
| 82 } | 82 } |
| 83 | 83 |
| 84 dynamic _getFunctionType(type) { |
| 85 return JS('', '#.getFunctionTypeMirror(#)', _dart, type); |
| 86 } |
| 87 |
| 84 typedef T _Lazy<T>(); | 88 typedef T _Lazy<T>(); |
| 85 | 89 |
| 86 dynamic _getESSymbol(Symbol symbol) => | 90 dynamic _getESSymbol(Symbol symbol) => |
| 87 _internal.PrivateSymbol.getNativeSymbol(symbol); | 91 _internal.PrivateSymbol.getNativeSymbol(symbol); |
| 88 | 92 |
| 89 dynamic _getMember(Symbol symbol) { | 93 dynamic _getMember(Symbol symbol) { |
| 90 var privateSymbol = _getESSymbol(symbol); | 94 var privateSymbol = _getESSymbol(symbol); |
| 91 if (privateSymbol != null) { | 95 if (privateSymbol != null) { |
| 92 return privateSymbol; | 96 return privateSymbol; |
| 93 } | 97 } |
| (...skipping 526 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 620 // Record metadata | 624 // Record metadata |
| 621 _metadata = new List<InstanceMirror>.unmodifiable( | 625 _metadata = new List<InstanceMirror>.unmodifiable( |
| 622 ftype.skip(1).map((a) => reflect(a))); | 626 ftype.skip(1).map((a) => reflect(a))); |
| 623 ftype = ftype[0]; | 627 ftype = ftype[0]; |
| 624 } else { | 628 } else { |
| 625 _metadata = const []; | 629 _metadata = const []; |
| 626 } | 630 } |
| 627 | 631 |
| 628 // TODO(vsm): Handle generic function types properly. Or deprecate mirrors | 632 // TODO(vsm): Handle generic function types properly. Or deprecate mirrors |
| 629 // before we need to! | 633 // before we need to! |
| 630 if (JS('bool', 'typeof(#) == "function"', ftype)) { | 634 ftype = _getFunctionType(ftype); |
| 631 // Instantiate the generic version. | |
| 632 // TODO(vsm): Can't use arguments.length on arrow function. | |
| 633 ftype = JS('', '#.apply(null, #)', ftype, [dynamic, dynamic, dynamic]); | |
| 634 } | |
| 635 | 635 |
| 636 // TODO(vsm): Add named args. | 636 // TODO(vsm): Add named args. |
| 637 List args = ftype.args; | 637 List args = ftype.args; |
| 638 List opts = ftype.optionals; | 638 List opts = ftype.optionals; |
| 639 var params = new List<ParameterMirror>(args.length + opts.length); | 639 var params = new List<ParameterMirror>(args.length + opts.length); |
| 640 | 640 |
| 641 for (var i = 0; i < args.length; ++i) { | 641 for (var i = 0; i < args.length; ++i) { |
| 642 var type = args[i]; | 642 var type = args[i]; |
| 643 var metadata = ftype.metadata[i]; | 643 var metadata = ftype.metadata[i]; |
| 644 // TODO(vsm): Recover the param name. | 644 // TODO(vsm): Recover the param name. |
| 645 var param = | 645 var param = |
| 646 new JsParameterMirror._(new Symbol(''), _wrap(type), metadata); | 646 new JsParameterMirror._(new Symbol(''), _wrap(type), metadata); |
| 647 params[i] = param; | 647 params[i] = param; |
| 648 } | 648 } |
| 649 | 649 |
| 650 for (var i = 0; i < opts.length; ++i) { | 650 for (var i = 0; i < opts.length; ++i) { |
| 651 var type = opts[i]; | 651 var type = opts[i]; |
| 652 var metadata = ftype.metadata[args.length + i]; | 652 var metadata = ftype.metadata[args.length + i]; |
| 653 // TODO(vsm): Recover the param name. | 653 // TODO(vsm): Recover the param name. |
| 654 var param = | 654 var param = |
| 655 new JsParameterMirror._(new Symbol(''), _wrap(type), metadata); | 655 new JsParameterMirror._(new Symbol(''), _wrap(type), metadata); |
| 656 params[i + args.length] = param; | 656 params[i + args.length] = param; |
| 657 } | 657 } |
| 658 | 658 |
| 659 _params = new List.unmodifiable(params); | 659 _params = new List.unmodifiable(params); |
| 660 } | 660 } |
| 661 | 661 |
| 662 String toString() => "MethodMirror on '$_name'"; | 662 String toString() => "MethodMirror on '$_name'"; |
| 663 } | 663 } |
| OLD | NEW |