Adjust projection to yield multiple values instead of a vector
This commit is contained in:
parent
420784bb11
commit
a7212a02af
14
route.js
14
route.js
|
@ -761,9 +761,11 @@ function Routing(exports) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function compileProjection(p) {
|
function compileProjection(/* projection, projection, ... */) {
|
||||||
var acc = [];
|
var acc = [];
|
||||||
walk(p);
|
for (var i = 0; i < arguments.length; i++) {
|
||||||
|
walk(arguments[i]);
|
||||||
|
}
|
||||||
acc.push(EOA);
|
acc.push(EOA);
|
||||||
return acc;
|
return acc;
|
||||||
|
|
||||||
|
@ -819,13 +821,13 @@ function Routing(exports) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function project(m, spec) {
|
function project(m, spec) {
|
||||||
return rseq(SOA, walk(false, m, 0));
|
return walk(false, m, 0);
|
||||||
|
|
||||||
function walk(isCapturing, m, specIndex) {
|
function walk(isCapturing, m, specIndex) {
|
||||||
if (specIndex >= spec.length) {
|
if (specIndex >= spec.length) {
|
||||||
if (isCapturing) die("Bad specification: unclosed capture");
|
if (isCapturing) die("Bad specification: unclosed capture");
|
||||||
if (m instanceof $Success) {
|
if (m instanceof $Success) {
|
||||||
return rseq(EOA, rseq(EOA, rsuccess(projectSuccess(m.value))));
|
return rseq(EOA, rsuccess(projectSuccess(m.value)));
|
||||||
} else {
|
} else {
|
||||||
return emptyMatcher;
|
return emptyMatcher;
|
||||||
}
|
}
|
||||||
|
@ -977,10 +979,10 @@ function Routing(exports) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function matcherKeys(m) {
|
function matcherKeys(m) {
|
||||||
return walk(m, function (v, k) { return [v]; });
|
if (is_emptyMatcher(m)) return [];
|
||||||
|
return walkSeq(m, function (vss, vsk) { return vss; });
|
||||||
|
|
||||||
function walk(m, k) {
|
function walk(m, k) {
|
||||||
if (m === null) return [];
|
|
||||||
if (m instanceof $WildcardSequence) return null;
|
if (m instanceof $WildcardSequence) return null;
|
||||||
if (m instanceof $Success) return [];
|
if (m instanceof $Success) return [];
|
||||||
if (m.has(__)) return null;
|
if (m.has(__)) return null;
|
||||||
|
|
39
tr.js
39
tr.js
|
@ -180,20 +180,31 @@ dumpM(r.union(r.compilePattern(r.arrayToSet('A'), [2]),
|
||||||
dumpM(r.union(r.compilePattern(r.arrayToSet('B'), [2]),
|
dumpM(r.union(r.compilePattern(r.arrayToSet('B'), [2]),
|
||||||
r.compilePattern(r.arrayToSet('C'), [3])))));
|
r.compilePattern(r.arrayToSet('C'), [3])))));
|
||||||
|
|
||||||
console.log("matcherKeys on wild matchers");
|
(function () {
|
||||||
dump(r.matcherKeys(r.project(r.union(r.compilePattern(r.arrayToSet(['A']), [r.__, 2]),
|
console.log("matcherKeys on wild matchers");
|
||||||
r.compilePattern(r.arrayToSet(['C']), [1, 3]),
|
var M = r.union(r.compilePattern(r.arrayToSet(['A']), [r.__, 2]),
|
||||||
r.compilePattern(r.arrayToSet(['B']), [3, 4])),
|
r.compilePattern(r.arrayToSet(['C']), [1, 3]),
|
||||||
r.compileProjection([r._$(), r._$()]))));
|
r.compilePattern(r.arrayToSet(['B']), [3, 4]));
|
||||||
dump(r.matcherKeys(r.project(r.union(r.compilePattern(r.arrayToSet(['A']), [r.__, 2]),
|
dump(r.matcherKeys(r.project(M, r.compileProjection([r._$(), r._$()]))));
|
||||||
r.compilePattern(r.arrayToSet(['C']), [1, 3]),
|
dump(r.matcherKeys(r.project(M, r.compileProjection([r.__, r._$]))));
|
||||||
r.compilePattern(r.arrayToSet(['B']), [3, 4])),
|
var M2 = r.project(M, r.compileProjection([r._$(), r._$()]));
|
||||||
r.compileProjection([r.__, r._$]))));
|
dump(r.matcherKeys(r.project(M2,
|
||||||
dump(r.matcherKeys(r.project(r.project(r.union(r.compilePattern(r.arrayToSet(['A']), [r.__, 2]),
|
r.compileProjection(r.__, r._$))));
|
||||||
r.compilePattern(r.arrayToSet(['C']), [1, 3]),
|
dump(r.matcherKeys(r.project(r.compilePattern(true, [r.embeddedMatcher(M2)]),
|
||||||
r.compilePattern(r.arrayToSet(['B']), [3, 4])),
|
r.compileProjection([r.__, r._$]))));
|
||||||
r.compileProjection([r._$(), r._$()])),
|
dump(r.matcherKeys(r.project(r.compilePattern(true, [[r.embeddedMatcher(M2)]]),
|
||||||
r.compileProjection([r.__, r._$]))));
|
r.compileProjection([[r.__, r._$]]))));
|
||||||
|
})();
|
||||||
|
|
||||||
|
(function () {
|
||||||
|
console.log("matcherKeys using multiple-values in projections");
|
||||||
|
var M = r.union(r.compilePattern(r.arrayToSet(['A']), [1, 2]),
|
||||||
|
r.compilePattern(r.arrayToSet(['C']), [1, 3]),
|
||||||
|
r.compilePattern(r.arrayToSet(['B']), [3, 4]));
|
||||||
|
var M2 = r.project(M, r.compileProjection([r._$(), r._$()]));
|
||||||
|
dump(r.matcherKeys(M2));
|
||||||
|
dump(r.matcherKeys(r.project(M2, r.compileProjection(r._$(), r._$()))));
|
||||||
|
})();
|
||||||
|
|
||||||
(function () {
|
(function () {
|
||||||
console.log("serializeMatcher");
|
console.log("serializeMatcher");
|
||||||
|
|
Loading…
Reference in New Issue