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 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
115 getGenericClass(type) => | 115 getGenericClass(type) => |
116 JS('', '$safeGetOwnProperty($type, $_originalDeclaration)'); | 116 JS('', '$safeGetOwnProperty($type, $_originalDeclaration)'); |
117 | 117 |
118 getGenericArgs(type) => | 118 getGenericArgs(type) => |
119 JS('', '$safeGetOwnProperty($type, $_typeArguments)'); | 119 JS('', '$safeGetOwnProperty($type, $_typeArguments)'); |
120 | 120 |
121 final _constructorSig = JS('', 'Symbol("sigCtor")'); | 121 final _constructorSig = JS('', 'Symbol("sigCtor")'); |
122 final _methodSig = JS('', 'Symbol("sig")'); | 122 final _methodSig = JS('', 'Symbol("sig")'); |
123 final _staticSig = JS('', 'Symbol("sigStatic")'); | 123 final _staticSig = JS('', 'Symbol("sigStatic")'); |
124 | 124 |
125 /// Get the type of a method using the stored signature | 125 /// Get the type of a method from an object using the stored signature |
126 getMethodType(obj, name) => JS('', '''(() => { | 126 getMethodType(obj, name) => JS('', '''(() => { |
127 if ($obj === void 0) return void 0; | 127 if ($obj === void 0) return void 0; |
128 if ($obj == null) return void 0; | 128 if ($obj == null) return void 0; |
129 let sigObj = $obj.__proto__.constructor[$_methodSig]; | 129 return $getMethodTypeFromType($obj.__proto__.constructor, $name); |
| 130 })()'''); |
| 131 |
| 132 /// Get the type of a method from a type using the stored signature |
| 133 getMethodTypeFromType(type, name) => JS('', '''(() => { |
| 134 let sigObj = $type[$_methodSig]; |
130 if (sigObj === void 0) return void 0; | 135 if (sigObj === void 0) return void 0; |
131 let parts = sigObj[$name]; | 136 let parts = sigObj[$name]; |
132 if (parts === void 0) return void 0; | 137 if (parts === void 0) return void 0; |
133 return $definiteFunctionType.apply(null, parts); | 138 return $definiteFunctionType.apply(null, parts); |
134 })()'''); | 139 })()'''); |
135 | 140 |
136 /// Get the type of a constructor from a class using the stored signature | 141 /// Get the type of a constructor from a class using the stored signature |
137 /// If name is undefined, returns the type of the default constructor | 142 /// If name is undefined, returns the type of the default constructor |
138 /// Returns undefined if the constructor is not found. | 143 /// Returns undefined if the constructor is not found. |
139 classGetConstructorType(cls, name) => JS('', '''(() => { | 144 classGetConstructorType(cls, name) => JS('', '''(() => { |
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
367 })()'''); | 372 })()'''); |
368 | 373 |
369 /// Sets the element type of a list literal. | 374 /// Sets the element type of a list literal. |
370 list(obj, elementType) => | 375 list(obj, elementType) => |
371 JS('', '$setType($obj, ${getGenericClass(JSArray)}($elementType))'); | 376 JS('', '$setType($obj, ${getGenericClass(JSArray)}($elementType))'); |
372 | 377 |
373 setBaseClass(derived, base) => JS('', '''(() => { | 378 setBaseClass(derived, base) => JS('', '''(() => { |
374 // Link the extension to the type it's extending as a base class. | 379 // Link the extension to the type it's extending as a base class. |
375 $derived.prototype.__proto__ = $base.prototype; | 380 $derived.prototype.__proto__ = $base.prototype; |
376 })()'''); | 381 })()'''); |
OLD | NEW |