Skip to content

Commit 70a7be6

Browse files
committed
ensure abs() sign() sqrt() get errbacks arg
1 parent 8606db2 commit 70a7be6

File tree

2 files changed

+18
-18
lines changed

2 files changed

+18
-18
lines changed

src/js/base/js-numbers.js

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1616,13 +1616,13 @@ define("pyret-base/js/js-numbers", function() {
16161616
};
16171617

16181618
Rational.prototype.integerSqrt = function(errbacks) {
1619-
var result = sqrt(this);
1619+
var result = sqrt(this, errbacks);
16201620
return toRational(floor(result, errbacks), errbacks);
16211621
};
16221622

16231623
Rational.prototype.sqrt = function(errbacks) {
1624-
var newN = sqrt(this.n);
1625-
var newD = sqrt(this.d);
1624+
var newN = sqrt(this.n, errbacks);
1625+
var newD = sqrt(this.d, errbacks);
16261626
if (isRational(newN) && isRational(newD) &&
16271627
equals(floor(newN, errbacks), newN, errbacks) &&
16281628
equals(floor(newD, errbacks), newD, errbacks)) {
@@ -1720,9 +1720,9 @@ define("pyret-base/js/js-numbers", function() {
17201720
};
17211721

17221722
var integerNthRoot = function(n, m, errbacks) {
1723-
if (sign(n) < 0)
1723+
if (sign(n, errbacks) < 0)
17241724
errbacks.throwDomainError('integerNthRoot: root ' + n + ' is negative.');
1725-
if (sign(m) < 0)
1725+
if (sign(m, errbacks) < 0)
17261726
errbacks.throwDomainError('integerNthRoot: radicand ' + m + ' is negative.');
17271727
var guessPrev, guessToTheN;
17281728
var guess = floor(m, errbacks);
@@ -1747,9 +1747,9 @@ define("pyret-base/js/js-numbers", function() {
17471747
};
17481748

17491749
var nthRoot = function(n, m, errbacks) {
1750-
if (sign(n) < 0)
1750+
if (sign(n, errbacks) < 0)
17511751
errbacks.throwDomainError('nthRoot: root ' + n + ' is negative.');
1752-
var mNeg = (sign(m) < 0);
1752+
var mNeg = (sign(m, errbacks) < 0);
17531753
var mAbs = (mNeg ? abs(m, errbacks) : m);
17541754
var approx;
17551755

@@ -2745,7 +2745,7 @@ define("pyret-base/js/js-numbers", function() {
27452745
// (protected) r = this * a, r != this,a (HAC 14.12)
27462746
// "this" should be the larger one if appropriate.
27472747
function bnpMultiplyTo(a,r) {
2748-
var x = this.abs(), y = a.abs();
2748+
var x = this.abs({}), y = a.abs({});
27492749
var i = x.t;
27502750
r.t = i+y.t;
27512751
while(--i >= 0) r[i] = 0;
@@ -2757,7 +2757,7 @@ define("pyret-base/js/js-numbers", function() {
27572757

27582758
// (protected) r = this^2, r != this (HAC 14.16)
27592759
function bnpSquareTo(r) {
2760-
var x = this.abs();
2760+
var x = this.abs({});
27612761
var i = r.t = 2*x.t;
27622762
while(--i >= 0) r[i] = 0;
27632763
for(i = 0; i < x.t-1; ++i) {
@@ -2775,9 +2775,9 @@ define("pyret-base/js/js-numbers", function() {
27752775
// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
27762776
// r != q, this != m. q or r may be null.
27772777
function bnpDivRemTo(m,q,r) {
2778-
var pm = m.abs();
2778+
var pm = m.abs({});
27792779
if(pm.t <= 0) return;
2780-
var pt = this.abs();
2780+
var pt = this.abs({});
27812781
if(pt.t < pm.t) {
27822782
if(q != null) q.fromInt(0);
27832783
if(r != null) this.copyTo(r);
@@ -2824,7 +2824,7 @@ define("pyret-base/js/js-numbers", function() {
28242824
// (public) this mod a
28252825
function bnMod(a) {
28262826
var r = nbi();
2827-
this.abs().divRemTo(a,null,r);
2827+
this.abs({}).divRemTo(a,null,r);
28282828
if(this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r,r);
28292829
return r;
28302830
}
@@ -2884,7 +2884,7 @@ define("pyret-base/js/js-numbers", function() {
28842884
// xR mod m
28852885
function montConvert(x) {
28862886
var r = nbi();
2887-
x.abs().dlShiftTo(this.m.t,r);
2887+
x.abs({}).dlShiftTo(this.m.t,r);
28882888
r.divRemTo(this.m,null,r);
28892889
if(x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r,r);
28902890
return r;
@@ -3541,7 +3541,7 @@ define("pyret-base/js/js-numbers", function() {
35413541

35423542
// (public) test primality with certainty >= 1-.5^t
35433543
function bnIsProbablePrime(t) {
3544-
var i, x = this.abs();
3544+
var i, x = this.abs({});
35453545
if(x.t == 1 && x[0] <= lowprimes[lowprimes.length-1]) {
35463546
for(i = 0; i < lowprimes.length; ++i)
35473547
if(x[0] == lowprimes[i]) return true;
@@ -3782,7 +3782,7 @@ define("pyret-base/js/js-numbers", function() {
37823782
// integerSqrt: -> pyretnum
37833783
BigInteger.prototype.integerSqrt = function(errbacks) {
37843784
var n;
3785-
if(sign(this) >= 0) {
3785+
if(sign(this, errbacks) >= 0) {
37863786
return searchIter(this, this, errbacks);
37873787
} else {
37883788
errbacks.throwDomainError('integerSqrt of negative bignum ' + this);

tests/jsnums-test/jsnums-test.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -413,9 +413,9 @@ R(["pyret-base/js/js-numbers"], function(JN) {
413413
expect(JN.fromFixnum(1e311, sampleErrbacks)).toBe(false);
414414

415415
// sign
416-
expect(JN._innards.sign(JN.fromString('-3.14', sampleErrbacks))).toBe(-1);
417-
expect(JN._innards.sign(JN.fromString('3.14', sampleErrbacks))).toBe(1);
418-
expect(JN._innards.sign(JN.fromString('0.0', sampleErrbacks))).toBe(0);
416+
expect(JN._innards.sign(JN.fromString('-3.14', sampleErrbacks), sampleErrbacks)).toBe(-1);
417+
expect(JN._innards.sign(JN.fromString('3.14', sampleErrbacks), sampleErrbacks)).toBe(1);
418+
expect(JN._innards.sign(JN.fromString('0.0', sampleErrbacks), sampleErrbacks)).toBe(0);
419419

420420
// zfill
421421
expect(JN._innards.zfill(5)).toBe('00000');

0 commit comments

Comments
 (0)