From fcdf79538752cfb7210e8b9b466e885210567862 Mon Sep 17 00:00:00 2001 From: filifa Date: Thu, 11 Dec 2025 23:49:34 -0500 Subject: [PATCH] use worker to avoid freezing --- main.js | 15 +++++++-------- modules/compute.js | 16 ++++++++++++---- modules/math.js | 2 -- 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/main.js b/main.js index c286db6..45ee0c2 100644 --- a/main.js +++ b/main.js @@ -16,7 +16,11 @@ along with this program. If not, see . */ import { tokenize } from "./modules/lexer.js"; import { shunt } from "./modules/parser.js"; -import { compute } from "./modules/compute.js"; + +const worker = new Worker("./modules/compute.js"); +worker.addEventListener("message", (message) => { + document.querySelector("#result").value = message.data; +}); function evaluate() { const expr = document.querySelector("#expr"); @@ -44,13 +48,8 @@ function evaluate() { console.log(queue); - try { - result.value = compute(queue, m); - } catch(e) { - result.value = e; - console.log(e); - return; - } + worker.postMessage({command: "compute", queue, m}); + result.value = "calculating..."; } const expr = document.querySelector("#expr"); diff --git a/modules/compute.js b/modules/compute.js index cda89d8..29fb632 100644 --- a/modules/compute.js +++ b/modules/compute.js @@ -14,7 +14,17 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ -import { modinv, modpow, modsqrt, ord } from "./math.js"; +importScripts("./math.js") + +addEventListener("message", (message) => { + if (message.data.command === "compute") { + try { + compute(message.data.queue, message.data.m); + } catch(e) { + postMessage(e); + } + } +}); function binaryOpPop(stack) { const b = stack.pop(); @@ -88,7 +98,5 @@ function compute(queue, modulus) { result += modulus; } - return result; + postMessage(result); } - -export { compute }; diff --git a/modules/math.js b/modules/math.js index 8bb4ff2..f1cc164 100644 --- a/modules/math.js +++ b/modules/math.js @@ -220,5 +220,3 @@ function ord(n, modulus) { return k; } - -export { modsqrt, modinv, modpow, ord };