Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6)

Side by Side Diff: dart/sdk/lib/_internal/lib/js_rti.dart

Issue 125033003: Version 1.1.0-dev.5.1 (Closed) Base URL: http://dart.googlecode.com/svn/trunk/
Patch Set: Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « dart/sdk/lib/_internal/lib/js_helper.dart ('k') | dart/sdk/lib/js/dart2js/js_dart2js.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 505 matching lines...) Expand 10 before | Expand all | Expand 10 after
516 return true; 516 return true;
517 } 517 }
518 518
519 bool areAssignableMaps(var s, var t) { 519 bool areAssignableMaps(var s, var t) {
520 if (isNull(t)) return true; 520 if (isNull(t)) return true;
521 if (isNull(s)) return false; 521 if (isNull(s)) return false;
522 522
523 assert(isJsObject(s)); 523 assert(isJsObject(s));
524 assert(isJsObject(t)); 524 assert(isJsObject(t));
525 525
526 return JS('bool', r''' 526 List names =
527 function (t, s, isAssignable) { 527 JSArray.markFixedList(JS('', 'Object.getOwnPropertyNames(#)', t));
528 for (var $name in t) { 528 for (int i = 0; i < names.length; i++) {
529 if (!s.hasOwnProperty($name)) { 529 var name = names[i];
530 return false; 530 if (JS('bool', '!Object.hasOwnProperty.call(#, #)', s, name)) {
531 } 531 return false;
532 var tType = t[$name]; 532 }
533 var sType = s[$name]; 533 var tType = JS('', '#[#]', t, name);
534 if (!isAssignable.call$2(sType, tType)) { 534 var sType = JS('', '#[#]', s, name);
535 return false; 535 if (!isAssignable(tType, sType)) return false;
536 } 536 }
537 } 537 return true;
538 return true;
539 }(#, #, #)
540 ''', t, s, RAW_DART_FUNCTION_REF(isAssignable));
541 } 538 }
542 539
543 bool isFunctionSubtype(var s, var t) { 540 bool isFunctionSubtype(var s, var t) {
544 assert(hasField(t, '${JS_FUNCTION_TYPE_TAG()}')); 541 assert(hasField(t, '${JS_FUNCTION_TYPE_TAG()}'));
545 if (hasNoField(s, '${JS_FUNCTION_TYPE_TAG()}')) return false; 542 if (hasNoField(s, '${JS_FUNCTION_TYPE_TAG()}')) return false;
546 if (hasField(s, '${JS_FUNCTION_TYPE_VOID_RETURN_TAG()}')) { 543 if (hasField(s, '${JS_FUNCTION_TYPE_VOID_RETURN_TAG()}')) {
547 if (hasNoField(t, '${JS_FUNCTION_TYPE_VOID_RETURN_TAG()}') && 544 if (hasNoField(t, '${JS_FUNCTION_TYPE_VOID_RETURN_TAG()}') &&
548 hasField(t, '${JS_FUNCTION_TYPE_RETURN_TYPE_TAG()}')) { 545 hasField(t, '${JS_FUNCTION_TYPE_RETURN_TYPE_TAG()}')) {
549 return false; 546 return false;
550 } 547 }
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
696 * and [t] are Dart values. 693 * and [t] are Dart values.
697 */ 694 */
698 bool isIdentical(var s, var t) => JS('bool', '# === #', s, t); 695 bool isIdentical(var s, var t) => JS('bool', '# === #', s, t);
699 696
700 /** 697 /**
701 * Returns [:true:] if the JavaScript values [s] and [t] are not identical. We 698 * Returns [:true:] if the JavaScript values [s] and [t] are not identical. We
702 * use this helper to avoid generating code under the invalid assumption that 699 * use this helper to avoid generating code under the invalid assumption that
703 * [s] and [t] are Dart values. 700 * [s] and [t] are Dart values.
704 */ 701 */
705 bool isNotIdentical(var s, var t) => JS('bool', '# !== #', s, t); 702 bool isNotIdentical(var s, var t) => JS('bool', '# !== #', s, t);
OLDNEW
« no previous file with comments | « dart/sdk/lib/_internal/lib/js_helper.dart ('k') | dart/sdk/lib/js/dart2js/js_dart2js.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698