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 };