aboutsummaryrefslogtreecommitdiff
path: root/docs/bqn.js
diff options
context:
space:
mode:
authorMarshall Lochbaum <mwlochbaum@gmail.com>2021-04-10 18:23:07 -0400
committerMarshall Lochbaum <mwlochbaum@gmail.com>2021-04-10 18:23:07 -0400
commita014f3dc02c041b5c5a7c418f2cbc748b0a6bcc2 (patch)
tree6b58d08d83632c723b094919ca10941d4b87852b /docs/bqn.js
parent7988a14d4af00f50ea99660131c9b07661082f8c (diff)
•JS for Javascript evaluation
Diffstat (limited to 'docs/bqn.js')
-rwxr-xr-xdocs/bqn.js16
1 files changed, 15 insertions, 1 deletions
diff --git a/docs/bqn.js b/docs/bqn.js
index e104f4f8..d7e117ea 100755
--- a/docs/bqn.js
+++ b/docs/bqn.js
@@ -311,8 +311,22 @@ let fmtErr = (s,e) => {
}
let unixtime = (x,w) => Date.now()/1000;
+let dojs = (x,w) => {
+ if (!(x.sh && x.sh.length==1 && x.every(c=>typeof c==="string")))
+ throw Error("•JS 𝕩: 𝕩 must be a string");
+ if (has(w)) throw Error("•JS: 𝕨 not allowed");
+ let r = Function("'use strict'; return ("+x.join("")+")")();
+ let toBQN = x => {
+ if (isnum(x)) return x;
+ if (typeof x==='string') { if (Array.from(x).length!==1) throw Error("•JS: JS strings are one character; use Array.from for BQN strings"); return x; }
+ if (x instanceof Array) return arr(x.map(toBQN),x.sh||[x.length],toBQN(x.fill));
+ if (isfunc(x)) { let f=(a,b)=>toBQN(x(a,b)); f.m=x.m; return f; }
+ throw Error("•JS: Unrecognized JS result");
+ }
+ return toBQN(r);
+}
let sysvals = {
- bqn, type, glyph, decompose, fmt:fmt1, listsys:0,
+ bqn, js:dojs, type, glyph, decompose, fmt:fmt1, listsys:0,
unixtime
};