@@ -873,7 +873,7 @@ function logloads(loads) {
873
873
function evaluateLoadedModule ( loader , load ) {
874
874
console . assert ( load . status == 'linked' , 'is linked ' + load . name ) ;
875
875
876
- ensureEvaluated ( load . module , [ ] , loader ) ;
876
+ doEnsureEvaluated ( load . module , [ ] , loader ) ;
877
877
return load . module . module ;
878
878
}
879
879
@@ -885,20 +885,22 @@ function logloads(loads) {
885
885
* module.dependencies list of module objects for dependencies
886
886
*
887
887
*/
888
-
889
- // execution errors don't propogate in the pipeline
890
- // see https://bugs.ecmascript.org/show_bug.cgi?id=2993
891
888
function doExecute ( module ) {
892
889
try {
893
890
module . execute . call ( __global ) ;
894
891
}
895
892
catch ( e ) {
896
- setTimeout ( function ( ) {
897
- throw e ;
898
- } ) ;
893
+ return e ;
899
894
}
900
895
}
901
896
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
+ }
902
904
// 15.2.6.2 EnsureEvaluated adjusted
903
905
function ensureEvaluated ( module , seen , loader ) {
904
906
if ( module . evaluated || ! module . dependencies )
@@ -907,20 +909,31 @@ function logloads(loads) {
907
909
seen . push ( module ) ;
908
910
909
911
var deps = module . dependencies ;
912
+ var err ;
910
913
911
914
for ( var i = 0 ; i < deps . length ; i ++ ) {
912
915
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
+ }
915
922
}
916
923
924
+ if ( module . failed )
925
+ return new Error ( 'Module failed execution.' ) ;
926
+
917
927
if ( module . evaluated )
918
928
return ;
919
929
920
930
module . evaluated = true ;
921
- doExecute ( module ) ;
931
+ err = doExecute ( module ) ;
932
+ if ( err )
933
+ module . failed = true ;
922
934
module . module = _newModule ( module . exports ) ;
923
- delete module . execute ;
935
+ module . execute = undefined ;
936
+ return err ;
924
937
}
925
938
926
939
// 26.3 Loader
@@ -998,7 +1011,7 @@ function logloads(loads) {
998
1011
get : function ( key ) {
999
1012
if ( ! this . _loader . modules [ key ] )
1000
1013
return ;
1001
- ensureEvaluated ( this . _loader . modules [ key ] , [ ] , this ) ;
1014
+ doEnsureEvaluated ( this . _loader . modules [ key ] , [ ] , this ) ;
1002
1015
return this . _loader . modules [ key ] . module ;
1003
1016
} ,
1004
1017
// 26.3.3.7
@@ -1016,7 +1029,7 @@ function logloads(loads) {
1016
1029
var loader = loaderObj . _loader ;
1017
1030
1018
1031
if ( loader . modules [ name ] ) {
1019
- ensureEvaluated ( loader . modules [ name ] , [ ] , loader . _loader ) ;
1032
+ doEnsureEvaluated ( loader . modules [ name ] , [ ] , loader . _loader ) ;
1020
1033
return loader . modules [ name ] . module ;
1021
1034
}
1022
1035
@@ -1032,7 +1045,7 @@ function logloads(loads) {
1032
1045
// 26.3.3.10
1033
1046
load : function ( name , options ) {
1034
1047
if ( this . _loader . modules [ name ] ) {
1035
- ensureEvaluated ( this . _loader . modules [ name ] , [ ] , this . _loader ) ;
1048
+ doEnsureEvaluated ( this . _loader . modules [ name ] , [ ] , this . _loader ) ;
1036
1049
return Promise . resolve ( this . _loader . modules [ name ] . module ) ;
1037
1050
}
1038
1051
return importPromises [ name ] || createImportPromise ( name , loadModule ( this . _loader , name , { } ) ) ;
0 commit comments