@@ -218,47 +218,58 @@ function logloads(loads) {
218218
219219 console . assert ( load . source , 'Non-empty source' ) ;
220220
221- var parser = new traceur . syntax . Parser ( new traceur . syntax . SourceFile ( load . address , load . source ) ) ;
222- var body = parser . parseModule ( ) ;
221+ try {
222+ var parser = new traceur . syntax . Parser ( new traceur . syntax . SourceFile ( load . address , load . source ) ) ;
223+ var body = parser . parseModule ( ) ;
223224
224- load . kind = 'declarative' ;
225- depsList = getImports ( body ) ;
225+ load . kind = 'declarative' ;
226+ depsList = getImports ( body ) ;
226227
227- traceur . options . sourceMaps = true ;
228- traceur . options . modules = 'instantiate' ;
228+ traceur . options . sourceMaps = true ;
229+ traceur . options . modules = 'instantiate' ;
229230
230- var reporter = new traceur . util . ErrorReporter ( ) ;
231+ var reporter = new traceur . util . ErrorReporter ( ) ;
231232
232- reporter . reportMessageInternal = function ( location , kind , format , args ) {
233- throw kind + '\n' + location ;
234- }
233+ reporter . reportMessageInternal = function ( location , kind , format , args ) {
234+ throw new SyntaxError ( kind , location . start && location . start . line_ , location . start && location . start . column_ ) ;
235+ }
235236
236- // traceur expects its version of System
237- var sys = global . System ;
238- global . System = global . traceurSystem ;
237+ // traceur expects its version of System
238+ var curSystem = global . System ;
239+ global . System = global . traceurSystem ;
239240
240- var tree = ( new traceur . codegeneration . module . AttachModuleNameTransformer ( load . name ) ) . transformAny ( body ) ;
241- tree = ( new traceur . codegeneration . FromOptionsTransformer ( reporter ) ) . transform ( tree ) ;
241+ var tree = ( new traceur . codegeneration . module . AttachModuleNameTransformer ( load . name ) ) . transformAny ( body ) ;
242+ tree = ( new traceur . codegeneration . FromOptionsTransformer ( reporter ) ) . transform ( tree ) ;
242243
243- var sourceMapGenerator = new traceur . outputgeneration . SourceMapGenerator ( { file : load . address } ) ;
244- var options = { sourceMapGenerator : sourceMapGenerator } ;
244+ var sourceMapGenerator = new traceur . outputgeneration . SourceMapGenerator ( { file : load . address } ) ;
245+ var options = { sourceMapGenerator : sourceMapGenerator } ;
245246
246- var source = traceur . outputgeneration . TreeWriter . write ( tree , options ) ;
247+ var source = traceur . outputgeneration . TreeWriter . write ( tree , options ) ;
247248
248- if ( global . btoa )
249- source += '\n//# sourceMappingURL=data:application/json;base64,' + btoa ( unescape ( encodeURIComponent ( options . sourceMap ) ) ) + '\n' ;
249+ if ( global . btoa )
250+ source += '\n//# sourceMappingURL=data:application/json;base64,' + btoa ( unescape ( encodeURIComponent ( options . sourceMap ) ) ) + '\n' ;
250251
251- // now run System.register
252- var sysRegister = System . register ;
253-
254- System . register = function ( name , deps , declare ) {
255- // store the registered declaration as load.declare
256- load . declare = declare ;
257- }
258- __eval ( source , global , load . name ) ;
252+ // now run System.register
253+ var curRegister = System . register ;
254+
255+ System . register = function ( name , deps , declare ) {
256+ // store the registered declaration as load.declare
257+ load . declare = declare ;
258+ }
259259
260- System . register = sysRegister ;
261- global . System = sys ;
260+ __eval ( source , global , load . name ) ;
261+ }
262+ catch ( e ) {
263+ if ( e . name == 'SyntaxError' || e . name == 'TypeError' )
264+ e . message = 'Evaluating ' + ( load . name || load . address ) + '\n\t' + e . message ;
265+ if ( curRegister )
266+ System . register = curRegister ;
267+ if ( curSystem )
268+ global . System = curSystem ;
269+ throw e ;
270+ }
271+ System . register = curRegister ;
272+ global . System = curSystem ;
262273 }
263274 else if ( typeof instantiateResult == 'object' ) {
264275 depsList = instantiateResult . deps || [ ] ;
@@ -567,13 +578,13 @@ function logloads(loads) {
567578 // 15.2.5.6 LinkDynamicModules adjusted
568579 else {
569580 var module = load . execute ( ) ;
570- if ( ! ( module instanceof Module ) )
581+ if ( ! ( module . __esModule ) )
571582 throw new TypeError ( 'Execution must define a Module instance' ) ;
572583 load . module = {
573584 module : module
574585 } ;
586+ load . status = 'linked' ;
575587 }
576- load . status = 'linked' ;
577588 finishLoad ( loader , load ) ;
578589 }
579590
@@ -584,11 +595,12 @@ function logloads(loads) {
584595
585596 // custom declarative linking function
586597 function linkDeclarativeModule ( load , loads , loader ) {
598+ // only link if already not already started linking (stops at circular)
587599 if ( load . module )
588600 return ;
589601
590602 // declare the module with an empty depMap
591- var depMap = { } ;
603+ var depMap = [ ] ;
592604 var sys = global . System ;
593605 global . System = loader ;
594606 var registryEntry = load . declare . call ( global , depMap ) ;
@@ -597,10 +609,15 @@ function logloads(loads) {
597609
598610 var moduleDependencies = [ ] ;
599611
612+ var module = Module ( registryEntry . exports , 1 ) ;
613+
614+ console . assert ( ! load . module , 'Load module already declared!' ) ;
615+
600616 load . module = {
601617 name : load . name ,
602618 dependencies : moduleDependencies ,
603619 execute : registryEntry . execute ,
620+ module : module ,
604621 evaluated : false
605622 } ;
606623
@@ -619,41 +636,40 @@ function logloads(loads) {
619636 if ( loads [ j ] . name != depName )
620637 continue ;
621638
622- // link if already not already linked (stops at circular)
623- if ( ! loads [ j ] . module )
624- linkDeclarativeModule ( loads [ j ] , loads , loader ) ;
639+ linkDeclarativeModule ( loads [ j ] , loads , loader ) ;
625640
626641 depModule = loads [ j ] . module ;
627642 }
628643 }
629644
630- var depModuleModule = depModule . module ;
645+ console . assert ( depModule , 'Dependency module not found!' ) ;
646+ console . assert ( depModule . module , 'Dependency module not found!' ) ;
631647
632648 if ( registryEntry . exportStar && indexOf . call ( registryEntry . exportStar , load . dependencies [ i ] . key ) != - 1 ) {
633649 // we are exporting * from this dependency
634- for ( var p in depModule . module ) ( function ( p ) {
635- // if the property is already defined throw?
636- defineProperty ( registryEntry . exports , p , {
637- enumerable : true ,
638- get : function ( ) {
639- return depModuleModule [ p ] ;
640- } ,
641- set : function ( value ) {
642- depModuleModule [ p ] = value ;
643- }
644- } ) ;
645- } ) ( p ) ;
650+ ( function ( depModuleModule ) {
651+ for ( var p in depModuleModule ) ( function ( p ) {
652+ // if the property is already defined throw?
653+ defineProperty ( module , p , {
654+ enumerable : true ,
655+ get : function ( ) {
656+ return depModuleModule [ p ] ;
657+ } ,
658+ set : function ( value ) {
659+ depModuleModule [ p ] = value ;
660+ }
661+ } ) ;
662+ } ) ( p ) ;
663+ } ) ( depModule . module ) ;
646664 }
647665
648- console . assert ( depModule , 'Dependency module not found!' ) ;
649- console . assert ( depModuleModule , 'Dependency module not found!' ) ;
650-
651666 moduleDependencies . push ( depModule ) ;
652- depMap [ load . dependencies [ i ] . key ] = depModuleModule ;
667+ depMap [ i ] = depModule . module ;
653668 }
654669
655- // at this point we define the module object
656- load . module . module = Module ( registryEntry . exports ) ;
670+ if ( Object . preventExtensions )
671+ Object . preventExtensions ( module ) ;
672+ load . status = 'linked' ;
657673 }
658674
659675
@@ -682,7 +698,7 @@ function logloads(loads) {
682698
683699 // 15.2.6.2 EnsureEvaluated adjusted
684700 function ensureEvaluated ( module , seen , loader ) {
685- if ( module . evaluated )
701+ if ( module . evaluated || ! module . dependencies )
686702 return ;
687703
688704 seen . push ( module ) ;
@@ -778,11 +794,13 @@ function logloads(loads) {
778794 'import' : function ( name , options ) {
779795 // run normalize first
780796 var loaderObj = this ;
797+
781798 return new Promise ( function ( resolve ) {
782799 resolve ( loaderObj . normalize . call ( this , name , options && options . name , options && options . address ) )
783800 } )
784801 . then ( function ( name ) {
785802 var loader = loaderObj . _loader ;
803+
786804 if ( loader . modules [ name ] ) {
787805 ensureEvaluated ( loader . modules [ name ] , [ ] , loader . _loader ) ;
788806 return Promise . resolve ( loader . modules [ name ] . module ) ;
@@ -808,7 +826,7 @@ function logloads(loads) {
808826 return ! ! this . _loader . modules [ name ] ;
809827 } ,
810828 set : function ( name , module ) {
811- if ( ! ( module instanceof Module ) )
829+ if ( ! ( module . __esModule ) )
812830 throw new TypeError ( 'Set must be a module' ) ;
813831 this . _loader . modules [ name ] = {
814832 module : module
@@ -891,10 +909,10 @@ function logloads(loads) {
891909 if ( typeof obj != 'object' )
892910 throw new TypeError ( 'Expected object' ) ;
893911
894- if ( ! ( this instanceof Module ) )
895- return new Module ( obj ) ;
912+ var self = {
913+ __esModule : true
914+ } ;
896915
897- var self = this ;
898916 for ( var key in obj ) {
899917 ( function ( key ) {
900918 defineProperty ( self , key , {
@@ -906,10 +924,12 @@ function logloads(loads) {
906924 } ) ;
907925 } ) ( key ) ;
908926 }
909- if ( Object . preventExtensions )
927+ // allow extensibilty to be switched off for gradual binding process
928+ if ( ! arguments [ 1 ] && Object . preventExtensions )
910929 Object . preventExtensions ( this ) ;
930+
931+ return self ;
911932 }
912- // Module.prototype = null;
913933
914934
915935 if ( typeof exports === 'object' )
@@ -923,14 +943,7 @@ function logloads(loads) {
923943 } ) ( ) ;
924944
925945 function __eval ( __source , global , __moduleName ) {
926- try {
927- eval ( 'var __moduleName = "' + ( __moduleName || '' ) . replace ( '"' , '\"' ) + '"; with(global) { (function() { ' + __source + ' \n }).call(global); }' ) ;
928- }
929- catch ( e ) {
930- if ( e . name == 'SyntaxError' )
931- e . message = 'Evaluating ' + ( __sourceURL || __moduleName ) + '\n\t' + e . message ;
932- throw e ;
933- }
946+ eval ( 'var __moduleName = "' + ( __moduleName || '' ) . replace ( '"' , '\"' ) + '"; with(global) { (function() { ' + __source + ' \n }).call(global); }' ) ;
934947 }
935948
936949} ) ( typeof global !== 'undefined' ? global : this ) ;
0 commit comments