aboutsummaryrefslogtreecommitdiff
path: root/bqn.js
diff options
context:
space:
mode:
authorMarshall Lochbaum <mwlochbaum@gmail.com>2021-08-30 15:11:25 -0400
committerMarshall Lochbaum <mwlochbaum@gmail.com>2021-08-30 15:11:25 -0400
commit2187c15b54f8b2803586e0abdb7c7bc94daa83eb (patch)
tree4e7f691f6dd3762dd399ed729ba28efe86a56394 /bqn.js
parent3761d5a57ab3c9ee6db96a4e1381048f1060a71c (diff)
Add push_state so •state changes don't affect parent program
Diffstat (limited to 'bqn.js')
-rwxr-xr-xbqn.js12
1 files changed, 7 insertions, 5 deletions
diff --git a/bqn.js b/bqn.js
index a0d8be07..efef58b8 100755
--- a/bqn.js
+++ b/bqn.js
@@ -109,17 +109,18 @@ sysvals.file = dynsys(state => {
return makens(Object.keys(files), Object.values(files));
});
-sysargs.resolve=getres();
+sysargs.resolve = getres();
+let push_state = st => { st.parres = st.resolve; }
let update_state = (st,w) => {
w=w||[];
- st.path=w[0]&&str(st.resolve("Setting •path")(w[0]));
- st.resolve=getres(st.path);
+ st.path=w[0]&&str(st.parres("Setting •path")(w[0]));
+ st.resolve = getres(st.path);
st.state=list(w); st.name=w[1]; st.args=w[2];
}
sysvals.path=dynsys(s=>s.path);
sysvals.name=dynsys(s=>s.name);
sysvals.args=dynsys(s=>s.args);
-bqn.setexec(update_state);
+bqn.setexec(update_state, push_state);
let bqn_file = (st,f,t,w) => bqn_state(st)(
t, [ str(dir(path.dirname(f))), str(path.basename(f)), w ]
);
@@ -140,7 +141,8 @@ if (!module.parent) {
let arg0 = args[0];
let cl_state = () => {
let s = str("");
- update_state(sysargs, [str(dir(path.resolve('.'))), s, list([],s)]);
+ let w = [str(dir(path.resolve('.'))), s, list([],s)];
+ push_state(sysargs); update_state(sysargs, w);
return sysargs;
}
let exec = fn => src => {