aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrey Popp <8mayday@gmail.com>2022-03-14 00:26:26 +0300
committerAndrey Popp <8mayday@gmail.com>2022-03-14 01:23:12 +0300
commit1ad773f85232e7a1ff850004a6bf83fc936a5f83 (patch)
tree227678ba322813e3890ecf8af62aa1c3a76a7841
parentf5b62c4f173dff7f1f316de7db8a98474370e45f (diff)
Make setc handle lists of vars
-rw-r--r--docs/bqn.js9
1 files changed, 8 insertions, 1 deletions
diff --git a/docs/bqn.js b/docs/bqn.js
index f0b62638..695f6800 100644
--- a/docs/bqn.js
+++ b/docs/bqn.js
@@ -50,11 +50,18 @@ let preview = false;
let inpreview = () => preview;
let setc = (d, id, v) => {
- if (preview && id.e != null && !id.e.inpreview)
+ if (preview && seteff(id))
throw {kind: 'previewError', message: 'side effects are not allowed'};
return set(d, id, v);
}
+let seteff = (id) => {
+ if (id.e) return !id.e.inpreview;
+ else if (id.match) return false;
+ else if (Array.isArray(id)) return id.some(id => id.m ? seteff(id.m) : seteff(id));
+ else return false;
+}
+
let set = (d, id, v) => {
let eq = (a,b) => a.length===b.length && a.every((e,i)=>e===b[i]);
if (id.e) {