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

Side by Side Diff: pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/operations.dart

Issue 2996573002: fix #28988, remove throw on Dart1 incompatible is-checks for dartdevc (Closed)
Patch Set: fix changelog Created 3 years, 4 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
OLDNEW
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 class InvocationImpl extends Invocation { 9 class InvocationImpl extends Invocation {
10 final Symbol memberName; 10 final Symbol memberName;
(...skipping 464 matching lines...) Expand 10 before | Expand all | Expand 10 after
475 !!$isSubtype(type, $StreamSubscription) && 475 !!$isSubtype(type, $StreamSubscription) &&
476 !!$isSubtype(actual, $StreamSubscription)) { 476 !!$isSubtype(actual, $StreamSubscription)) {
477 console.warn('Ignoring cast fail from ' + $typeName(actual) + 477 console.warn('Ignoring cast fail from ' + $typeName(actual) +
478 ' to ' + $typeName(type)); 478 ' to ' + $typeName(type));
479 return true; 479 return true;
480 } 480 }
481 return false; 481 return false;
482 }); 482 });
483 })()'''); 483 })()''');
484 484
485 /// Returns true if [obj] is an instance of [type] 485 /// Returns true if [obj] is an instance of [type] in strong mode, otherwise
486 /// Returns true if [obj] is a JS function and [type] is a function type 486 /// false.
487 /// Returns false if [obj] is not an instance of [type] in both spec 487 ///
488 /// and strong mode 488 /// This also allows arbitrary JS function objects to be subtypes of every Dart
489 /// Returns null if [obj] is not an instance of [type] in strong mode 489 /// function types.
490 /// but might be in spec mode
491 bool strongInstanceOf(obj, type, ignoreFromWhiteList) => JS('', '''(() => { 490 bool strongInstanceOf(obj, type, ignoreFromWhiteList) => JS('', '''(() => {
492 let actual = $getReifiedType($obj); 491 let actual = $getReifiedType($obj);
493 let result = $isSubtype(actual, $type); 492 let result = $isSubtype(actual, $type);
494 if (result || (actual == $int && $isSubtype($double, $type))) return true; 493 if (result ||
495 if (actual == $jsobject && $_isFunctionType(type) && 494 (actual == $int && $isSubtype($double, $type)) ||
496 typeof(obj) === 'function') { 495 (actual == $jsobject && $_isFunctionType(type) &&
496 typeof(obj) === 'function')) {
497 return true; 497 return true;
498 } 498 }
499 if (result === false) return false; 499 if (result === null &&
500 if (!dart.__ignoreWhitelistedErrors || 500 dart.__ignoreWhitelistedErrors &&
501 ($ignoreFromWhiteList == void 0)) { 501 $ignoreFromWhiteList &&
502 return result; 502 $_ignoreTypeFailure(actual, $type)) {
503 return true;
503 } 504 }
504 if ($_ignoreTypeFailure(actual, $type)) return true; 505 return false;
505 return result;
506 })()'''); 506 })()''');
507 507
508 /// Returns true if [obj] is null or an instance of [type] 508 /// Returns true if [obj] is null or an instance of [type]
509 /// Returns false if [obj] is non-null and not an instance of [type] 509 /// Returns false if [obj] is non-null and not an instance of [type]
510 /// in strong mode 510 /// in strong mode
511 instanceOfOrNull(obj, type) => JS('', '''(() => { 511 bool instanceOfOrNull(obj, type) {
512 // If strongInstanceOf returns null, convert to false here. 512 // If strongInstanceOf returns null, convert to false here.
513 if (($obj == null) || $strongInstanceOf($obj, $type, true)) return true; 513 return obj == null || JS('bool', '#', strongInstanceOf(obj, type, true));
514 return false; 514 }
515 })()''');
516 515
517 @JSExportName('is') 516 @JSExportName('is')
518 bool instanceOf(obj, type) => JS('', '''(() => { 517 bool instanceOf(obj, type) {
519 if ($obj == null) { 518 if (obj == null) {
520 return $type == $Null || $_isTop($type); 519 return JS('bool', '# == # || #', type, Null, _isTop(type));
521 } 520 }
522 let result = $strongInstanceOf($obj, $type); 521 return strongInstanceOf(obj, type, false);
523 if (result !== null) return result; 522 }
524 if (!dart.__failForWeakModeIsChecks) return false;
525 let actual = $getReifiedType($obj);
526 let message = 'Strong mode is-check failure: ' +
527 $typeName(actual) + ' does not soundly subtype ' +
528 $typeName($type);
529 if (!dart.__ignoreAllErrors) {
530 $throwStrongModeError(message);
531 }
532 console.error(message);
533 return true; // Match Dart 1.0 Semantics when ignoring errors.
534 })()''');
535 523
536 @JSExportName('as') 524 @JSExportName('as')
537 cast(obj, type) { 525 cast(obj, type) {
538 if (JS('bool', '# == #', type, dynamic) || obj == null) return obj; 526 if (JS('bool', '# == #', type, dynamic) || obj == null) return obj;
539 bool result = strongInstanceOf(obj, type, true); 527 bool result = strongInstanceOf(obj, type, true);
540 if (JS('bool', '#', result)) return obj; 528 if (JS('bool', '#', result)) return obj;
541 if (JS('bool', '!dart.__ignoreAllErrors')) { 529 if (JS('bool', '!dart.__ignoreAllErrors')) {
542 _throwCastError(obj, type, result); 530 _throwCastError(obj, type, result);
543 } 531 }
544 JS('', 'console.error(#)', 532 JS('', 'console.error(#)',
(...skipping 461 matching lines...) Expand 10 before | Expand all | Expand 10 after
1006 /// Libraries are not actually deferred in DDC, so this just returns a future 994 /// Libraries are not actually deferred in DDC, so this just returns a future
1007 /// that completes immediately. 995 /// that completes immediately.
1008 Future loadLibrary() => new Future.value(); 996 Future loadLibrary() => new Future.value();
1009 997
1010 /// Defines lazy statics. 998 /// Defines lazy statics.
1011 void defineLazy(to, from) { 999 void defineLazy(to, from) {
1012 for (var name in getOwnNamesAndSymbols(from)) { 1000 for (var name in getOwnNamesAndSymbols(from)) {
1013 defineLazyProperty(to, name, getOwnPropertyDescriptor(from, name)); 1001 defineLazyProperty(to, name, getOwnPropertyDescriptor(from, name));
1014 } 1002 }
1015 } 1003 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698