| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 /** | 5 /** |
| 6 * This part contains helpers for supporting runtime type information. | 6 * This part contains helpers for supporting runtime type information. |
| 7 * | 7 * |
| 8 * The helper use a mixture of Dart and JavaScript objects. To indicate which is | 8 * The helper use a mixture of Dart and JavaScript objects. To indicate which is |
| 9 * used where we adopt the scheme of using explicit type annotation for Dart | 9 * used where we adopt the scheme of using explicit type annotation for Dart |
| 10 * objects and 'var' or omitted return type for JavaScript objects. | 10 * objects and 'var' or omitted return type for JavaScript objects. |
| (...skipping 382 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 393 if (rti != null) { | 393 if (rti != null) { |
| 394 // If the type has type variables (that is, `rti != null`), make a copy of | 394 // If the type has type variables (that is, `rti != null`), make a copy of |
| 395 // the type arguments and insert [o] in the first position to create a | 395 // the type arguments and insert [o] in the first position to create a |
| 396 // compound type representation. | 396 // compound type representation. |
| 397 rti = JS('JSExtendableArray', '#.slice()', rti); // Make a copy. | 397 rti = JS('JSExtendableArray', '#.slice()', rti); // Make a copy. |
| 398 JS('', '#.splice(0, 0, #)', rti, type); // Insert type at position 0. | 398 JS('', '#.splice(0, 0, #)', rti, type); // Insert type at position 0. |
| 399 type = rti; | 399 type = rti; |
| 400 } else if (hasField(t, '${JS_FUNCTION_TYPE_TAG()}')) { | 400 } else if (hasField(t, '${JS_FUNCTION_TYPE_TAG()}')) { |
| 401 // Functions are treated specially and have their type information stored | 401 // Functions are treated specially and have their type information stored |
| 402 // directly in the instance. | 402 // directly in the instance. |
| 403 var signatureName = | |
| 404 '${JS_OPERATOR_IS_PREFIX()}_${getField(t, JS_FUNCTION_TYPE_TAG())}'; | |
| 405 if (hasField(o, signatureName)) return true; | |
| 406 var targetSignatureFunction = getField(o, '${JS_SIGNATURE_NAME()}'); | 403 var targetSignatureFunction = getField(o, '${JS_SIGNATURE_NAME()}'); |
| 407 if (targetSignatureFunction == null) return false; | 404 if (targetSignatureFunction == null) return false; |
| 408 type = invokeOn(targetSignatureFunction, o, null); | 405 type = invokeOn(targetSignatureFunction, o, null); |
| 409 return isFunctionSubtype(type, t); | 406 return isFunctionSubtype(type, t); |
| 410 } | 407 } |
| 411 return isSubtype(type, t); | 408 return isSubtype(type, t); |
| 412 } | 409 } |
| 413 | 410 |
| 414 Object subtypeOfRuntimeTypeCast(Object object, var type) { | 411 Object subtypeOfRuntimeTypeCast(Object object, var type) { |
| 415 if (object != null && !checkSubtypeOfRuntimeType(object, type)) { | 412 if (object != null && !checkSubtypeOfRuntimeType(object, type)) { |
| (...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 678 * `null` and `undefined` (which we can avoid). | 675 * `null` and `undefined` (which we can avoid). |
| 679 */ | 676 */ |
| 680 bool isIdentical(var s, var t) => JS('bool', '# === #', s, t); | 677 bool isIdentical(var s, var t) => JS('bool', '# === #', s, t); |
| 681 | 678 |
| 682 /** | 679 /** |
| 683 * Returns `true` if the JavaScript values [s] and [t] are not identical. We use | 680 * Returns `true` if the JavaScript values [s] and [t] are not identical. We use |
| 684 * this helper instead of [identical] because `identical` needs to merge | 681 * this helper instead of [identical] because `identical` needs to merge |
| 685 * `null` and `undefined` (which we can avoid). | 682 * `null` and `undefined` (which we can avoid). |
| 686 */ | 683 */ |
| 687 bool isNotIdentical(var s, var t) => JS('bool', '# !== #', s, t); | 684 bool isNotIdentical(var s, var t) => JS('bool', '# !== #', s, t); |
| OLD | NEW |