| 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 /// This library defines runtime operations on objects used by the code | 5 /// This library defines runtime operations on objects used by the code |
| 6 /// generator. | 6 /// generator. |
| 7 part of dart._runtime; | 7 part of dart._runtime; |
| 8 | 8 |
| 9 _canonicalFieldName(obj, name, args, displayName) => JS('', '''(() => { | 9 _canonicalFieldName(obj, name, args, displayName) => JS('', '''(() => { |
| 10 $name = $canonicalMember($obj, $name); | 10 $name = $canonicalMember($obj, $name); |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 97 $f = $f.call; | 97 $f = $f.call; |
| 98 } | 98 } |
| 99 if (!($f instanceof Function)) { | 99 if (!($f instanceof Function)) { |
| 100 $throwNoSuchMethodFunc($obj, $name, $args, originalFunction); | 100 $throwNoSuchMethodFunc($obj, $name, $args, originalFunction); |
| 101 } | 101 } |
| 102 } | 102 } |
| 103 // If f is a function, but not a method (no method type) | 103 // If f is a function, but not a method (no method type) |
| 104 // then it should have been a function valued field, so | 104 // then it should have been a function valued field, so |
| 105 // get the type from the function. | 105 // get the type from the function. |
| 106 if ($ftype === void 0) { | 106 if ($ftype === void 0) { |
| 107 $ftype = $read($f); | 107 $ftype = $_getRuntimeType($f); |
| 108 } | 108 } |
| 109 | 109 |
| 110 if (!$ftype) { | 110 if (!$ftype) { |
| 111 // TODO(leafp): Allow JS objects to go through? | 111 // TODO(leafp): Allow JS objects to go through? |
| 112 if ($typeArgs != null) { | 112 if ($typeArgs != null) { |
| 113 // TODO(jmesserly): is there a sensible way to handle these? | 113 // TODO(jmesserly): is there a sensible way to handle these? |
| 114 $throwStrongModeError('call to JS object `' + $obj + | 114 $throwStrongModeError('call to JS object `' + $obj + |
| 115 '` with type arguments <' + $typeArgs + '> is not supported.'); | 115 '` with type arguments <' + $typeArgs + '> is not supported.'); |
| 116 } | 116 } |
| 117 return $f.apply($obj, $args); | 117 return $f.apply($obj, $args); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 143 } | 143 } |
| 144 return $f.apply($obj, $args); | 144 return $f.apply($obj, $args); |
| 145 } | 145 } |
| 146 | 146 |
| 147 // TODO(leafp): throw a type error (rather than NSM) | 147 // TODO(leafp): throw a type error (rather than NSM) |
| 148 // if the arity matches but the types are wrong. | 148 // if the arity matches but the types are wrong. |
| 149 // TODO(jmesserly): nSM should include type args? | 149 // TODO(jmesserly): nSM should include type args? |
| 150 $throwNoSuchMethodFunc($obj, $name, $args, originalFunction); | 150 $throwNoSuchMethodFunc($obj, $name, $args, originalFunction); |
| 151 })()'''); | 151 })()'''); |
| 152 | 152 |
| 153 dcall(f, @rest args) => | 153 dcall(f, @rest args) => _checkAndCall( |
| 154 _checkAndCall(f, read(f), JS('', 'void 0'), null, args, 'call'); | 154 f, _getRuntimeType(f), JS('', 'void 0'), null, args, 'call'); |
| 155 | 155 |
| 156 | 156 |
| 157 dgcall(f, typeArgs, @rest args) => | 157 dgcall(f, typeArgs, @rest args) => _checkAndCall( |
| 158 _checkAndCall(f, read(f), JS('', 'void 0'), typeArgs, args, 'call'); | 158 f, _getRuntimeType(f), JS('', 'void 0'), typeArgs, args, 'call'); |
| 159 | 159 |
| 160 | 160 |
| 161 /// Shared code for dsend, dindex, and dsetindex. | 161 /// Shared code for dsend, dindex, and dsetindex. |
| 162 _callMethod(obj, name, typeArgs, args, displayName) { | 162 _callMethod(obj, name, typeArgs, args, displayName) { |
| 163 var symbol = _canonicalFieldName(obj, name, args, displayName); | 163 var symbol = _canonicalFieldName(obj, name, args, displayName); |
| 164 var f = obj != null ? JS('', '#[#]', obj, symbol) : null; | 164 var f = obj != null ? JS('', '#[#]', obj, symbol) : null; |
| 165 var ftype = getMethodType(obj, symbol); | 165 var ftype = getMethodType(obj, symbol); |
| 166 return _checkAndCall(f, ftype, obj, typeArgs, args, displayName); | 166 return _checkAndCall(f, ftype, obj, typeArgs, args, displayName); |
| 167 } | 167 } |
| 168 | 168 |
| (...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 455 constructor(dartIterator) { | 455 constructor(dartIterator) { |
| 456 this.dartIterator = dartIterator; | 456 this.dartIterator = dartIterator; |
| 457 } | 457 } |
| 458 next() { | 458 next() { |
| 459 let i = this.dartIterator; | 459 let i = this.dartIterator; |
| 460 let done = !i.moveNext(); | 460 let done = !i.moveNext(); |
| 461 return { done: done, value: done ? void 0 : i.current }; | 461 return { done: done, value: done ? void 0 : i.current }; |
| 462 } | 462 } |
| 463 } | 463 } |
| 464 '''); | 464 '''); |
| OLD | NEW |