aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarshall Lochbaum <mwlochbaum@gmail.com>2021-05-13 18:15:58 -0400
committerMarshall Lochbaum <mwlochbaum@gmail.com>2021-05-13 18:15:58 -0400
commit365e8de6287fce6af6b6e1975ebde25aac027f5a (patch)
tree377dcbd64f00c3babbe9474becb1c09d3973876b
parent22b852373a27cf3bbd11f2afd019fbce9edf59e3 (diff)
Better namespace lookup error messages
-rw-r--r--docs/bqn.js13
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");