|
494 | 494 | return result; |
495 | 495 | } |
496 | 496 |
|
497 | | - var slice = Array.prototype.slice; |
498 | | - function argsOrArray(args, idx) { |
499 | | - return args.length === 1 && Array.isArray(args[idx]) ? |
500 | | - args[idx] : |
501 | | - slice.call(args); |
502 | | - } |
503 | | - var hasProp = {}.hasOwnProperty; |
| 497 | + var hasProp = {}.hasOwnProperty, |
| 498 | + slice = Array.prototype.slice; |
504 | 499 |
|
505 | 500 | var inherits = this.inherits = Rx.internals.inherits = function (child, parent) { |
506 | 501 | function __() { this.constructor = child; } |
|
509 | 504 | }; |
510 | 505 |
|
511 | 506 | var addProperties = Rx.internals.addProperties = function (obj) { |
512 | | - var sources = slice.call(arguments, 1); |
513 | | - for (var i = 0, len = sources.length; i < len; i++) { |
514 | | - var source = sources[i]; |
| 507 | + for(var sources = [], i = 1, len = arguments.length; i < len; i++) { sources.push(arguments[i]); } |
| 508 | + for (var idx = 0, ln = sources.length; idx < ln; idx++) { |
| 509 | + var source = sources[idx]; |
515 | 510 | for (var prop in source) { |
516 | 511 | obj[prop] = source[prop]; |
517 | 512 | } |
|
2816 | 2811 | * @returns {Observable} The observable sequence whose elements are pulled from the given arguments. |
2817 | 2812 | */ |
2818 | 2813 | Observable.of = function () { |
2819 | | - return observableOf(null, arguments); |
| 2814 | + for(var args = [], i = 0, len = arguments.length; i < len; i++) { args.push(arguments[i]); } |
| 2815 | + return observableOf(null, args); |
2820 | 2816 | }; |
2821 | 2817 |
|
2822 | 2818 | /** |
|
2825 | 2821 | * @returns {Observable} The observable sequence whose elements are pulled from the given arguments. |
2826 | 2822 | */ |
2827 | 2823 | Observable.ofWithScheduler = function (scheduler) { |
2828 | | - return observableOf(scheduler, slice.call(arguments, 1)); |
| 2824 | + for(var args = [], i = 1, len = arguments.length; i < len; i++) { args.push(arguments[i]); } |
| 2825 | + return observableOf(scheduler, args); |
2829 | 2826 | }; |
2830 | 2827 |
|
2831 | 2828 | /** |
|
2847 | 2844 | Observable.pairs = function (obj, scheduler) { |
2848 | 2845 | scheduler || (scheduler = Rx.Scheduler.currentThread); |
2849 | 2846 | return new AnonymousObservable(function (observer) { |
2850 | | - var idx = 0, keys = Object.keys(obj), len = keys.length; |
2851 | | - return scheduler.scheduleRecursive(function (self) { |
| 2847 | + var keys = Object.keys(obj), len = keys.length; |
| 2848 | + return scheduler.scheduleRecursiveWithState(0, function (idx, self) { |
2852 | 2849 | if (idx < len) { |
2853 | | - var key = keys[idx++]; |
| 2850 | + var key = keys[idx]; |
2854 | 2851 | observer.onNext([key, obj[key]]); |
2855 | | - self(); |
| 2852 | + self(idx + 1); |
2856 | 2853 | } else { |
2857 | 2854 | observer.onCompleted(); |
2858 | 2855 | } |
|
3043 | 3040 | * @returns {Observable} An observable sequence that surfaces any of the given sequences, whichever reacted first. |
3044 | 3041 | */ |
3045 | 3042 | Observable.amb = function () { |
3046 | | - var acc = observableNever(), |
3047 | | - items = argsOrArray(arguments, 0); |
| 3043 | + var acc = observableNever(), items = []; |
| 3044 | + if (Array.isArray(arguments[0])) { |
| 3045 | + items = arguments[0]; |
| 3046 | + } else { |
| 3047 | + for(var i = 0, len = arguments.length; i < len; i++) { items.push(arguments[i]); } |
| 3048 | + } |
| 3049 | + |
3048 | 3050 | function func(previous, current) { |
3049 | 3051 | return previous.amb(current); |
3050 | 3052 | } |
|
3104 | 3106 | * @param {Array | Arguments} args Arguments or an array to use as the next sequence if an error occurs. |
3105 | 3107 | * @returns {Observable} An observable sequence containing elements from consecutive source sequences until a source sequence terminates successfully. |
3106 | 3108 | */ |
3107 | | - var observableCatch = Observable.catchError = Observable['catch'] = function () { |
3108 | | - return enumerableOf(argsOrArray(arguments, 0)).catchError(); |
3109 | | - }; |
3110 | | - |
3111 | | - /** |
3112 | | - * @deprecated use #catch or #catchError instead. |
3113 | | - */ |
3114 | | - Observable.catchException = function () { |
3115 | | - //deprecate('catchException', 'catch or catchError'); |
3116 | | - return observableCatch.apply(null, arguments); |
| 3109 | + var observableCatch = Observable.catchError = Observable['catch'] = Observable.catchException = function () { |
| 3110 | + var items = []; |
| 3111 | + if (Array.isArray(arguments[0])) { |
| 3112 | + items = arguments[0]; |
| 3113 | + } else { |
| 3114 | + for(var i = 0, len = arguments.length; i < len; i++) { items.push(arguments[i]); } |
| 3115 | + } |
| 3116 | + return enumerableOf(items).catchError(); |
3117 | 3117 | }; |
3118 | 3118 |
|
3119 | 3119 | /** |
|
3144 | 3144 | * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. |
3145 | 3145 | */ |
3146 | 3146 | var combineLatest = Observable.combineLatest = function () { |
3147 | | - var args = slice.call(arguments), resultSelector = args.pop(); |
| 3147 | + for(var args = [], i = 0, len = arguments.length; i < len; i++) { args.push(arguments[i]); } |
| 3148 | + var resultSelector = args.pop(); |
3148 | 3149 |
|
3149 | 3150 | if (Array.isArray(args[0])) { |
3150 | 3151 | args = args[0]; |
|
3217 | 3218 | * @returns {Observable} An observable sequence that contains the elements of each given sequence, in sequential order. |
3218 | 3219 | */ |
3219 | 3220 | var observableConcat = Observable.concat = function () { |
3220 | | - return enumerableOf(argsOrArray(arguments, 0)).concat(); |
| 3221 | + var items = []; |
| 3222 | + if (Array.isArray(arguments[0])) { |
| 3223 | + items = arguments[0]; |
| 3224 | + } else { |
| 3225 | + for(var i = 0, len = arguments.length; i < len; i++) { items.push(arguments[i]); } |
| 3226 | + } |
| 3227 | + return enumerableOf(items).concat(); |
3221 | 3228 | }; |
3222 | 3229 |
|
3223 | 3230 | /** |
|
3282 | 3289 | * @returns {Observable} The observable sequence that merges the elements of the observable sequences. |
3283 | 3290 | */ |
3284 | 3291 | var observableMerge = Observable.merge = function () { |
3285 | | - var scheduler, sources; |
| 3292 | + var scheduler, sources = [], i, len = arguments.length; |
3286 | 3293 | if (!arguments[0]) { |
3287 | 3294 | scheduler = immediateScheduler; |
3288 | | - sources = slice.call(arguments, 1); |
| 3295 | + for(i = 1; i < len; i++) { sources.push(arguments[i]); } |
3289 | 3296 | } else if (isScheduler(arguments[0])) { |
3290 | 3297 | scheduler = arguments[0]; |
3291 | | - sources = slice.call(arguments, 1); |
| 3298 | + for(i = 1; i < len; i++) { sources.push(arguments[i]); } |
3292 | 3299 | } else { |
3293 | 3300 | scheduler = immediateScheduler; |
3294 | | - sources = slice.call(arguments, 0); |
| 3301 | + for(i = 0; i < len; i++) { sources.push(arguments[i]); } |
3295 | 3302 | } |
3296 | 3303 | if (Array.isArray(sources[0])) { |
3297 | 3304 | sources = sources[0]; |
|
3357 | 3364 | * @returns {Observable} An observable sequence that concatenates the source sequences, even if a sequence terminates exceptionally. |
3358 | 3365 | */ |
3359 | 3366 | var onErrorResumeNext = Observable.onErrorResumeNext = function () { |
3360 | | - var sources = argsOrArray(arguments, 0); |
| 3367 | + var sources = []; |
| 3368 | + if (Array.isArray(arguments[0])) { |
| 3369 | + sources = arguments[0]; |
| 3370 | + } else { |
| 3371 | + for(var i = 0, len = arguments.length; i < len; i++) { sources.push(arguments[i]); } |
| 3372 | + } |
3361 | 3373 | return new AnonymousObservable(function (observer) { |
3362 | 3374 | var pos = 0, subscription = new SerialDisposable(), |
3363 | 3375 | cancelable = immediateScheduler.scheduleRecursive(function (self) { |
|
3470 | 3482 | * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. |
3471 | 3483 | */ |
3472 | 3484 | observableProto.withLatestFrom = function () { |
3473 | | - var source = this; |
3474 | | - var args = slice.call(arguments); |
3475 | | - var resultSelector = args.pop(); |
| 3485 | + for(var args = [], i = 0, len = arguments.length; i < len; i++) { args.push(arguments[i]); } |
| 3486 | + var resultSelector = args.pop(), source = this; |
3476 | 3487 |
|
3477 | 3488 | if (typeof source === 'undefined') { |
3478 | 3489 | throw new Error('Source observable not found for withLatestFrom().'); |
|
3628 | 3639 | * @returns {Observable} An observable sequence containing lists of elements at corresponding indexes. |
3629 | 3640 | */ |
3630 | 3641 | Observable.zipArray = function () { |
3631 | | - var sources = argsOrArray(arguments, 0); |
| 3642 | + var sources = []; |
| 3643 | + if (Array.isArray(arguments[0])) { |
| 3644 | + sources = arguments[0]; |
| 3645 | + } else { |
| 3646 | + for(var i = 0, len = arguments.length; i < len; i++) { sources.push(arguments[i]); } |
| 3647 | + } |
3632 | 3648 | return new AnonymousObservable(function (observer) { |
3633 | 3649 | var n = sources.length, |
3634 | 3650 | queues = arrayInitialize(n, function () { return []; }), |
|
4007 | 4023 | } else { |
4008 | 4024 | scheduler = immediateScheduler; |
4009 | 4025 | } |
4010 | | - values = slice.call(arguments, start); |
4011 | | - return enumerableOf([observableFromArray(values, scheduler), this]).concat(); |
| 4026 | + for(var args = [], i = start, len = arguments.length; i < len; i++) { args.push(arguments[i]); } |
| 4027 | + return enumerableOf([observableFromArray(args, scheduler), this]).concat(); |
4012 | 4028 | }; |
4013 | 4029 |
|
4014 | 4030 | /** |
|
5596 | 5612 | gen = fn; |
5597 | 5613 |
|
5598 | 5614 | if (isGenFun) { |
5599 | | - var args = slice.call(arguments), |
5600 | | - len = args.length, |
| 5615 | + for(var args = [], i = 0, len = arguments.length; i < len; i++) { args.push(arguments[i]); } |
| 5616 | + var len = args.length, |
5601 | 5617 | hasCallback = len && typeof args[len - 1] === fnString; |
5602 | 5618 |
|
5603 | 5619 | done = hasCallback ? args.pop() : handleError; |
|
5617 | 5633 |
|
5618 | 5634 | // multiple args |
5619 | 5635 | if (arguments.length > 2) { |
5620 | | - res = slice.call(arguments, 1); |
| 5636 | + for(var res = [], i = 1, len = arguments.length; i < len; i++) { res.push(arguments[i]); } |
5621 | 5637 | } |
5622 | 5638 |
|
5623 | 5639 | if (err) { |
|
5738 | 5754 | */ |
5739 | 5755 | Observable.fromCallback = function (func, context, selector) { |
5740 | 5756 | return function () { |
5741 | | - var args = slice.call(arguments, 0); |
| 5757 | + for(var args = [], i = 0, len = arguments.length; i < len; i++) { args.push(arguments[i]); } |
5742 | 5758 |
|
5743 | 5759 | return new AnonymousObservable(function (observer) { |
5744 | 5760 | function handler() { |
|
5748 | 5764 | try { |
5749 | 5765 | results = selector(results); |
5750 | 5766 | } catch (err) { |
5751 | | - observer.onError(err); |
5752 | | - return; |
| 5767 | + return observer.onError(err); |
5753 | 5768 | } |
5754 | 5769 |
|
5755 | 5770 | observer.onNext(results); |
|
5779 | 5794 | */ |
5780 | 5795 | Observable.fromNodeCallback = function (func, context, selector) { |
5781 | 5796 | return function () { |
5782 | | - var args = slice.call(arguments, 0); |
| 5797 | + for(var args = [], i = 0, len = arguments.length; i < len; i++) { args.push(arguments[i]); } |
5783 | 5798 |
|
5784 | 5799 | return new AnonymousObservable(function (observer) { |
5785 | 5800 | function handler(err) { |
|
5788 | 5803 | return; |
5789 | 5804 | } |
5790 | 5805 |
|
5791 | | - var results = slice.call(arguments, 1); |
| 5806 | + for(var results = [], i = 1, len = arguments.length; i < len; i++) { results.push(arguments[i]); } |
5792 | 5807 |
|
5793 | 5808 | if (selector) { |
5794 | 5809 | try { |
5795 | 5810 | results = selector(results); |
5796 | 5811 | } catch (e) { |
5797 | | - observer.onError(e); |
5798 | | - return; |
| 5812 | + return observer.onError(e); |
5799 | 5813 | } |
5800 | 5814 | observer.onNext(results); |
5801 | 5815 | } else { |
|
7738 | 7752 | * @returns {Observable} An observable sequence with an array collecting the last elements of all the input sequences. |
7739 | 7753 | */ |
7740 | 7754 | Observable.forkJoin = function () { |
7741 | | - var allSources = argsOrArray(arguments, 0); |
| 7755 | + var allSources = []; |
| 7756 | + if (Array.isArray(arguments[0])) { |
| 7757 | + allSources = arguments[0]; |
| 7758 | + } else { |
| 7759 | + for(var i = 0, len = arguments.length; i < len; i++) { allSources.push(arguments[i]); } |
| 7760 | + } |
7742 | 7761 | return new AnonymousObservable(function (subscriber) { |
7743 | 7762 | var count = allSources.length; |
7744 | 7763 | if (count === 0) { |
|
7799 | 7818 | */ |
7800 | 7819 | observableProto.forkJoin = function (second, resultSelector) { |
7801 | 7820 | var first = this; |
7802 | | - |
7803 | 7821 | return new AnonymousObservable(function (observer) { |
7804 | 7822 | var leftStopped = false, rightStopped = false, |
7805 | 7823 | hasLeft = false, hasRight = false, |
|
8161 | 8179 | * @returns {Observable} Observable sequence with the results form matching several patterns. |
8162 | 8180 | */ |
8163 | 8181 | Observable.when = function () { |
8164 | | - var plans = argsOrArray(arguments, 0); |
| 8182 | + var plans = []; |
| 8183 | + if (Array.isArray(arguments[0])) { |
| 8184 | + plans = arguments[0]; |
| 8185 | + } else { |
| 8186 | + for(var i = 0, len = arguments.length; i < len; i++) { plans.push(arguments[i]); } |
| 8187 | + } |
8165 | 8188 | return new AnonymousObservable(function (observer) { |
8166 | 8189 | var activePlans = [], |
8167 | 8190 | externalSubscriptions = new Map(); |
|
0 commit comments