diff options
| author | Marshall Lochbaum <mwlochbaum@gmail.com> | 2021-05-13 18:15:58 -0400 |
|---|---|---|
| committer | Marshall Lochbaum <mwlochbaum@gmail.com> | 2021-05-13 18:15:58 -0400 |
| commit | 365e8de6287fce6af6b6e1975ebde25aac027f5a (patch) | |
| tree | 377dcbd64f00c3babbe9474becb1c09d3973876b | |
| parent | 22b852373a27cf3bbd11f2afd019fbce9edf59e3 (diff) | |
Better namespace lookup error messages
| -rw-r--r-- | docs/bqn.js | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/docs/bqn.js b/docs/bqn.js index 178f77f2..adaede2c 100644 --- a/docs/bqn.js +++ b/docs/bqn.js @@ -19,11 +19,16 @@ let findkey = (ns, names, i) => { return ns[nn.rev[names[i]]]; } } -let readns = (v, vid, i) => { - let ni = findkey(v.ns, vid.names, i) - if (!has(ni)) throw Error("← or ↩: Unknown namespace key"); +let readns_sub = (v, names, i) => { + let ni = findkey(v.ns, names, i); + if (!has(ni)) throw Error("Unknown namespace key: "+names[i]); return v[ni]; } +let readns_assign = (v, vid, i) => readns_sub(v, vid.names, vid[i]); +let readns = (v, vid, i) => { + if (!v.ns) throw Error("Key lookup in non-namespace"); + return readns_sub(v, vid.names, i); +} let makens = (keys, vals) => { let n = Array(keys.length).fill().map((_,i)=>i); n.names=keys.map(k=>k.toLowerCase()); vals.ns=n; return vals; @@ -48,7 +53,7 @@ let set = (d, id, v) => { } else if (v.ns) { id.map(n=>{ if (!n.e) throw Error("← or ↩: Cannot extract non-name from namespace"); - let vid=n.e.vid; set(d,n,readns(v, vid, vid[n.p])); + let vid=n.e.vid; set(d,n,readns_assign(v, vid, n.p)); }); } else { throw Error("← or ↩: Multiple targets but atomic value"); |
