@@ -51,6 +51,67 @@ function logloads(loads) {
51
51
return log;
52
52
} */
53
53
54
+
55
+ function checkInvariants ( ) {
56
+ // see https://bugs.ecmascript.org/show_bug.cgi?id=2603#c1
57
+
58
+ var loads = System . _loader . loads ;
59
+ var linkSets = [ ] ;
60
+
61
+ for ( var i = 0 ; i < loads . length ; i ++ ) {
62
+ var load = loads [ i ] ;
63
+ console . assert ( load . status == 'loading' || load . status == 'loaded' , 'Each load is loading or loaded' ) ;
64
+
65
+ for ( var j = 0 ; j < load . linkSets . length ; j ++ ) {
66
+ var linkSet = load . linkSets [ j ] ;
67
+
68
+ for ( var k = 0 ; k < linkSet . loads . length ; k ++ )
69
+ console . assert ( loads . indexOf ( linkSet . loads [ k ] ) != - 1 , 'linkSet loads are a subset of loader loads' ) ;
70
+
71
+ if ( linkSets . indexOf ( linkSet ) == - 1 )
72
+ linkSets . push ( linkSet ) ;
73
+ }
74
+ }
75
+
76
+ for ( var i = 0 ; i < loads . length ; i ++ ) {
77
+ var load = loads [ i ] ;
78
+ for ( var j = 0 ; j < linkSets . length ; j ++ ) {
79
+ var linkSet = linkSets [ j ] ;
80
+
81
+ if ( linkSet . loads . indexOf ( load ) != - 1 )
82
+ console . assert ( load . linkSets . indexOf ( linkSet ) != - 1 , 'linkSet contains load -> load contains linkSet' ) ;
83
+
84
+ if ( load . linkSets . indexOf ( linkSet ) != - 1 )
85
+ console . assert ( linkSet . loads . indexOf ( load ) != - 1 , 'load contains linkSet -> linkSet contains load' ) ;
86
+ }
87
+ }
88
+
89
+ for ( var i = 0 ; i < linkSets . length ; i ++ ) {
90
+ var linkSet = linkSets [ i ] ;
91
+ for ( var j = 0 ; j < linkSet . loads . length ; j ++ ) {
92
+ var load = linkSet . loads [ j ] ;
93
+
94
+ for ( var k = 0 ; k < load . dependencies . length ; k ++ ) {
95
+ var depName = load . dependencies [ k ] . value ;
96
+ var depLoad ;
97
+ for ( var l = 0 ; l < loads . length ; l ++ ) {
98
+ if ( loads [ l ] . name != depName )
99
+ continue ;
100
+ depLoad = loads [ l ] ;
101
+ break ;
102
+ }
103
+
104
+ // loading records are allowed not to have their dependencies yet
105
+ // if (load.status != 'loading')
106
+ // console.assert(depLoad, 'depLoad found');
107
+
108
+ // console.assert(linkSet.loads.indexOf(depLoad) != -1, 'linkset contains all dependencies');
109
+ }
110
+ }
111
+ }
112
+ }
113
+
114
+
54
115
( function ( __global ) {
55
116
( function ( ) {
56
117
var Promise = __global . Promise || require ( 'es6-promise' ) . Promise ;
@@ -126,12 +187,14 @@ function logloads(loads) {
126
187
127
188
// 15.2.4.2
128
189
function requestLoad ( loader , request , refererName , refererAddress ) {
190
+ checkInvariants ( ) ;
129
191
// 15.2.4.2.1 CallNormalize
130
192
return new Promise ( function ( resolve , reject ) {
131
193
resolve ( loader . loaderObj . normalize ( request , refererName , refererAddress ) ) ;
132
194
} )
133
195
// 15.2.4.2.2 GetOrCreateLoad
134
196
. then ( function ( name ) {
197
+ checkInvariants ( ) ;
135
198
var load ;
136
199
if ( loader . modules [ name ] ) {
137
200
load = createLoad ( name ) ;
@@ -159,6 +222,7 @@ function logloads(loads) {
159
222
160
223
// 15.2.4.3
161
224
function proceedToLocate ( loader , load ) {
225
+ checkInvariants ( ) ;
162
226
proceedToFetch ( loader , load ,
163
227
Promise . resolve ( )
164
228
// 15.2.4.3.1 CallLocate
@@ -170,6 +234,7 @@ function logloads(loads) {
170
234
171
235
// 15.2.4.4
172
236
function proceedToFetch ( loader , load , p ) {
237
+ checkInvariants ( ) ;
173
238
proceedToTranslate ( loader , load ,
174
239
p
175
240
// 15.2.4.4.1 CallFetch
@@ -185,16 +250,19 @@ function logloads(loads) {
185
250
186
251
// 15.2.4.5
187
252
function proceedToTranslate ( loader , load , p ) {
253
+ checkInvariants ( ) ;
188
254
p
189
255
// 15.2.4.5.1 CallTranslate
190
256
. then ( function ( source ) {
257
+ checkInvariants ( ) ;
191
258
if ( load . status != 'loading' )
192
259
return ;
193
260
return loader . loaderObj . translate ( { name : load . name , metadata : load . metadata , address : load . address , source : source } ) ;
194
261
} )
195
262
196
263
// 15.2.4.5.2 CallInstantiate
197
264
. then ( function ( source ) {
265
+ checkInvariants ( ) ;
198
266
if ( load . status != 'loading' )
199
267
return ;
200
268
load . source = source ;
@@ -203,6 +271,7 @@ function logloads(loads) {
203
271
204
272
// 15.2.4.5.3 InstantiateSucceeded
205
273
. then ( function ( instantiateResult ) {
274
+ checkInvariants ( ) ;
206
275
if ( load . status != 'loading' )
207
276
return ;
208
277
@@ -288,14 +357,16 @@ function logloads(loads) {
288
357
289
358
// 15.2.4.6 ProcessLoadDependencies
290
359
load . dependencies = [ ] ;
291
- load . depsList = depsList
360
+ load . depsList = depsList ;
292
361
var loadPromises = [ ] ;
293
362
for ( var i = 0 , l = depsList . length ; i < l ; i ++ ) ( function ( request ) {
363
+ checkInvariants ( ) ;
294
364
loadPromises . push (
295
365
requestLoad ( loader , request , load . name , load . address )
296
366
297
367
// 15.2.4.6.1 AddDependencyLoad (load is parentLoad)
298
368
. then ( function ( depLoad ) {
369
+ checkInvariants ( ) ;
299
370
300
371
console . assert ( ! load . dependencies . some ( function ( dep ) {
301
372
return dep . key == request ;
@@ -323,6 +394,7 @@ function logloads(loads) {
323
394
324
395
// 15.2.4.6.2 LoadSucceeded
325
396
. then ( function ( ) {
397
+ checkInvariants ( ) ;
326
398
// console.log('LoadSucceeded ' + load.name);
327
399
// snapshot(loader);
328
400
@@ -337,6 +409,7 @@ function logloads(loads) {
337
409
338
410
// 15.2.4.5.4 LoadFailed
339
411
[ 'catch' ] ( function ( exc ) {
412
+ checkInvariants ( ) ;
340
413
console . assert ( load . status == 'loading' , 'is loading on fail' ) ;
341
414
load . status = 'failed' ;
342
415
load . exception = exc ;
@@ -353,6 +426,7 @@ function logloads(loads) {
353
426
354
427
// 15.2.4.7.1
355
428
function asyncStartLoadPartwayThrough ( stepState ) {
429
+ checkInvariants ( ) ;
356
430
return function ( resolve , reject ) {
357
431
var loader = stepState . loader ;
358
432
var name = stepState . moduleName ;
0 commit comments