@@ -51,6 +51,67 @@ function logloads(loads) {
5151 return log;
5252} */
5353
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+
54115( function ( __global ) {
55116 ( function ( ) {
56117 var Promise = __global . Promise || require ( 'es6-promise' ) . Promise ;
@@ -126,12 +187,14 @@ function logloads(loads) {
126187
127188 // 15.2.4.2
128189 function requestLoad ( loader , request , refererName , refererAddress ) {
190+ checkInvariants ( ) ;
129191 // 15.2.4.2.1 CallNormalize
130192 return new Promise ( function ( resolve , reject ) {
131193 resolve ( loader . loaderObj . normalize ( request , refererName , refererAddress ) ) ;
132194 } )
133195 // 15.2.4.2.2 GetOrCreateLoad
134196 . then ( function ( name ) {
197+ checkInvariants ( ) ;
135198 var load ;
136199 if ( loader . modules [ name ] ) {
137200 load = createLoad ( name ) ;
@@ -159,6 +222,7 @@ function logloads(loads) {
159222
160223 // 15.2.4.3
161224 function proceedToLocate ( loader , load ) {
225+ checkInvariants ( ) ;
162226 proceedToFetch ( loader , load ,
163227 Promise . resolve ( )
164228 // 15.2.4.3.1 CallLocate
@@ -170,6 +234,7 @@ function logloads(loads) {
170234
171235 // 15.2.4.4
172236 function proceedToFetch ( loader , load , p ) {
237+ checkInvariants ( ) ;
173238 proceedToTranslate ( loader , load ,
174239 p
175240 // 15.2.4.4.1 CallFetch
@@ -185,16 +250,19 @@ function logloads(loads) {
185250
186251 // 15.2.4.5
187252 function proceedToTranslate ( loader , load , p ) {
253+ checkInvariants ( ) ;
188254 p
189255 // 15.2.4.5.1 CallTranslate
190256 . then ( function ( source ) {
257+ checkInvariants ( ) ;
191258 if ( load . status != 'loading' )
192259 return ;
193260 return loader . loaderObj . translate ( { name : load . name , metadata : load . metadata , address : load . address , source : source } ) ;
194261 } )
195262
196263 // 15.2.4.5.2 CallInstantiate
197264 . then ( function ( source ) {
265+ checkInvariants ( ) ;
198266 if ( load . status != 'loading' )
199267 return ;
200268 load . source = source ;
@@ -203,6 +271,7 @@ function logloads(loads) {
203271
204272 // 15.2.4.5.3 InstantiateSucceeded
205273 . then ( function ( instantiateResult ) {
274+ checkInvariants ( ) ;
206275 if ( load . status != 'loading' )
207276 return ;
208277
@@ -288,14 +357,16 @@ function logloads(loads) {
288357
289358 // 15.2.4.6 ProcessLoadDependencies
290359 load . dependencies = [ ] ;
291- load . depsList = depsList
360+ load . depsList = depsList ;
292361 var loadPromises = [ ] ;
293362 for ( var i = 0 , l = depsList . length ; i < l ; i ++ ) ( function ( request ) {
363+ checkInvariants ( ) ;
294364 loadPromises . push (
295365 requestLoad ( loader , request , load . name , load . address )
296366
297367 // 15.2.4.6.1 AddDependencyLoad (load is parentLoad)
298368 . then ( function ( depLoad ) {
369+ checkInvariants ( ) ;
299370
300371 console . assert ( ! load . dependencies . some ( function ( dep ) {
301372 return dep . key == request ;
@@ -323,6 +394,7 @@ function logloads(loads) {
323394
324395 // 15.2.4.6.2 LoadSucceeded
325396 . then ( function ( ) {
397+ checkInvariants ( ) ;
326398 // console.log('LoadSucceeded ' + load.name);
327399 // snapshot(loader);
328400
@@ -337,6 +409,7 @@ function logloads(loads) {
337409
338410 // 15.2.4.5.4 LoadFailed
339411 [ 'catch' ] ( function ( exc ) {
412+ checkInvariants ( ) ;
340413 console . assert ( load . status == 'loading' , 'is loading on fail' ) ;
341414 load . status = 'failed' ;
342415 load . exception = exc ;
@@ -353,6 +426,7 @@ function logloads(loads) {
353426
354427 // 15.2.4.7.1
355428 function asyncStartLoadPartwayThrough ( stepState ) {
429+ checkInvariants ( ) ;
356430 return function ( resolve , reject ) {
357431 var loader = stepState . loader ;
358432 var name = stepState . moduleName ;
0 commit comments