@@ -873,7 +873,7 @@ function logloads(loads) {
873873 function evaluateLoadedModule ( loader , load ) {
874874 console . assert ( load . status == 'linked' , 'is linked ' + load . name ) ;
875875
876- ensureEvaluated ( load . module , [ ] , loader ) ;
876+ doEnsureEvaluated ( load . module , [ ] , loader ) ;
877877 return load . module . module ;
878878 }
879879
@@ -885,20 +885,22 @@ function logloads(loads) {
885885 * module.dependencies list of module objects for dependencies
886886 *
887887 */
888-
889- // execution errors don't propogate in the pipeline
890- // see https://bugs.ecmascript.org/show_bug.cgi?id=2993
891888 function doExecute ( module ) {
892889 try {
893890 module . execute . call ( __global ) ;
894891 }
895892 catch ( e ) {
896- setTimeout ( function ( ) {
897- throw e ;
898- } ) ;
893+ return e ;
899894 }
900895 }
901896
897+ // propogate execution errors
898+ // see https://bugs.ecmascript.org/show_bug.cgi?id=2993
899+ function doEnsureEvaluated ( module , seen , loader ) {
900+ var err = ensureEvaluated ( module , seen , loader ) ;
901+ if ( err )
902+ throw err ;
903+ }
902904 // 15.2.6.2 EnsureEvaluated adjusted
903905 function ensureEvaluated ( module , seen , loader ) {
904906 if ( module . evaluated || ! module . dependencies )
@@ -907,20 +909,31 @@ function logloads(loads) {
907909 seen . push ( module ) ;
908910
909911 var deps = module . dependencies ;
912+ var err ;
910913
911914 for ( var i = 0 ; i < deps . length ; i ++ ) {
912915 var dep = deps [ i ] ;
913- if ( indexOf . call ( seen , dep ) == - 1 )
914- ensureEvaluated ( dep , seen , loader ) ;
916+ if ( indexOf . call ( seen , dep ) == - 1 ) {
917+ err = ensureEvaluated ( dep , seen , loader ) ;
918+ // stop on error, see https://bugs.ecmascript.org/show_bug.cgi?id=2996
919+ if ( err )
920+ return err + '\n in module ' + dep . name ;
921+ }
915922 }
916923
924+ if ( module . failed )
925+ return new Error ( 'Module failed execution.' ) ;
926+
917927 if ( module . evaluated )
918928 return ;
919929
920930 module . evaluated = true ;
921- doExecute ( module ) ;
931+ err = doExecute ( module ) ;
932+ if ( err )
933+ module . failed = true ;
922934 module . module = _newModule ( module . exports ) ;
923- delete module . execute ;
935+ module . execute = undefined ;
936+ return err ;
924937 }
925938
926939 // 26.3 Loader
@@ -998,7 +1011,7 @@ function logloads(loads) {
9981011 get : function ( key ) {
9991012 if ( ! this . _loader . modules [ key ] )
10001013 return ;
1001- ensureEvaluated ( this . _loader . modules [ key ] , [ ] , this ) ;
1014+ doEnsureEvaluated ( this . _loader . modules [ key ] , [ ] , this ) ;
10021015 return this . _loader . modules [ key ] . module ;
10031016 } ,
10041017 // 26.3.3.7
@@ -1016,7 +1029,7 @@ function logloads(loads) {
10161029 var loader = loaderObj . _loader ;
10171030
10181031 if ( loader . modules [ name ] ) {
1019- ensureEvaluated ( loader . modules [ name ] , [ ] , loader . _loader ) ;
1032+ doEnsureEvaluated ( loader . modules [ name ] , [ ] , loader . _loader ) ;
10201033 return loader . modules [ name ] . module ;
10211034 }
10221035
@@ -1032,7 +1045,7 @@ function logloads(loads) {
10321045 // 26.3.3.10
10331046 load : function ( name , options ) {
10341047 if ( this . _loader . modules [ name ] ) {
1035- ensureEvaluated ( this . _loader . modules [ name ] , [ ] , this . _loader ) ;
1048+ doEnsureEvaluated ( this . _loader . modules [ name ] , [ ] , this . _loader ) ;
10361049 return Promise . resolve ( this . _loader . modules [ name ] . module ) ;
10371050 }
10381051 return importPromises [ name ] || createImportPromise ( name , loadModule ( this . _loader , name , { } ) ) ;
0 commit comments