aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarshall Lochbaum <mwlochbaum@gmail.com>2021-08-15 18:54:25 -0400
committerMarshall Lochbaum <mwlochbaum@gmail.com>2021-08-15 18:54:25 -0400
commit92a675fe7d1761b6554a48cf2327b44cb863b977 (patch)
tree8b8756da4984e433d673f9e10c07440c51e20576
parent0763ae6c60ed4a88055db78e84dd28f6ebdd0707 (diff)
Add •state handling to exec-like functions in a uniform way
-rwxr-xr-xbqn.js4
-rw-r--r--docs/bqn.js8
2 files changed, 7 insertions, 5 deletions
diff --git a/bqn.js b/bqn.js
index 629a923c..9c2424a0 100755
--- a/bqn.js
+++ b/bqn.js
@@ -109,9 +109,9 @@ let set_state = w => {
w = w||[]; sysvals.state=list(w);
sysvals.path=w[0]; sysvals.name=w[1]; sysvals.args=w[2];
}
-let bqn_state = sysvals.bqn = (x,w) => { set_state(w); return bqn(x); }
+let bqn_state = (x,w) => { set_state(w); return bqn(x); }
+bqn.setreqexec((s,x,w) => { set_state(w); return req1str(s,x); });
sysvals.exit = (x,w) => process.exit(Number.isInteger(x)?x:0);
-sysvals.bqn = (x,w) => bqn_state(req1str("•BQN",x), w);
let bqn_file = (f,t,w) => bqn_state(
t, [ str(dir(path.dirname(f))), str(path.basename(f)), w ]
);
diff --git a/docs/bqn.js b/docs/bqn.js
index 161e9da2..efc1c936 100644
--- a/docs/bqn.js
+++ b/docs/bqn.js
@@ -476,6 +476,7 @@ let dojs = (x,w) => {
}
return toBQN(r);
}
+let reqexec = req1str; // Modified by Node version to handle •state
let extendedbqn = (x,w) => {
let req = (r,s) => { if (!r) throw Error("•ExtendedBQN: "+s) };
req(!has(w), "𝕨 not allowed");
@@ -492,7 +493,7 @@ let extendedbqn = (x,w) => {
pr.map(p=>p.sh=[p.length]);
rt = list([].concat.apply([],rt));
let bqn = bqngen(compgen(list(pr)),list([rt,system]));
- return (x,w)=>bqn(req1str("•BQN extension",x,w));
+ return (x,w)=>bqn(reqexec("•BQN extension",x,w));
}
let makerepl = (x,w) => {
let vars = [], names = [], redef = [];
@@ -500,7 +501,7 @@ let makerepl = (x,w) => {
let comp = wrapcomp(compile);
let repl = (x,w) => {
names.sh=redef.sh=[names.length];
- let c = comp(str(req1str("Repl",x,w)), rtn);
+ let c = comp(str(reqexec("Repl",x,w)), rtn);
let pnames = c[5][2][0];
let newv = c[3][0][2].slice(vars.length);
names.push(...newv.map(i=>pnames[i]));
@@ -513,7 +514,7 @@ let makerepl = (x,w) => {
}
let dynsys = f => { f.dynamic=1; return f; }
let sysvals = {
- bqn:(x,w)=> bqn(req1str("•BQN",x,w)), makerepl, js:dojs, extendedbqn,
+ bqn:(x,w)=> bqn(reqexec("•BQN",x,w)), makerepl, js:dojs, extendedbqn,
type, glyph, decompose, fmt:fmt1, repr, unixtime, listkeys,
listsys: dynsys(() => list(Object.keys(sysvals).sort().map(str))),
math: obj2ns(Math,("LN10 LN2 LOG10E LOG2E cbrt expm1 hypot log10 log1p log2 round trunc atan2 cos cosh sin sinh tan tanh").split(" "), f=>typeof f==="function"?runtime[60](f,0):f)
@@ -544,5 +545,6 @@ if (typeof process!=='undefined') {
if (typeof module!=='undefined') { // Node.js
bqn.fmt=fmt; bqn.fmtErr=fmtErr; bqn.compile=compile; bqn.run=run;
bqn.sysvals=sysvals; bqn.util={has,list,str,unstr,dynsys,req1str,makens};
+ bqn.setreqexec = re => { reqexec=re; }
module.exports=bqn;
}