Skip to content

Commit 551610f

Browse files
committed
- isInteger() - don't take errbacks as it's standard JS!
- runtime.js charts-lib.js image-lib.js internal-image-types.js internal-image-untyped.js make-image.js: ensure jsnums.{toFixnum,greaterThan,lessThan,roughlyEquals} calls take NumberErrbacks
1 parent 2b840c3 commit 551610f

File tree

8 files changed

+203
-204
lines changed

8 files changed

+203
-204
lines changed

src/js/base/js-numbers.js

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -234,9 +234,9 @@ define("pyret-base/js/js-numbers", function() {
234234
};
235235

236236
// isInteger: pyretnum -> boolean
237-
var isInteger = function(n, errbacks) {
238-
if (typeof(n) === 'number') return Number.isInteger(n, errbacks);
239-
if (isPyretNumber(n)) return n.isInteger(errbacks);
237+
var isInteger = function(n) {
238+
if (typeof(n) === 'number') return Number.isInteger(n);
239+
if (isPyretNumber(n)) return n.isInteger();
240240
return false;
241241
};
242242

@@ -336,10 +336,10 @@ define("pyret-base/js/js-numbers", function() {
336336
return x.add(y, errbacks);
337337
},
338338
{isXSpecialCase: function(x, errbacks) {
339-
return isInteger(x, errbacks) && _integerIsZero(x, errbacks) },
339+
return isInteger(x) && _integerIsZero(x, errbacks) },
340340
onXSpecialCase: function(x, y, errbacks) { return y; },
341341
isYSpecialCase: function(y, errbacks) {
342-
return isInteger(y, errbacks) && _integerIsZero(y, errbacks) },
342+
return isInteger(y) && _integerIsZero(y, errbacks) },
343343
onYSpecialCase: function(x, y, errbacks) { return x; }
344344
});
345345

@@ -369,10 +369,10 @@ define("pyret-base/js/js-numbers", function() {
369369
return x.subtract(y, errbacks);
370370
},
371371
{isXSpecialCase: function(x, errbacks) {
372-
return isInteger(x, errbacks) && _integerIsZero(x, errbacks) },
372+
return isInteger(x) && _integerIsZero(x, errbacks) },
373373
onXSpecialCase: function(x, y, errbacks) { return negate(y, errbacks); },
374374
isYSpecialCase: function(y, errbacks) {
375-
return isInteger(y, errbacks) && _integerIsZero(y, errbacks) },
375+
return isInteger(y) && _integerIsZero(y, errbacks) },
376376
onYSpecialCase: function(x, y, errbacks) { return x; }
377377
});
378378

@@ -402,7 +402,7 @@ define("pyret-base/js/js-numbers", function() {
402402
return x.multiply(y, errbacks);
403403
},
404404
{isXSpecialCase: function(x, errbacks) {
405-
return (isInteger(x, errbacks) &&
405+
return (isInteger(x) &&
406406
(_integerIsZero(x, errbacks) || _integerIsOne(x, errbacks) || _integerIsNegativeOne(x, errbacks))) },
407407
onXSpecialCase: function(x, y, errbacks) {
408408
if (_integerIsZero(x, errbacks))
@@ -413,7 +413,7 @@ define("pyret-base/js/js-numbers", function() {
413413
return negate(y, errbacks);
414414
},
415415
isYSpecialCase: function(y, errbacks) {
416-
return (isInteger(y, errbacks) &&
416+
return (isInteger(y) &&
417417
(_integerIsZero(y, errbacks) || _integerIsOne(y, errbacks) || _integerIsNegativeOne(y, errbacks)))},
418418
onYSpecialCase: function(x, y, errbacks) {
419419
if (_integerIsZero(y, errbacks))
@@ -671,11 +671,11 @@ define("pyret-base/js/js-numbers", function() {
671671

672672
// modulo: pyretnum pyretnum -> pyretnum
673673
var modulo = function(m, n, errbacks) {
674-
if (! isInteger(m, errbacks)) {
674+
if (! isInteger(m)) {
675675
errbacks.throwDomainError('modulo: the first argument '
676676
+ m + " is not an integer.", m, n);
677677
}
678-
if (! isInteger(n, errbacks)) {
678+
if (! isInteger(n)) {
679679
errbacks.throwDomainError('modulo: the second argument '
680680
+ n + " is not an integer.", m, n);
681681
}
@@ -803,7 +803,7 @@ define("pyret-base/js/js-numbers", function() {
803803
if (typeof(n) === 'number') {
804804
return Roughnum.makeInstance(Math.log(n), errbacks);
805805
}
806-
if (isRational(n) && !isInteger(n, errbacks)) {
806+
if (isRational(n) && !isInteger(n)) {
807807
return subtract(log(numerator(n, errbacks), errbacks),
808808
log(denominator(n, errbacks), errbacks),
809809
errbacks);
@@ -933,7 +933,7 @@ define("pyret-base/js/js-numbers", function() {
933933

934934
// integerSqrt: pyretnum -> pyretnum
935935
var integerSqrt = function(x, errbacks) {
936-
if (! isInteger(x, errbacks)) {
936+
if (! isInteger(x)) {
937937
errbacks.throwDomainError('integer-sqrt: the argument ' + x.toString() +
938938
" is not an integer.", x);
939939
}
@@ -949,11 +949,11 @@ define("pyret-base/js/js-numbers", function() {
949949

950950
// gcd: pyretnum pyretnum -> pyretnum
951951
var gcd = function(first, second, errbacks) {
952-
if (! isInteger(first, errbacks)) {
952+
if (! isInteger(first)) {
953953
errbacks.throwDomainError('gcd: the argument ' + first.toString() +
954954
" is not an integer.", first);
955955
}
956-
if (! isInteger(second, errbacks)) {
956+
if (! isInteger(second)) {
957957
errbacks.throwDomainError('gcd: the argument ' + second.toString() +
958958
" is not an integer.", second);
959959
}
@@ -969,11 +969,11 @@ define("pyret-base/js/js-numbers", function() {
969969

970970
// lcm: pyretnum pyretnum -> pyretnum
971971
var lcm = function(first, second, errbacks) {
972-
if (! isInteger(first, errbacks)) {
972+
if (! isInteger(first)) {
973973
errbacks.throwDomainError('lcm: the argument ' + first.toString() +
974974
" is not an integer.", first);
975975
}
976-
if (! isInteger(second, errbacks)) {
976+
if (! isInteger(second)) {
977977
errbacks.throwDomainError('lcm: the argument ' + second.toString() +
978978
" is not an integer.", second);
979979
}
@@ -988,19 +988,19 @@ define("pyret-base/js/js-numbers", function() {
988988
};
989989

990990
var quotient = function(x, y, errbacks) {
991-
if (! isInteger(x, errbacks)) {
991+
if (! isInteger(x)) {
992992
errbacks.throwDomainError('quotient: the first argument ' + x.toString() +
993993
" is not an integer.", x);
994994
}
995-
if (! isInteger(y, errbacks)) {
995+
if (! isInteger(y)) {
996996
errbacks.throwDomainError('quotient: the second argument ' + y.toString() +
997997
" is not an integer.", y);
998998
}
999999
return _integerQuotient(x, y, errbacks);
10001000
};
10011001

10021002
var remainder = function(x, y, errbacks) {
1003-
if (isInteger(x, errbacks) && isInteger(y, errbacks)) {
1003+
if (isInteger(x) && isInteger(y)) {
10041004
return _integerRemainder(x, y, errbacks);
10051005
} else if (isRational(x) && isRational(y)) {
10061006
var xn = numerator(x, errbacks); var xd = denominator(x, errbacks);
@@ -1498,8 +1498,8 @@ define("pyret-base/js/js-numbers", function() {
14981498
_integerEquals(this.d, other.d, errbacks));
14991499
};
15001500

1501-
Rational.prototype.isInteger = function(errbacks) {
1502-
return _integerIsOne(this.d, errbacks);
1501+
Rational.prototype.isInteger = function() {
1502+
return _integerIsOne(this.d, {});
15031503
};
15041504

15051505
Rational.prototype.isRational = function() {
@@ -1767,7 +1767,7 @@ define("pyret-base/js/js-numbers", function() {
17671767
};
17681768

17691769
Rational.prototype.expt = function(a, errbacks) {
1770-
if (isInteger(a, errbacks) && greaterThanOrEqual(a, 0, errbacks)) {
1770+
if (isInteger(a) && greaterThanOrEqual(a, 0, errbacks)) {
17711771
return fastExpt(this, a, errbacks);
17721772
} else if (_integerLessThanOrEqual(a.d, 8, errbacks)) {
17731773
var nRaisedToAn = expt(this.n, a.n, errbacks);
@@ -1782,7 +1782,7 @@ define("pyret-base/js/js-numbers", function() {
17821782
return divide(newN, newD, errbacks);
17831783
}
17841784
} else {
1785-
if (this.isNegative() && !a.isInteger(errbacks))
1785+
if (this.isNegative() && !a.isInteger())
17861786
errbacks.throwDomainError('expt: raising negative number ' + this + ' to nonintegral power ' + a);
17871787
return Roughnum.makeInstance(Math.pow(this.toFixnum(errbacks), a.toFixnum(errbacks)),
17881788
errbacks);
@@ -1860,7 +1860,7 @@ define("pyret-base/js/js-numbers", function() {
18601860

18611861
Roughnum.prototype.isExact = Roughnum.prototype.isRational;
18621862

1863-
Roughnum.prototype.isInteger = function(errbacks) {
1863+
Roughnum.prototype.isInteger = function() {
18641864
return false;
18651865
};
18661866

@@ -1987,7 +1987,7 @@ define("pyret-base/js/js-numbers", function() {
19871987
};
19881988

19891989
Roughnum.prototype.integerSqrt = function(errbacks) {
1990-
if (isInteger(this, errbacks)) {
1990+
if (isInteger(this)) {
19911991
if(this.n >= 0) {
19921992
return Roughnum.makeInstance(Math.floor(Math.sqrt(this.n)), errbacks);
19931993
} else {
@@ -3678,7 +3678,7 @@ define("pyret-base/js/js-numbers", function() {
36783678
return true;
36793679
};
36803680

3681-
BigInteger.prototype.isInteger = function(errbacks) {
3681+
BigInteger.prototype.isInteger = function() {
36823682
return true;
36833683
};
36843684

@@ -3974,11 +3974,11 @@ define("pyret-base/js/js-numbers", function() {
39743974
if (options && typeof(options.limit) !== 'undefined') {
39753975
limit = options.limit;
39763976
}
3977-
if (! isInteger(n, errbacks)) {
3977+
if (! isInteger(n)) {
39783978
errbacks.throwDomainError('toRepeatingDecimal: n ' + n.toString() +
39793979
" is not an integer.");
39803980
}
3981-
if (! isInteger(d, errbacks)) {
3981+
if (! isInteger(d)) {
39823982
errbacks.throwDomainError('toRepeatingDecimal: d ' + d.toString() +
39833983
" is not an integer.");
39843984
}
@@ -4007,13 +4007,13 @@ define("pyret-base/js/js-numbers", function() {
40074007
// input number, which may have been an approximation, or unrepresentable in
40084008
// decimal.
40094009
function toStringDigits(n, digits, errbacks) {
4010-
if (!isInteger(digits, errbacks)) {
4010+
if (!isInteger(digits)) {
40114011
errbacks.throwDomainError('num-to-string-digits: digits should be an integer');
40124012
}
40134013
var tenDigits = expt(10, digits, errbacks);
40144014
var d = toFixnum(digits, errbacks);
40154015
n = divide(round(multiply(n, tenDigits, errbacks), errbacks), tenDigits, errbacks);
4016-
if (isInteger(n, errbacks)) {
4016+
if (isInteger(n)) {
40174017
var ans = n.toString();
40184018
if (d >= 1) {
40194019
ans += '.';

src/js/base/runtime.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4170,7 +4170,7 @@ function (Namespace, jsnums, codePoint, util, exnStackParser, loader, seedrandom
41704170
// Per https://www.ecma-international.org/ecma-262/5.1/#sec-9.6, we
41714171
// couldn't create anything larger anyway atop JS, and 4 billion elements
41724172
// ought to be enough for anyone (cue laughter from 2050)
4173-
if(jsnums.greaterThan(size, MAX_ARRAY_SIZE)) {
4173+
if(jsnums.greaterThan(size, MAX_ARRAY_SIZE, NumberErrbacks)) {
41744174
thisRuntime.throwMessageException(name + ": cannot create array larger than " + MAX_ARRAY_SIZE);
41754175
}
41764176
}
@@ -4326,8 +4326,8 @@ function (Namespace, jsnums, codePoint, util, exnStackParser, loader, seedrandom
43264326
var raw_array_sort_nums = function(arr, asc) {
43274327
if (arguments.length !== 2) { var $a=new Array(arguments.length); for (var $i=0;$i<arguments.length;$i++) { $a[$i]=arguments[$i]; } throw thisRuntime.ffi.throwArityErrorC(["raw-array-from-list"], 2, $a, false); }
43284328
thisRuntime.checkArgsInternal2("RawArrays", "raw-array-sort-nums", arr, thisRuntime.RawArray, asc, thisRuntime.Boolean);
4329-
const wrappedLT = (x, y) => jsnums.lessThan(x,y)? -1 : jsnums.roughlyEquals(x, y, 0)? 0 : 1;
4330-
const wrappedGT = (x, y) => jsnums.greaterThan(x,y)? -1 : jsnums.roughlyEquals(x, y, 0)? 0 : 1;
4329+
const wrappedLT = (x, y) => jsnums.lessThan(x,y, NumberErrbacks)? -1 : jsnums.roughlyEquals(x, y, 0, NumberErrbacks)? 0 : 1;
4330+
const wrappedGT = (x, y) => jsnums.greaterThan(x,y, NumberErrbacks)? -1 : jsnums.roughlyEquals(x, y, 0, NumberErrbacks)? 0 : 1;
43314331
arr.sort(asc? wrappedLT : wrappedGT);
43324332
return arr;
43334333
};
@@ -4341,8 +4341,8 @@ function (Namespace, jsnums, codePoint, util, exnStackParser, loader, seedrandom
43414341
}, function (arrKeys) {
43424342
debugger
43434343
const zipped = arr.map((v, i) => [v, arrKeys[i]]);
4344-
const compLT = (x, y) => jsnums.lessThan(x[1], y[1])? -1 : jsnums.roughlyEquals(x[1], y[1], 0) ? 0 : 1;
4345-
const compGT = (x, y) => jsnums.greaterThan(x[1], y[1])? -1 : jsnums.roughlyEquals(x[1], y[1], 0) ? 0 : 1;
4344+
const compLT = (x, y) => jsnums.lessThan(x[1], y[1], NumberErrbacks)? -1 : jsnums.roughlyEquals(x[1], y[1], 0, NumberErrbacks) ? 0 : 1;
4345+
const compGT = (x, y) => jsnums.greaterThan(x[1], y[1], NumberErrbacks)? -1 : jsnums.roughlyEquals(x[1], y[1], 0, NumberErrbacks) ? 0 : 1;
43464346
zipped.sort(asc ? compLT : compGT);
43474347
return zipped.map((v) => v[0]);
43484348
}, "raw_array_sort_by");
@@ -5005,15 +5005,15 @@ function (Namespace, jsnums, codePoint, util, exnStackParser, loader, seedrandom
50055005
thisRuntime.checkArgsInternal2("Strings", "string-find-opt",
50065006
s, thisRuntime.String, find, thisRuntime.String);
50075007
var idx = s.indexOf(find);
5008-
if (jsnums.lessThan(idx, 0)) return thisRuntime.ffi.makeNone();
5008+
if (jsnums.lessThan(idx, 0, NumberErrbacks)) return thisRuntime.ffi.makeNone();
50095009
return thisRuntime.ffi.makeSome(thisRuntime.makeNumberBig(idx));
50105010
}
50115011
var string_getIndex = function(s, find) {
50125012
if (arguments.length !== 2) { var $a=new Array(arguments.length); for (var $i=0;$i<arguments.length;$i++) { $a[$i]=arguments[$i]; } throw thisRuntime.ffi.throwArityErrorC(["string-get-index"], 2, $a, false); }
50135013
thisRuntime.checkArgsInternal2("Strings", "string-find",
50145014
s, thisRuntime.String, find, thisRuntime.String);
50155015
var idx = s.indexOf(find);
5016-
if (jsnums.lessThan(idx, 0))
5016+
if (jsnums.lessThan(idx, 0, NumberErrbacks))
50175017
thisRuntime.ffi.throwMessageException(`string-find: Target string \"${find}\" was not found inside source string \"${s}\"`);
50185018
return thisRuntime.makeNumberBig(idx);
50195019
}

0 commit comments

Comments
 (0)