mirror of
https://github.com/curioustorvald/tsvm.git
synced 2026-03-15 23:46:06 +09:00
if statement parsing
This commit is contained in:
@@ -302,3 +302,98 @@ if (!Array.prototype.map) {
|
||||
return A;
|
||||
};
|
||||
}
|
||||
// Production steps of ECMA-262, Edition 5, 15.4.4.21
|
||||
// Reference: http://es5.github.io/#x15.4.4.21
|
||||
// https://tc39.github.io/ecma262/#sec-array.prototype.reduce
|
||||
if (!Array.prototype.reduce) {
|
||||
Object.defineProperty(Array.prototype, 'reduce', {
|
||||
value: function(callback /*, initialValue*/) {
|
||||
if (this === null) {
|
||||
throw new TypeError( 'Array.prototype.reduce ' +
|
||||
'called on null or undefined' );
|
||||
}
|
||||
if (typeof callback !== 'function') {
|
||||
throw new TypeError( callback +
|
||||
' is not a function');
|
||||
}
|
||||
|
||||
// 1. Let O be ? ToObject(this value).
|
||||
var o = Object(this);
|
||||
|
||||
// 2. Let len be ? ToLength(? Get(O, "length")).
|
||||
var len = o.length >>> 0;
|
||||
|
||||
// Steps 3, 4, 5, 6, 7
|
||||
var k = 0;
|
||||
var value;
|
||||
|
||||
if (arguments.length >= 2) {
|
||||
value = arguments[1];
|
||||
} else {
|
||||
while (k < len && !(k in o)) {
|
||||
k++;
|
||||
}
|
||||
|
||||
// 3. If len is 0 and initialValue is not present,
|
||||
// throw a TypeError exception.
|
||||
if (k >= len) {
|
||||
throw new TypeError( 'Reduce of empty array ' +
|
||||
'with no initial value' );
|
||||
}
|
||||
value = o[k++];
|
||||
}
|
||||
|
||||
// 8. Repeat, while k < len
|
||||
while (k < len) {
|
||||
// a. Let Pk be ! ToString(k).
|
||||
// b. Let kPresent be ? HasProperty(O, Pk).
|
||||
// c. If kPresent is true, then
|
||||
// i. Let kValue be ? Get(O, Pk).
|
||||
// ii. Let accumulator be ? Call(
|
||||
// callbackfn, undefined,
|
||||
// « accumulator, kValue, k, O »).
|
||||
if (k in o) {
|
||||
value = callback(value, o[k], k, o);
|
||||
}
|
||||
|
||||
// d. Increase k by 1.
|
||||
k++;
|
||||
}
|
||||
|
||||
// 9. Return accumulator.
|
||||
return value;
|
||||
}
|
||||
});
|
||||
}
|
||||
// Production steps of ECMA-262, Edition 5, 15.4.4.22
|
||||
// Reference: http://es5.github.io/#x15.4.4.22
|
||||
if ('function' !== typeof Array.prototype.reduceRight) {
|
||||
Array.prototype.reduceRight = function(callback /*, initialValue*/) {
|
||||
'use strict';
|
||||
if (null === this || 'undefined' === typeof this) {
|
||||
throw new TypeError('Array.prototype.reduce called on null or undefined');
|
||||
}
|
||||
if ('function' !== typeof callback) {
|
||||
throw new TypeError(callback + ' is not a function');
|
||||
}
|
||||
var t = Object(this), len = t.length >>> 0, k = len - 1, value;
|
||||
if (arguments.length >= 2) {
|
||||
value = arguments[1];
|
||||
} else {
|
||||
while (k >= 0 && !(k in t)) {
|
||||
k--;
|
||||
}
|
||||
if (k < 0) {
|
||||
throw new TypeError('Reduce of empty array with no initial value');
|
||||
}
|
||||
value = t[k--];
|
||||
}
|
||||
for (; k >= 0; k--) {
|
||||
if (k in t) {
|
||||
value = callback(value, t[k], k, t);
|
||||
}
|
||||
}
|
||||
return value;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user