diff options
| -rw-r--r-- | docs/bqn.js | 9 |
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) { |
