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 the operations that define and manipulate Dart | 5 /* This library defines the operations that define and manipulate Dart |
6 * classes. Included in this are: | 6 * classes. Included in this are: |
7 * - Generics | 7 * - Generics |
8 * - Class metadata | 8 * - Class metadata |
9 * - Extension methods | 9 * - Extension methods |
10 */ | 10 */ |
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
186 let parts = sigCtor[name]; | 186 let parts = sigCtor[name]; |
187 if (parts === void 0) return void 0; | 187 if (parts === void 0) return void 0; |
188 return types.definiteFunctionType.apply(null, parts); | 188 return types.definiteFunctionType.apply(null, parts); |
189 } | 189 } |
190 exports.classGetConstructorType = _getConstructorType; | 190 exports.classGetConstructorType = _getConstructorType; |
191 | 191 |
192 /// Given an object and a method name, tear off the method. | 192 /// Given an object and a method name, tear off the method. |
193 /// Sets the runtime type of the torn off method appropriately, | 193 /// Sets the runtime type of the torn off method appropriately, |
194 /// and also binds the object. | 194 /// and also binds the object. |
195 /// TODO(leafp): Consider caching the tearoff on the object? | 195 /// TODO(leafp): Consider caching the tearoff on the object? |
196 function bind(obj, name) { | 196 function bind(obj, name, f) { |
Leaf
2015/09/10 17:42:41
Update the comment to describe the role of f?
Jennifer Messerly
2015/09/10 19:23:08
Nice catch! Done!
| |
197 let f = obj[name].bind(obj); | 197 if (f === void 0) f = obj[name]; |
198 f = f.bind(obj); | |
199 // TODO(jmesserly): track the function's signature on the function, instead | |
200 // of having to go back to the class? | |
198 let sig = _getMethodType(obj, name); | 201 let sig = _getMethodType(obj, name); |
199 assert(sig); | 202 assert(sig); |
200 rtti.tag(f, sig); | 203 rtti.tag(f, sig); |
201 return f; | 204 return f; |
202 } | 205 } |
203 exports.bind = bind; | 206 exports.bind = bind; |
204 | 207 |
205 // Set up the method signature field on the constructor | 208 // Set up the method signature field on the constructor |
206 function _setMethodSignature(f, sigF) { | 209 function _setMethodSignature(f, sigF) { |
207 defineMemoizedGetter(f, _methodSig, () => { | 210 defineMemoizedGetter(f, _methodSig, () => { |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
402 } | 405 } |
403 exports.list = list; | 406 exports.list = list; |
404 | 407 |
405 function setBaseClass(derived, base) { | 408 function setBaseClass(derived, base) { |
406 // Link the extension to the type it's extending as a base class. | 409 // Link the extension to the type it's extending as a base class. |
407 derived.prototype.__proto__ = base.prototype; | 410 derived.prototype.__proto__ = base.prototype; |
408 } | 411 } |
409 exports.setBaseClass = setBaseClass; | 412 exports.setBaseClass = setBaseClass; |
410 | 413 |
411 }); | 414 }); |
OLD | NEW |