It turns out that order-of-definition is a thing for browser JS, even if not for node.js

This commit is contained in:
Tony Garnock-Jones 2014-05-23 14:37:48 -04:00
parent 87c5aac69f
commit 1e3a8f7db0
1 changed files with 50 additions and 49 deletions

View File

@ -323,10 +323,6 @@ function Routing(exports) {
}
return target.emptyGuard();
} else {
var target = rwild(w).copy();
for (var key in r1.entries) { examineKey(r1, key, r2); }
for (var key in r2.entries) { examineKey(r2, key, r1); }
return target;
function examineKey(rA, key, rB) {
if ((key !== __) && !target.has(key)) {
var k = merge(rA.get(key), rB.get(key));
@ -343,6 +339,10 @@ function Routing(exports) {
}
}
}
var target = rwild(w).copy();
for (var key in r1.entries) { examineKey(r1, key, r2); }
for (var key in r2.entries) { examineKey(r2, key, r1); }
return target;
}
}
}
@ -388,22 +388,6 @@ function Routing(exports) {
var w = walk(w1, w2);
var target = new $Dict();
if (is_emptyMatcher(w1)) {
if (is_emptyMatcher(w2)) {
for (var key in r1.smallerOf(r2).entries) examineKey(key);
} else {
for (var key in r1.entries) examineKey(key);
}
} else {
if (is_emptyMatcher(w2)) {
for (var key in r2.entries) examineKey(key);
} else {
rupdateInplace(target, __, w);
for (var key in r1.entries) examineKey(key);
for (var key in r2.entries) examineKey(key);
}
}
return target.emptyGuard();
function examineKey(key) {
if ((key !== __) && !target.has(key)) {
@ -424,6 +408,23 @@ function Routing(exports) {
}
}
}
if (is_emptyMatcher(w1)) {
if (is_emptyMatcher(w2)) {
for (var key in r1.smallerOf(r2).entries) examineKey(key);
} else {
for (var key in r1.entries) examineKey(key);
}
} else {
if (is_emptyMatcher(w2)) {
for (var key in r2.entries) examineKey(key);
} else {
rupdateInplace(target, __, w);
for (var key in r1.entries) examineKey(key);
for (var key in r2.entries) examineKey(key);
}
}
return target.emptyGuard();
}
function walkWild(walker, w, key, k) {
@ -478,17 +479,6 @@ function Routing(exports) {
var w = walk(w1, w2);
var target;
if (is_emptyMatcher(w2)) {
target = r1.copy();
for (var key in r2.entries) examineKey(key);
} else {
target = new $Dict();
rupdateInplace(target, __, w);
for (var key in r1.entries) examineKey(key);
for (var key in r2.entries) examineKey(key);
}
return target.emptyGuard();
function examineKey(key) {
if (key !== __) {
var k1 = r1.get(key);
@ -515,6 +505,17 @@ function Routing(exports) {
rupdateInplace(target, key, (requal(updatedK, w) ? emptyMatcher : updatedK));
}
}
if (is_emptyMatcher(w2)) {
target = r1.copy();
for (var key in r2.entries) examineKey(key);
} else {
target = new $Dict();
rupdateInplace(target, __, w);
for (var key in r1.entries) examineKey(key);
for (var key in r2.entries) examineKey(key);
}
return target.emptyGuard();
}
function walkWild(key, k, w) {
@ -613,22 +614,6 @@ function Routing(exports) {
var w2 = r2.get(__);
walk(w1, w2);
// Optimize similarly to intersect().
if (is_emptyMatcher(w1)) {
if (is_emptyMatcher(w2)) {
for (var key in r1.smallerOf(r2).entries) examineKey(key);
} else {
for (var key in r1.entries) examineKey(key);
}
} else {
if (is_emptyMatcher(w2)) {
for (var key in r2.entries) examineKey(key);
} else {
for (var key in r1.entries) examineKey(key);
for (var key in r2.entries) examineKey(key);
}
}
function examineKey(key) {
if (key !== __) {
var k1 = r1.get(key);
@ -648,6 +633,22 @@ function Routing(exports) {
}
}
}
// Optimize similarly to intersect().
if (is_emptyMatcher(w1)) {
if (is_emptyMatcher(w2)) {
for (var key in r1.smallerOf(r2).entries) examineKey(key);
} else {
for (var key in r1.entries) examineKey(key);
}
} else {
if (is_emptyMatcher(w2)) {
for (var key in r2.entries) examineKey(key);
} else {
for (var key in r1.entries) examineKey(key);
for (var key in r2.entries) examineKey(key);
}
}
}
function walkWild(walker, w, key, k) {
@ -899,7 +900,6 @@ function Routing(exports) {
var mk = m.get(key);
var piece;
if (is_keyOpen(key)) {
piece = walkSeq(mk, seqK);
function seqK(vss, vsk) {
var acc = [];
for (var i = 0; i < vss.length; i++) {
@ -908,6 +908,7 @@ function Routing(exports) {
}
return acc;
}
piece = walkSeq(mk, seqK);
} else if (is_keyClose(key)) {
die("matcherKeys: internal error: unexpected key-close");
} else {
@ -930,7 +931,6 @@ function Routing(exports) {
if (is_keyClose(key)) {
piece = k([[]], mk);
} else {
piece = walk(rseq(key, mk), outerK);
function outerK(v, vk) {
return walkSeq(vk, innerK);
function innerK(vss, vsk) {
@ -943,6 +943,7 @@ function Routing(exports) {
return k(acc, vsk);
}
}
piece = walk(rseq(key, mk), outerK);
}
if (piece == null) return null;
acc = acc.concat(piece);