diff options
| author | Andrey Popp <8mayday@gmail.com> | 2022-03-14 00:26:26 +0300 |
|---|---|---|
| committer | Andrey Popp <8mayday@gmail.com> | 2022-03-14 01:23:12 +0300 |
| commit | 1ad773f85232e7a1ff850004a6bf83fc936a5f83 (patch) | |
| tree | 227678ba322813e3890ecf8af62aa1c3a76a7841 /docs | |
| parent | f5b62c4f173dff7f1f316de7db8a98474370e45f (diff) | |
Make setc handle lists of vars
Diffstat (limited to 'docs')
| -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) { |
