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

Side by Side Diff: lib/compiler/implementation/lib/interceptors.dart

Issue 11227042: isEven, isOdd, isNegative, isMaxValue, isMinValue, isInfinite, isPositive, isSingleValue. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Rebase. Created 8 years, 1 month 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
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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 #library('dart:_interceptors'); 5 #library('dart:_interceptors');
6 6
7 #import('dart:coreimpl'); 7 #import('dart:coreimpl');
8 8
9 add$1(var receiver, var value) { 9 add$1(var receiver, var value) {
10 if (isJsArray(receiver)) { 10 if (isJsArray(receiver)) {
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 } 109 }
110 110
111 compareTo(a, b) { 111 compareTo(a, b) {
112 if (checkNumbers(a, b)) { 112 if (checkNumbers(a, b)) {
113 if (a < b) { 113 if (a < b) {
114 return -1; 114 return -1;
115 } else if (a > b) { 115 } else if (a > b) {
116 return 1; 116 return 1;
117 } else if (a == b) { 117 } else if (a == b) {
118 if (a == 0) { 118 if (a == 0) {
119 bool aIsNegative = a.isNegative(); 119 bool aIsNegative = a.isNegative;
120 bool bIsNegative = b.isNegative(); 120 bool bIsNegative = b.isNegative;
121 if (aIsNegative == bIsNegative) return 0; 121 if (aIsNegative == bIsNegative) return 0;
122 if (aIsNegative) return -1; 122 if (aIsNegative) return -1;
123 return 1; 123 return 1;
124 } 124 }
125 return 0; 125 return 0;
126 } else if (a.isNaN()) { 126 } else if (a.isNaN) {
127 if (b.isNaN()) { 127 if (b.isNaN) {
128 return 0; 128 return 0;
129 } 129 }
130 return 1; 130 return 1;
131 } else { 131 } else {
132 return -1; 132 return -1;
133 } 133 }
134 } else if (a is String) { 134 } else if (a is String) {
135 if (b is !String) throw new ArgumentError(b); 135 if (b is !String) throw new ArgumentError(b);
136 return JS('bool', r'# == #', a, b) ? 0 136 return JS('bool', r'# == #', a, b) ? 0
137 : JS('bool', r'# < #', a, b) ? -1 : 1; 137 : JS('bool', r'# < #', a, b) ? -1 : 1;
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
366 checkMutable(receiver, 'sort'); 366 checkMutable(receiver, 'sort');
367 DualPivotQuicksort.sort(receiver, Comparable.compare); 367 DualPivotQuicksort.sort(receiver, Comparable.compare);
368 } 368 }
369 369
370 sort$1(receiver, compare) { 370 sort$1(receiver, compare) {
371 if (!isJsArray(receiver)) return UNINTERCEPTED(receiver.sort(compare)); 371 if (!isJsArray(receiver)) return UNINTERCEPTED(receiver.sort(compare));
372 checkMutable(receiver, 'sort'); 372 checkMutable(receiver, 'sort');
373 DualPivotQuicksort.sort(receiver, compare); 373 DualPivotQuicksort.sort(receiver, compare);
374 } 374 }
375 375
376 isNegative(receiver) { 376 get$isNegative(receiver) {
377 if (receiver is num) { 377 if (receiver is num) {
378 return (receiver == 0) ? (1 / receiver) < 0 : receiver < 0; 378 return (receiver == 0) ? (1 / receiver) < 0 : receiver < 0;
379 } else { 379 } else {
380 return UNINTERCEPTED(receiver.isNegative()); 380 return UNINTERCEPTED(receiver.isNegative);
381 } 381 }
382 } 382 }
383 383
384 isNaN(receiver) { 384 get$isNaN(receiver) {
385 if (receiver is num) { 385 if (receiver is num) {
386 return JS('bool', r'isNaN(#)', receiver); 386 return JS('bool', r'isNaN(#)', receiver);
387 } else { 387 } else {
388 return UNINTERCEPTED(receiver.isNaN()); 388 return UNINTERCEPTED(receiver.isNaN);
389 } 389 }
390 } 390 }
391 391
392 remainder(a, b) { 392 remainder(a, b) {
393 if (checkNumbers(a, b)) { 393 if (checkNumbers(a, b)) {
394 return JS('num', r'# % #', a, b); 394 return JS('num', r'# % #', a, b);
395 } else { 395 } else {
396 return UNINTERCEPTED(a.remainder(b)); 396 return UNINTERCEPTED(a.remainder(b));
397 } 397 }
398 } 398 }
399 399
400 abs(receiver) { 400 abs(receiver) {
401 if (receiver is !num) return UNINTERCEPTED(receiver.abs()); 401 if (receiver is !num) return UNINTERCEPTED(receiver.abs());
402 402
403 return JS('num', r'Math.abs(#)', receiver); 403 return JS('num', r'Math.abs(#)', receiver);
404 } 404 }
405 405
406 toInt(receiver) { 406 toInt(receiver) {
407 if (receiver is !num) return UNINTERCEPTED(receiver.toInt()); 407 if (receiver is !num) return UNINTERCEPTED(receiver.toInt());
408 408
409 if (receiver.isNaN()) throw new FormatException('NaN'); 409 if (receiver.isNaN) throw new FormatException('NaN');
410 410
411 if (receiver.isInfinite()) throw new FormatException('Infinity'); 411 if (receiver.isInfinite) throw new FormatException('Infinity');
412 412
413 var truncated = receiver.truncate(); 413 var truncated = receiver.truncate();
414 return JS('bool', r'# == -0.0', truncated) ? 0 : truncated; 414 return JS('bool', r'# == -0.0', truncated) ? 0 : truncated;
415 } 415 }
416 416
417 ceil(receiver) { 417 ceil(receiver) {
418 if (receiver is !num) return UNINTERCEPTED(receiver.ceil()); 418 if (receiver is !num) return UNINTERCEPTED(receiver.ceil());
419 419
420 return JS('num', r'Math.ceil(#)', receiver); 420 return JS('num', r'Math.ceil(#)', receiver);
421 } 421 }
422 422
423 floor(receiver) { 423 floor(receiver) {
424 if (receiver is !num) return UNINTERCEPTED(receiver.floor()); 424 if (receiver is !num) return UNINTERCEPTED(receiver.floor());
425 425
426 return JS('num', r'Math.floor(#)', receiver); 426 return JS('num', r'Math.floor(#)', receiver);
427 } 427 }
428 428
429 isInfinite(receiver) { 429 get$isInfinite(receiver) {
430 if (receiver is !num) return UNINTERCEPTED(receiver.isInfinite()); 430 if (receiver is !num) return UNINTERCEPTED(receiver.isInfinite);
431 431
432 return JS('bool', r'# == Infinity', receiver) 432 return JS('bool', r'# == Infinity', receiver)
433 || JS('bool', r'# == -Infinity', receiver); 433 || JS('bool', r'# == -Infinity', receiver);
434 } 434 }
435 435
436 round(receiver) { 436 round(receiver) {
437 if (receiver is !num) return UNINTERCEPTED(receiver.round()); 437 if (receiver is !num) return UNINTERCEPTED(receiver.round());
438 438
439 if (JS('bool', r'# < 0', receiver)) { 439 if (JS('bool', r'# < 0', receiver)) {
440 return JS('num', r'-Math.round(-#)', receiver); 440 return JS('num', r'-Math.round(-#)', receiver);
(...skipping 14 matching lines...) Expand all
455 return receiver < 0 ? receiver.ceil() : receiver.floor(); 455 return receiver < 0 ? receiver.ceil() : receiver.floor();
456 } 456 }
457 457
458 toStringAsFixed(receiver, fractionDigits) { 458 toStringAsFixed(receiver, fractionDigits) {
459 if (receiver is !num) { 459 if (receiver is !num) {
460 return UNINTERCEPTED(receiver.toStringAsFixed(fractionDigits)); 460 return UNINTERCEPTED(receiver.toStringAsFixed(fractionDigits));
461 } 461 }
462 checkNum(fractionDigits); 462 checkNum(fractionDigits);
463 463
464 String result = JS('String', r'#.toFixed(#)', receiver, fractionDigits); 464 String result = JS('String', r'#.toFixed(#)', receiver, fractionDigits);
465 if (receiver == 0 && receiver.isNegative()) return "-$result"; 465 if (receiver == 0 && receiver.isNegative) return "-$result";
466 return result; 466 return result;
467 } 467 }
468 468
469 toStringAsExponential(receiver, fractionDigits) { 469 toStringAsExponential(receiver, fractionDigits) {
470 if (receiver is !num) { 470 if (receiver is !num) {
471 return UNINTERCEPTED(receiver.toStringAsExponential(fractionDigits)); 471 return UNINTERCEPTED(receiver.toStringAsExponential(fractionDigits));
472 } 472 }
473 String result; 473 String result;
474 if (fractionDigits != null) { 474 if (fractionDigits != null) {
475 checkNum(fractionDigits); 475 checkNum(fractionDigits);
476 result = JS('String', r'#.toExponential(#)', receiver, fractionDigits); 476 result = JS('String', r'#.toExponential(#)', receiver, fractionDigits);
477 } else { 477 } else {
478 result = JS('String', r'#.toExponential()', receiver); 478 result = JS('String', r'#.toExponential()', receiver);
479 } 479 }
480 if (receiver == 0 && receiver.isNegative()) return "-$result"; 480 if (receiver == 0 && receiver.isNegative) return "-$result";
481 return result; 481 return result;
482 } 482 }
483 483
484 toStringAsPrecision(receiver, fractionDigits) { 484 toStringAsPrecision(receiver, fractionDigits) {
485 if (receiver is !num) { 485 if (receiver is !num) {
486 return UNINTERCEPTED(receiver.toStringAsPrecision(fractionDigits)); 486 return UNINTERCEPTED(receiver.toStringAsPrecision(fractionDigits));
487 } 487 }
488 checkNum(fractionDigits); 488 checkNum(fractionDigits);
489 489
490 String result = JS('String', r'#.toPrecision(#)', 490 String result = JS('String', r'#.toPrecision(#)',
491 receiver, fractionDigits); 491 receiver, fractionDigits);
492 if (receiver == 0 && receiver.isNegative()) return "-$result"; 492 if (receiver == 0 && receiver.isNegative) return "-$result";
493 return result; 493 return result;
494 } 494 }
495 495
496 toRadixString(receiver, radix) { 496 toRadixString(receiver, radix) {
497 if (receiver is !num) { 497 if (receiver is !num) {
498 return UNINTERCEPTED(receiver.toRadixString(radix)); 498 return UNINTERCEPTED(receiver.toRadixString(radix));
499 } 499 }
500 checkNum(radix); 500 checkNum(radix);
501 if (radix < 2 || radix > 36) throw new ArgumentError(radix); 501 if (radix < 2 || radix > 36) throw new ArgumentError(radix);
502 return JS('String', r'#.toString(#)', receiver, radix); 502 return JS('String', r'#.toString(#)', receiver, radix);
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
649 charCodes(receiver) { 649 charCodes(receiver) {
650 if (receiver is !String) return UNINTERCEPTED(receiver.charCodes()); 650 if (receiver is !String) return UNINTERCEPTED(receiver.charCodes());
651 int len = receiver.length; 651 int len = receiver.length;
652 List<int> result = new List<int>(len); 652 List<int> result = new List<int>(len);
653 for (int i = 0; i < len; i++) { 653 for (int i = 0; i < len; i++) {
654 result[i] = receiver.charCodeAt(i); 654 result[i] = receiver.charCodeAt(i);
655 } 655 }
656 return result; 656 return result;
657 } 657 }
658 658
659 isEven(receiver) { 659 get$isEven(receiver) {
660 if (receiver is !int) return UNINTERCEPTED(receiver.isEven()); 660 if (receiver is !int) return UNINTERCEPTED(receiver.isEven);
661 return (receiver & 1) == 0; 661 return (receiver & 1) == 0;
662 } 662 }
663 663
664 isOdd(receiver) { 664 get$isOdd(receiver) {
665 if (receiver is !int) return UNINTERCEPTED(receiver.isOdd()); 665 if (receiver is !int) return UNINTERCEPTED(receiver.isOdd);
666 return (receiver & 1) == 1; 666 return (receiver & 1) == 1;
667 } 667 }
668 668
669 get$runtimeType(receiver) { 669 get$runtimeType(receiver) {
670 if (receiver is int) { 670 if (receiver is int) {
671 return getOrCreateCachedRuntimeType('int'); 671 return getOrCreateCachedRuntimeType('int');
672 } else if (receiver is String) { 672 } else if (receiver is String) {
673 return getOrCreateCachedRuntimeType('String'); 673 return getOrCreateCachedRuntimeType('String');
674 } else if (receiver is double) { 674 } else if (receiver is double) {
675 return getOrCreateCachedRuntimeType('double'); 675 return getOrCreateCachedRuntimeType('double');
676 } else if (receiver is bool) { 676 } else if (receiver is bool) {
677 return getOrCreateCachedRuntimeType('bool'); 677 return getOrCreateCachedRuntimeType('bool');
678 } else if (receiver == null) { 678 } else if (receiver == null) {
679 return getOrCreateCachedRuntimeType('Null'); 679 return getOrCreateCachedRuntimeType('Null');
680 } else if (isJsArray(receiver)) { 680 } else if (isJsArray(receiver)) {
681 return getOrCreateCachedRuntimeType('List'); 681 return getOrCreateCachedRuntimeType('List');
682 } else { 682 } else {
683 return UNINTERCEPTED(receiver.runtimeType); 683 return UNINTERCEPTED(receiver.runtimeType);
684 } 684 }
685 } 685 }
686 686
687 // TODO(lrn): These getters should be generated automatically for all 687 // TODO(lrn): These getters should be generated automatically for all
688 // intercepted methods. 688 // intercepted methods.
689 get$toString(receiver) => () => toString(receiver); 689 get$toString(receiver) => () => toString(receiver);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698