@@ -283,7 +283,7 @@ function logloads(loads) {
283
283
return ;
284
284
285
285
if ( instantiateResult === undefined ) {
286
- load . address = load . address || 'anon ' + ++ anonCnt ;
286
+ load . address = load . address || '<Anonymous Module ' + ++ anonCnt + '>' ;
287
287
288
288
// NB instead of load.kind, use load.isDeclarative
289
289
load . isDeclarative = true ;
@@ -357,8 +357,9 @@ function logloads(loads) {
357
357
load . exception = exc ;
358
358
359
359
var linkSets = load . linkSets . concat ( [ ] ) ;
360
- for ( var i = 0 , l = linkSets . length ; i < l ; i ++ )
361
- linkSetFailed ( linkSets [ i ] , exc ) ;
360
+ for ( var i = 0 , l = linkSets . length ; i < l ; i ++ ) {
361
+ linkSetFailed ( linkSets [ i ] , load , exc ) ;
362
+ }
362
363
363
364
console . assert ( load . linkSets . length == 0 , 'linkSets not removed' ) ;
364
365
} ) ;
@@ -463,14 +464,21 @@ function logloads(loads) {
463
464
// snapshot(linkSet.loader);
464
465
}
465
466
467
+ // linking errors can be generic or load-specific
468
+ // this is necessary for debugging info
466
469
function doLink ( linkSet ) {
470
+ var error = false ;
467
471
try {
468
- link ( linkSet ) ;
472
+ link ( linkSet , function ( load , exc ) {
473
+ linkSetFailed ( linkSet , load , exc ) ;
474
+ error = true ;
475
+ } ) ;
469
476
}
470
- catch ( exc ) {
471
- linkSetFailed ( linkSet , exc ) ;
472
- return true ;
477
+ catch ( e ) {
478
+ linkSetFailed ( linkSet , null , e ) ;
479
+ error = true ;
473
480
}
481
+ return error ;
474
482
}
475
483
476
484
// 15.2.5.2.3
@@ -520,8 +528,14 @@ function logloads(loads) {
520
528
}
521
529
522
530
// 15.2.5.2.4
523
- function linkSetFailed ( linkSet , exc ) {
531
+ function linkSetFailed ( linkSet , load , exc ) {
524
532
var loader = linkSet . loader ;
533
+
534
+ if ( linkSet . loads [ 0 ] . name != load . name )
535
+ exc = addToError ( exc , 'Error loading "' + load . name + '" from "' + linkSet . loads [ 0 ] . name + '" at ' + ( linkSet . loads [ 0 ] . address || '<unknown>' ) + '\n' ) ;
536
+
537
+ exc = addToError ( exc , 'Error loading "' + load . name + '" at ' + ( load . address || '<unknown>' ) + '\n' ) ;
538
+
525
539
var loads = linkSet . loads . concat ( [ ] ) ;
526
540
for ( var i = 0 , l = loads . length ; i < l ; i ++ ) {
527
541
var load = loads [ i ] ;
@@ -631,8 +645,22 @@ function logloads(loads) {
631
645
}
632
646
}
633
647
648
+ function doDynamicExecute ( linkSet , load , linkError ) {
649
+ try {
650
+ var module = load . execute ( ) ;
651
+ }
652
+ catch ( e ) {
653
+ linkError ( load , e ) ;
654
+ return ;
655
+ }
656
+ if ( ! module || ! ( module instanceof Module ) )
657
+ linkError ( load , new TypeError ( 'Execution must define a Module instance' ) ) ;
658
+ else
659
+ return module ;
660
+ }
661
+
634
662
// 15.2.5.4
635
- function link ( linkSet ) {
663
+ function link ( linkSet , linkError ) {
636
664
637
665
var loader = linkSet . loader ;
638
666
@@ -667,9 +695,9 @@ function logloads(loads) {
667
695
}
668
696
// 15.2.5.6 LinkDynamicModules adjusted
669
697
else {
670
- var module = load . execute ( ) ;
671
- if ( ! module || ! ( module instanceof Module ) )
672
- throw new TypeError ( 'Execution must define a Module instance' ) ;
698
+ var module = doDynamicExecute ( linkSet , load , linkError ) ;
699
+ if ( ! module )
700
+ return ;
673
701
load . module = {
674
702
name : load . name ,
675
703
module : module
@@ -832,8 +860,10 @@ function logloads(loads) {
832
860
if ( indexOf . call ( seen , dep ) == - 1 ) {
833
861
err = ensureEvaluated ( dep , seen , loader ) ;
834
862
// stop on error, see https://bugs.ecmascript.org/show_bug.cgi?id=2996
835
- if ( err )
836
- return err + '\n in module ' + dep . name ;
863
+ if ( err ) {
864
+ err = addToError ( err , 'Error evaluating ' + dep . name + '\n' ) ;
865
+ return err ;
866
+ }
837
867
}
838
868
}
839
869
@@ -847,7 +877,8 @@ function logloads(loads) {
847
877
err = doExecute ( module ) ;
848
878
if ( err ) {
849
879
module . failed = true ;
850
- } else if ( Object . preventExtensions ) {
880
+ }
881
+ else if ( Object . preventExtensions ) {
851
882
// spec variation
852
883
// we don't create a new module here because it was created and ammended
853
884
// we just disable further extensions instead
@@ -858,6 +889,14 @@ function logloads(loads) {
858
889
return err ;
859
890
}
860
891
892
+ function addToError ( err , msg ) {
893
+ if ( err instanceof Error )
894
+ err . message = msg + err . message ;
895
+ else
896
+ err = msg + err ;
897
+ return err ;
898
+ }
899
+
861
900
// 26.3 Loader
862
901
863
902
// 26.3.1.1
@@ -1058,6 +1097,16 @@ function logloads(loads) {
1058
1097
// parse function is used to parse a load record
1059
1098
// Returns an array of ModuleSpecifiers
1060
1099
var traceur ;
1100
+
1101
+ function doCompile ( source , compiler , filename ) {
1102
+ try {
1103
+ return compiler . compile ( source , filename ) ;
1104
+ }
1105
+ catch ( e ) {
1106
+ // traceur throws an error array
1107
+ throw e [ 0 ] ;
1108
+ }
1109
+ }
1061
1110
Loader . prototype . parse = function ( load ) {
1062
1111
if ( ! traceur ) {
1063
1112
if ( typeof window == 'undefined' &&
@@ -1075,19 +1124,26 @@ function logloads(loads) {
1075
1124
1076
1125
load . isDeclarative = true ;
1077
1126
1078
- var options = traceur . options || { } ;
1127
+ var options = this . traceurOptions || { } ;
1079
1128
options . modules = 'instantiate' ;
1080
1129
options . script = false ;
1081
1130
options . sourceMaps = true ;
1082
1131
options . filename = load . address ;
1083
1132
1084
1133
var compiler = new traceur . Compiler ( options ) ;
1085
- var source = compiler . compile ( load . source , options . filename ) ;
1134
+
1135
+ var source = doCompile ( load . source , compiler , options . filename ) ;
1136
+
1137
+ if ( ! source )
1138
+ throw new Error ( 'Error evaluating module ' + load . address ) ;
1139
+
1086
1140
var sourceMap = compiler . getSourceMap ( ) ;
1087
1141
1088
1142
if ( __global . btoa && sourceMap )
1089
1143
source += '\n//# sourceMappingURL=data:application/json;base64,' + btoa ( unescape ( encodeURIComponent ( sourceMap ) ) ) + '\n' ;
1090
1144
1145
+ source = 'var __moduleAddress = "' + load . address + '";' + source ;
1146
+
1091
1147
__eval ( source , __global , load ) ;
1092
1148
}
1093
1149
} ) ( ) ;
@@ -1119,12 +1175,13 @@ function logloads(loads) {
1119
1175
( function ( ) {
1120
1176
var isWorker = typeof self !== 'undefined' && typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope ;
1121
1177
var isBrowser = typeof window != 'undefined' && ! isWorker ;
1178
+ var isWindows = typeof process != 'undefined' && ! ! process . platform . match ( / ^ w i n / ) ;
1122
1179
var Promise = __global . Promise || require ( 'when/es6-shim/Promise' ) ;
1123
1180
1124
1181
// Helpers
1125
1182
// Absolute URL parsing, from https://gist.github.com/Yaffle/1088850
1126
1183
function parseURI ( url ) {
1127
- var m = String ( url ) . replace ( / ^ \s + | \s + $ / g, '' ) . match ( / ^ ( [ ^ : \/ ? # ] + : ) ? ( \/ \/ (?: [ ^ : @ ] * (?: : [ ^ : @ ] * ) ? @ ) ? ( ( [ ^ : \/ ? # ] * ) (?: : ( \d * ) ) ? ) ) ? ( [ ^ ? # ] * ) ( \? [ ^ # ] * ) ? ( # [ \s \S ] * ) ? / ) ;
1184
+ var m = String ( url ) . replace ( / ^ \s + | \s + $ / g, '' ) . match ( / ^ ( [ ^ : \/ ? # ] + : ) ? ( \/ \/ (?: [ ^ : @ \/ ? # ] * (?: : [ ^ : @ \/ ? # ] * ) ? @ ) ? ( ( [ ^ : \/ ? # ] * ) (?: : ( \d * ) ) ? ) ) ? ( [ ^ ? # ] * ) ( \? [ ^ # ] * ) ? ( # [ \s \S ] * ) ? / ) ;
1128
1185
// authority = '//' + user + ':' + pass '@' + hostname + ':' port
1129
1186
return ( m ? {
1130
1187
href : m [ 0 ] || '' ,
@@ -1213,7 +1270,12 @@ function logloads(loads) {
1213
1270
else if ( typeof require != 'undefined' ) {
1214
1271
var fs ;
1215
1272
fetchTextFromURL = function ( url , fulfill , reject ) {
1273
+ if ( url . substr ( 0 , 5 ) != 'file:' )
1274
+ throw 'Only file URLs of the form file: allowed running in Node.' ;
1216
1275
fs = fs || require ( 'fs' ) ;
1276
+ url = url . substr ( 5 ) ;
1277
+ if ( isWindows )
1278
+ url = url . replace ( / \/ / g, '\\' ) ;
1217
1279
return fs . readFile ( url , function ( err , data ) {
1218
1280
if ( err )
1219
1281
return reject ( err ) ;
@@ -1228,15 +1290,17 @@ function logloads(loads) {
1228
1290
1229
1291
var SystemLoader = function ( $__super ) {
1230
1292
function SystemLoader ( options ) {
1231
- $__Object$getPrototypeOf ( SystemLoader . prototype ) . constructor . call ( this , options || { } ) ;
1293
+ $__super . call ( this , options || { } ) ;
1232
1294
1233
1295
// Set default baseURL and paths
1234
1296
if ( typeof location != 'undefined' && location . href ) {
1235
1297
var href = __global . location . href . split ( '#' ) [ 0 ] . split ( '?' ) [ 0 ] ;
1236
1298
this . baseURL = href . substring ( 0 , href . lastIndexOf ( '/' ) + 1 ) ;
1237
1299
}
1238
1300
else if ( typeof process != 'undefined' && process . cwd ) {
1239
- this . baseURL = process . cwd ( ) + '/' ;
1301
+ this . baseURL = 'file:' + process . cwd ( ) + '/' ;
1302
+ if ( isWindows )
1303
+ this . baseURL = this . baseURL . replace ( / \\ / g, '/' ) ;
1240
1304
}
1241
1305
else {
1242
1306
throw new TypeError ( 'No environment baseURL' ) ;
@@ -1410,11 +1474,10 @@ function logloads(loads) {
1410
1474
1411
1475
function ready ( ) {
1412
1476
var scripts = document . getElementsByTagName ( 'script' ) ;
1413
-
1414
1477
for ( var i = 0 ; i < scripts . length ; i ++ ) {
1415
1478
var script = scripts [ i ] ;
1416
1479
if ( script . type == 'module' ) {
1417
- var source = script . innerHTML ;
1480
+ var source = script . innerHTML . substr ( 1 ) ;
1418
1481
System . module ( source ) [ 'catch' ] ( function ( err ) { setTimeout ( function ( ) { throw err ; } ) ; } ) ;
1419
1482
}
1420
1483
}
0 commit comments