aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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) {