mirror of
https://github.com/systemjs/systemjs.git
synced 2026-01-25 14:57:38 +00:00
cycle algorithm final adjustments and tests
This commit is contained in:
parent
1699351fc1
commit
656bcffbfd
26
dist/system-production-amd.js
vendored
26
dist/system-production-amd.js
vendored
@ -316,12 +316,20 @@ function register(loader) {
|
||||
// now we know the entry is in our unlinked linkage group
|
||||
var depGroupIndex = entry.groupIndex + (depEntry.declarative != entry.declarative);
|
||||
|
||||
if (depEntry.groupIndex === undefined) {
|
||||
// the group index of an entry is always the maximum
|
||||
if (depEntry.groupIndex === undefined || depEntry.groupIndex < depGroupIndex) {
|
||||
|
||||
// if already in a group, remove from the old group
|
||||
if (depEntry.groupIndex) {
|
||||
groups[depEntry.groupIndex].splice(groups[depEntry.groupIndex].indexOf(depEntry), 1);
|
||||
|
||||
// if the old group is empty, then we have a mixed depndency cycle
|
||||
if (groups[depEntry.groupIndex].length == 0)
|
||||
throw new TypeError("Mixed dependency cycle detected");
|
||||
}
|
||||
|
||||
depEntry.groupIndex = depGroupIndex;
|
||||
}
|
||||
else if (depEntry.groupIndex != depGroupIndex) {
|
||||
throw new TypeError('System.register mixed dependency cycle');
|
||||
}
|
||||
|
||||
buildGroups(depEntry, loader, groups);
|
||||
}
|
||||
@ -336,7 +344,7 @@ function register(loader) {
|
||||
|
||||
buildGroups(startEntry, loader, groups);
|
||||
|
||||
var curGroupDeclarative = startEntry.declarative == groups.length % 2;
|
||||
var curGroupDeclarative = !!startEntry.declarative == groups.length % 2;
|
||||
for (var i = groups.length - 1; i >= 0; i--) {
|
||||
var group = groups[i];
|
||||
for (var j = 0; j < group.length; j++) {
|
||||
@ -482,8 +490,12 @@ function register(loader) {
|
||||
|
||||
for (var i = 0; i < entry.normalizedDeps.length; i++) {
|
||||
var depName = entry.normalizedDeps[i];
|
||||
if (indexOf.call(seen, depName) == -1)
|
||||
ensureEvaluated(depName, seen, loader);
|
||||
if (indexOf.call(seen, depName) == -1) {
|
||||
if (!loader.defined[depName])
|
||||
loader.get(depName);
|
||||
else
|
||||
ensureEvaluated(depName, seen, loader);
|
||||
}
|
||||
}
|
||||
|
||||
if (entry.evaluated)
|
||||
|
||||
2
dist/system-production-amd.min.js
vendored
2
dist/system-production-amd.min.js
vendored
File diff suppressed because one or more lines are too long
26
dist/system.js
vendored
26
dist/system.js
vendored
@ -409,12 +409,20 @@ function register(loader) {
|
||||
// now we know the entry is in our unlinked linkage group
|
||||
var depGroupIndex = entry.groupIndex + (depEntry.declarative != entry.declarative);
|
||||
|
||||
if (depEntry.groupIndex === undefined) {
|
||||
// the group index of an entry is always the maximum
|
||||
if (depEntry.groupIndex === undefined || depEntry.groupIndex < depGroupIndex) {
|
||||
|
||||
// if already in a group, remove from the old group
|
||||
if (depEntry.groupIndex) {
|
||||
groups[depEntry.groupIndex].splice(groups[depEntry.groupIndex].indexOf(depEntry), 1);
|
||||
|
||||
// if the old group is empty, then we have a mixed depndency cycle
|
||||
if (groups[depEntry.groupIndex].length == 0)
|
||||
throw new TypeError("Mixed dependency cycle detected");
|
||||
}
|
||||
|
||||
depEntry.groupIndex = depGroupIndex;
|
||||
}
|
||||
else if (depEntry.groupIndex != depGroupIndex) {
|
||||
throw new TypeError('System.register mixed dependency cycle');
|
||||
}
|
||||
|
||||
buildGroups(depEntry, loader, groups);
|
||||
}
|
||||
@ -429,7 +437,7 @@ function register(loader) {
|
||||
|
||||
buildGroups(startEntry, loader, groups);
|
||||
|
||||
var curGroupDeclarative = startEntry.declarative == groups.length % 2;
|
||||
var curGroupDeclarative = !!startEntry.declarative == groups.length % 2;
|
||||
for (var i = groups.length - 1; i >= 0; i--) {
|
||||
var group = groups[i];
|
||||
for (var j = 0; j < group.length; j++) {
|
||||
@ -575,8 +583,12 @@ function register(loader) {
|
||||
|
||||
for (var i = 0; i < entry.normalizedDeps.length; i++) {
|
||||
var depName = entry.normalizedDeps[i];
|
||||
if (indexOf.call(seen, depName) == -1)
|
||||
ensureEvaluated(depName, seen, loader);
|
||||
if (indexOf.call(seen, depName) == -1) {
|
||||
if (!loader.defined[depName])
|
||||
loader.get(depName);
|
||||
else
|
||||
ensureEvaluated(depName, seen, loader);
|
||||
}
|
||||
}
|
||||
|
||||
if (entry.evaluated)
|
||||
|
||||
2
dist/system.min.js
vendored
2
dist/system.min.js
vendored
File diff suppressed because one or more lines are too long
@ -83,12 +83,20 @@ function register(loader) {
|
||||
// now we know the entry is in our unlinked linkage group
|
||||
var depGroupIndex = entry.groupIndex + (depEntry.declarative != entry.declarative);
|
||||
|
||||
if (depEntry.groupIndex === undefined) {
|
||||
// the group index of an entry is always the maximum
|
||||
if (depEntry.groupIndex === undefined || depEntry.groupIndex < depGroupIndex) {
|
||||
|
||||
// if already in a group, remove from the old group
|
||||
if (depEntry.groupIndex) {
|
||||
groups[depEntry.groupIndex].splice(groups[depEntry.groupIndex].indexOf(depEntry), 1);
|
||||
|
||||
// if the old group is empty, then we have a mixed depndency cycle
|
||||
if (groups[depEntry.groupIndex].length == 0)
|
||||
throw new TypeError("Mixed dependency cycle detected");
|
||||
}
|
||||
|
||||
depEntry.groupIndex = depGroupIndex;
|
||||
}
|
||||
else if (depEntry.groupIndex != depGroupIndex) {
|
||||
throw new TypeError('System.register mixed dependency cycle');
|
||||
}
|
||||
|
||||
buildGroups(depEntry, loader, groups);
|
||||
}
|
||||
@ -103,7 +111,7 @@ function register(loader) {
|
||||
|
||||
buildGroups(startEntry, loader, groups);
|
||||
|
||||
var curGroupDeclarative = startEntry.declarative == groups.length % 2;
|
||||
var curGroupDeclarative = !!startEntry.declarative == groups.length % 2;
|
||||
for (var i = groups.length - 1; i >= 0; i--) {
|
||||
var group = groups[i];
|
||||
for (var j = 0; j < group.length; j++) {
|
||||
@ -249,8 +257,12 @@ function register(loader) {
|
||||
|
||||
for (var i = 0; i < entry.normalizedDeps.length; i++) {
|
||||
var depName = entry.normalizedDeps[i];
|
||||
if (indexOf.call(seen, depName) == -1)
|
||||
ensureEvaluated(depName, seen, loader);
|
||||
if (indexOf.call(seen, depName) == -1) {
|
||||
if (!loader.defined[depName])
|
||||
loader.get(depName);
|
||||
else
|
||||
ensureEvaluated(depName, seen, loader);
|
||||
}
|
||||
}
|
||||
|
||||
if (entry.evaluated)
|
||||
|
||||
12
test/test.js
12
test/test.js
@ -361,12 +361,10 @@ asyncTest('System.register Circular', function() {
|
||||
}, err);
|
||||
});
|
||||
|
||||
|
||||
|
||||
asyncTest('AMD, CJS circular, System.register circular, ES6 circular', function() {
|
||||
asyncTest('AMD -> System.register circular -> ES6', function() {
|
||||
System['import']('tests/all-layers1').then(function(m) {
|
||||
ok(m == true)
|
||||
start();
|
||||
}, err);
|
||||
});
|
||||
/*
|
||||
asyncTest('CJS loading ES6 circular, CJS circular, System.register circular', function() {
|
||||
|
||||
}); */
|
||||
|
||||
|
||||
3
test/tests/all-layers1.js
Normal file
3
test/tests/all-layers1.js
Normal file
@ -0,0 +1,3 @@
|
||||
define(['./all-layers2'], function(al2) {
|
||||
return al2.q == 10 && al2.r == 5;
|
||||
});
|
||||
39
test/tests/all-layers2.js
Normal file
39
test/tests/all-layers2.js
Normal file
@ -0,0 +1,39 @@
|
||||
System.register(["./all-layers3"], function($__0) {
|
||||
"use strict";
|
||||
var q,
|
||||
r;
|
||||
function p() {
|
||||
if (q)
|
||||
r = $__0[0]["c"];
|
||||
else
|
||||
q = $__0[0]["c"];
|
||||
}
|
||||
return {
|
||||
exports: {
|
||||
get q() {
|
||||
return q;
|
||||
},
|
||||
get r() {
|
||||
return r;
|
||||
},
|
||||
get p() {
|
||||
return p;
|
||||
},
|
||||
set q(value) {
|
||||
q = value;
|
||||
},
|
||||
set r(value) {
|
||||
r = value;
|
||||
},
|
||||
set p(value) {
|
||||
p = value;
|
||||
}
|
||||
},
|
||||
execute: function() {
|
||||
;
|
||||
$__0[0]["c"] = 5;
|
||||
;
|
||||
p();
|
||||
}
|
||||
};
|
||||
});
|
||||
19
test/tests/all-layers3.js
Normal file
19
test/tests/all-layers3.js
Normal file
@ -0,0 +1,19 @@
|
||||
System.register(["./all-layers2", "./all-layers4"], function($__0) {
|
||||
"use strict";
|
||||
var c;
|
||||
return {
|
||||
exports: {
|
||||
get c() {
|
||||
return c;
|
||||
},
|
||||
set c(value) {
|
||||
c = value;
|
||||
}
|
||||
},
|
||||
execute: function() {
|
||||
c = $__0[1]["c"];
|
||||
;
|
||||
$__0[0]["p"]();
|
||||
}
|
||||
};
|
||||
});
|
||||
1
test/tests/all-layers4.js
Normal file
1
test/tests/all-layers4.js
Normal file
@ -0,0 +1 @@
|
||||
export var c = 10;
|
||||
Loading…
x
Reference in New Issue
Block a user