From 7952b5006e1b7e3382bf23ae77acac753249e1bb Mon Sep 17 00:00:00 2001 From: Ben Lerner Date: Wed, 15 Oct 2025 17:11:26 -0400 Subject: [PATCH] corresponding changes to https://github.com/brownplt/pyret-lang/pull/1839, to refactor how modules obtain the correct jsnums library that now closes over an appropriate errbacks parameter --- src/web/js/cpo-ide-hooks.js | 5 +- src/web/js/output-ui.js | 6 +-- src/web/js/trove/chart-lib.js | 17 +++---- src/web/js/trove/d3-lib-list.js | 24 ++++----- src/web/js/trove/d3-lib.js | 24 ++++----- src/web/js/trove/plot-lib-list.js | 82 +++++++++++++++---------------- src/web/js/trove/plot-lib.js | 82 +++++++++++++++---------------- src/web/js/trove/world.js | 5 +- 8 files changed, 121 insertions(+), 124 deletions(-) diff --git a/src/web/js/cpo-ide-hooks.js b/src/web/js/cpo-ide-hooks.js index c5406ee03..935cb6c91 100644 --- a/src/web/js/cpo-ide-hooks.js +++ b/src/web/js/cpo-ide-hooks.js @@ -32,13 +32,12 @@ ], nativeRequires: [ "cpo/cpo-builtin-modules", - "pyret-base/js/js-numbers", ], provides: {}, theModule: function(runtime, namespace, uri, compileLib, compileStructs, pyRepl, cpo, runtimeLib, loadLib, cpoBuiltins, parsePyret, - cpoModules, jsnums + cpoModules ) { window.CPOIDEHooks = { runtime: runtime, @@ -49,7 +48,7 @@ compileStructs: compileStructs, compileLib: compileLib, cpoModules: cpoModules, - jsnums: jsnums + jsnums: runtime.jsnums }; return runtime.makeModuleReturn({}, {}); } diff --git a/src/web/js/output-ui.js b/src/web/js/output-ui.js index acba54a8d..8dfbbe969 100644 --- a/src/web/js/output-ui.js +++ b/src/web/js/output-ui.js @@ -16,10 +16,10 @@ provides: {}, nativeRequires: [ "pyret-base/js/runtime-util", - "pyret-base/js/js-numbers" ], - theModule: function(runtime, _, uri, parsePyret, errordisplayLib, srclocLib, astLib, imageLib, loadLib, util, jsnums) { + theModule: function(runtime, _, uri, parsePyret, errordisplayLib, srclocLib, astLib, imageLib, loadLib, util) { + var jsnums = runtime.jsnums; var image = runtime.getField(imageLib, "internal"); var srcloc = runtime.getField(srclocLib, "values"); var isSrcloc = runtime.getField(srcloc, "is-Srcloc"); @@ -1399,7 +1399,7 @@ // after, and numerals to be repeated. var numr = num.numerator(); var denr = num.denominator(); - var decimal = jsnums.toRepeatingDecimal(numr, denr, runtime.NumberErrbacks); + var decimal = jsnums.toRepeatingDecimal(numr, denr); var prePointString = decimal[0]; var postPointString = decimal[1]; var decRpt = decimal[2]; diff --git a/src/web/js/trove/chart-lib.js b/src/web/js/trove/chart-lib.js index 95461502d..e18f32e71 100644 --- a/src/web/js/trove/chart-lib.js +++ b/src/web/js/trove/chart-lib.js @@ -4,7 +4,6 @@ { 'import-type': 'builtin', 'name': 'image-lib' }, ], nativeRequires: [ - 'pyret-base/js/js-numbers', 'google-charts', ], provides: { @@ -17,8 +16,9 @@ 'plot': "tany", } }, - theModule: function (RUNTIME, NAMESPACE, uri, IMAGELIB, jsnums , google) { - 'use strict'; + theModule: function (RUNTIME, NAMESPACE, uri, IMAGELIB, google) { + 'use strict'; + var jsnums = RUNTIME.jsnums; // Load google library via editor.html to avoid loading issues function notImp(name) { @@ -89,7 +89,7 @@ function getPrettyNumToStringDigits(d) { // this accepts Pyret num return n => - jsnums.toStringDigits(n, d, RUNTIME.NumberErrbacks).replace(/\.?0*$/, ''); + jsnums.toStringDigits(n, d).replace(/\.?0*$/, ''); } const prettyNumToStringDigits5 = getPrettyNumToStringDigits(5); @@ -180,8 +180,7 @@ xMaxC.removeClass('error-bg'); xMaxC.addClass('ok-bg'); - if (jsnums.greaterThanOrEqual(xMinVal, xMaxVal, - RUNTIME.NumberErrbacks)) { + if (jsnums.greaterThanOrEqual(xMinVal, xMaxVal)) { xMinC.addClass('error-bg'); xMaxC.addClass('error-bg'); xMinC.removeClass('ok-bg'); @@ -211,8 +210,7 @@ yMaxC.removeClass('error-bg'); yMaxC.addClass('ok-bg'); - if (jsnums.greaterThanOrEqual(xMinVal, xMaxVal, - RUNTIME.NumberErrbacks)) { + if (jsnums.greaterThanOrEqual(xMinVal, xMaxVal)) { yMinC.addClass('error-bg'); yMaxC.addClass('error-bg'); yMinC.removeClass('ok-bg'); @@ -232,8 +230,7 @@ numSamplesC.addClass('ok-bg'); if (!isTrue(RUNTIME.num_is_integer(numSamplesVal)) || - jsnums.lessThanOrEqual(numSamplesVal, 1, - RUNTIME.NumberErrbacks)) { + jsnums.lessThanOrEqual(numSamplesVal, 1)) { numSamplesC.addClass('error-bg'); numSamplesC.removeClass('ok-bg'); return null; diff --git a/src/web/js/trove/d3-lib-list.js b/src/web/js/trove/d3-lib-list.js index 46c880659..d74b1817a 100644 --- a/src/web/js/trove/d3-lib-list.js +++ b/src/web/js/trove/d3-lib-list.js @@ -3,13 +3,13 @@ { 'import-type': 'builtin', 'name': 'image-lib' }, ], nativeRequires: [ - 'pyret-base/js/js-numbers', 'd3' ], provides: {}, - theModule: function (RUNTIME, NAMESPACE, uri, IMAGELIB, jsnums, d3) { + theModule: function (RUNTIME, NAMESPACE, uri, IMAGELIB, d3) { 'use strict'; + var jsnums = RUNTIME.jsnums; var IMAGE = RUNTIME.getField(IMAGELIB, "internal"); @@ -34,13 +34,13 @@ * @return {jsnums -> jsnums} */ return function (k) { - var oldDiff = jsnums.subtract(k, oldX, RUNTIME.NumberErrbacks); - var oldRange = jsnums.subtract(oldY, oldX, RUNTIME.NumberErrbacks); - var portion = jsnums.divide(oldDiff, oldRange, RUNTIME.NumberErrbacks); - var newRange = jsnums.subtract(newY, newX, RUNTIME.NumberErrbacks); - var newPortion = jsnums.multiply(portion, newRange, RUNTIME.NumberErrbacks); - var result = jsnums.add(newPortion, newX, RUNTIME.NumberErrbacks); - return toFixnum ? jsnums.toFixnum(result, RUNTIME.NumberErrbacks) : result; + var oldDiff = jsnums.subtract(k, oldX); + var oldRange = jsnums.subtract(oldY, oldX); + var portion = jsnums.divide(oldDiff, oldRange); + var newRange = jsnums.subtract(newY, newX); + var newPortion = jsnums.multiply(portion, newRange); + var result = jsnums.add(newPortion, newX); + return toFixnum ? jsnums.toFixnum(result) : result; }; } @@ -50,13 +50,13 @@ function getPrettyNumToStringDigits(digits) { return function (num) { - return jsnums.toStringDigits(num, digits, RUNTIME.NumberErrbacks).replace(/\.?0*$/, ''); + return jsnums.toStringDigits(num, digits).replace(/\.?0*$/, ''); }; } function between(b, a, c) { - return (jsnums.lessThanOrEqual(a, b, RUNTIME.NumberErrbacks) && jsnums.lessThanOrEqual(b, c, RUNTIME.NumberErrbacks)) || - (jsnums.lessThanOrEqual(c, b, RUNTIME.NumberErrbacks) && jsnums.lessThanOrEqual(b, a, RUNTIME.NumberErrbacks)); + return (jsnums.lessThanOrEqual(a, b) && jsnums.lessThanOrEqual(b, c)) || + (jsnums.lessThanOrEqual(c, b) && jsnums.lessThanOrEqual(b, a)); } function numMin(a, b) { /* ignore the rest */ diff --git a/src/web/js/trove/d3-lib.js b/src/web/js/trove/d3-lib.js index 421bdd095..73b85596e 100644 --- a/src/web/js/trove/d3-lib.js +++ b/src/web/js/trove/d3-lib.js @@ -3,13 +3,13 @@ { 'import-type': 'builtin', 'name': 'image-lib' }, ], nativeRequires: [ - 'pyret-base/js/js-numbers', 'd3' ], provides: {}, - theModule: function (RUNTIME, NAMESPACE, uri, IMAGELIB, jsnums, d3) { + theModule: function (RUNTIME, NAMESPACE, uri, IMAGELIB, d3) { 'use strict'; + var jsnums = RUNTIME.jsnums; var IMAGE = RUNTIME.getField(IMAGELIB, "internal"); function assert(val, msg) { @@ -33,13 +33,13 @@ * @return {jsnums -> jsnums} */ return function (k) { - var oldDiff = jsnums.subtract(k, oldX, RUNTIME.NumberErrbacks); - var oldRange = jsnums.subtract(oldY, oldX, RUNTIME.NumberErrbacks); - var portion = jsnums.divide(oldDiff, oldRange, RUNTIME.NumberErrbacks); - var newRange = jsnums.subtract(newY, newX, RUNTIME.NumberErrbacks); - var newPortion = jsnums.multiply(portion, newRange, RUNTIME.NumberErrbacks); - var result = jsnums.add(newPortion, newX, RUNTIME.NumberErrbacks); - return toFixnum ? jsnums.toFixnum(result, RUNTIME.NumberErrbacks) : result; + var oldDiff = jsnums.subtract(k, oldX); + var oldRange = jsnums.subtract(oldY, oldX); + var portion = jsnums.divide(oldDiff, oldRange); + var newRange = jsnums.subtract(newY, newX); + var newPortion = jsnums.multiply(portion, newRange); + var result = jsnums.add(newPortion, newX); + return toFixnum ? jsnums.toFixnum(result) : result; }; } @@ -49,13 +49,13 @@ function getPrettyNumToStringDigits(digits) { return function (num) { - return jsnums.toStringDigits(num, digits, RUNTIME.NumberErrbacks).replace(/\.?0*$/, ''); + return jsnums.toStringDigits(num, digits).replace(/\.?0*$/, ''); }; } function between(b, a, c) { - return (jsnums.lessThanOrEqual(a, b, RUNTIME.NumberErrbacks) && jsnums.lessThanOrEqual(b, c, RUNTIME.NumberErrbacks)) || - (jsnums.lessThanOrEqual(c, b, RUNTIME.NumberErrbacks) && jsnums.lessThanOrEqual(b, a, RUNTIME.NumberErrbacks)); + return (jsnums.lessThanOrEqual(a, b) && jsnums.lessThanOrEqual(b, c)) || + (jsnums.lessThanOrEqual(c, b) && jsnums.lessThanOrEqual(b, a)); } function numMin(a, b) { /* ignore the rest */ diff --git a/src/web/js/trove/plot-lib-list.js b/src/web/js/trove/plot-lib-list.js index c285c11a1..05672e0f9 100644 --- a/src/web/js/trove/plot-lib-list.js +++ b/src/web/js/trove/plot-lib-list.js @@ -3,7 +3,6 @@ { 'import-type': 'builtin', 'name': 'd3-lib-list' }, ], nativeRequires: [ - 'pyret-base/js/js-numbers', 'd3', 'd3-tip' ], @@ -17,8 +16,9 @@ 'box-chart': "tany" } }, - theModule: function (RUNTIME, NAMESPACE, uri, CLIB, jsnums, d3, D3TIP) { - 'use strict'; + theModule: function (RUNTIME, NAMESPACE, uri, CLIB, d3, D3TIP) { + 'use strict'; + var jsnums = RUNTIME.jsnums; var gf = RUNTIME.getField, cases = RUNTIME.ffi.cases; var libNum = CLIB.libNum, @@ -69,7 +69,7 @@ function getAxisConf(aMin, aMax) { const conf = {}, scaler = libNum.scaler(aMin, aMax, 0, 1, false), - pos = jsnums.toFixnum(scaler(0), RUNTIME.NumberErrbacks); + pos = jsnums.toFixnum(scaler(0)); if (0 <= pos && pos <= 1) { conf.bold = true; @@ -285,7 +285,7 @@ xMaxC.removeClass('error-bg'); xMaxC.addClass('ok-bg'); - if (jsnums.greaterThanOrEqual(xMin_val, xMax_val, RUNTIME.NumberErrbacks)) { + if (jsnums.greaterThanOrEqual(xMin_val, xMax_val)) { xMinC.addClass('error-bg'); xMaxC.addClass('error-bg'); xMinC.removeClass('ok-bg'); @@ -313,7 +313,7 @@ yMaxC.removeClass('error-bg'); yMaxC.addClass('ok-bg'); - if (jsnums.greaterThanOrEqual(xMin_val, xMax_val, RUNTIME.NumberErrbacks)) { + if (jsnums.greaterThanOrEqual(xMin_val, xMax_val)) { yMinC.addClass('error-bg'); yMaxC.addClass('error-bg'); yMinC.removeClass('ok-bg'); @@ -332,7 +332,7 @@ numSamplesC.addClass('ok-bg'); if (RUNTIME.isPyretFalse(RUNTIME.num_is_integer(numSamples_val)) || - jsnums.lessThanOrEqual(numSamples_val, 1, RUNTIME.NumberErrbacks)) { + jsnums.lessThanOrEqual(numSamples_val, 1)) { numSamplesC.addClass('error-bg'); numSamplesC.removeClass('ok-bg'); return null; @@ -372,9 +372,9 @@ if (newWindow === null) { return; } var xMin_val = newWindow['_x-min']; var xMax_val = newWindow['_x-max']; - var move = jsnums.divide(jsnums.subtract(xMax_val, xMin_val, RUNTIME.NumberErrbacks), 10, RUNTIME.NumberErrbacks); - xMinC.val(prettyNumToStringDigits20(jsnums.subtract(xMin_val, move, RUNTIME.NumberErrbacks))); - xMaxC.val(prettyNumToStringDigits20(jsnums.subtract(xMax_val, move, RUNTIME.NumberErrbacks))); + var move = jsnums.divide(jsnums.subtract(xMax_val, xMin_val), 10); + xMinC.val(prettyNumToStringDigits20(jsnums.subtract(xMin_val, move))); + xMaxC.val(prettyNumToStringDigits20(jsnums.subtract(xMax_val, move))); })); controller.append($('