Skip to content
This repository was archived by the owner on Jul 13, 2020. It is now read-only.

Commit aea4514

Browse files
committed
circular and rebinding test completion
1 parent 98563d7 commit aea4514

10 files changed

Lines changed: 268 additions & 260 deletions

dist/es6-module-loader-sans-promises.js

Lines changed: 98 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,9 @@ function logloads(loads) {
5151
return log;
5252
} */
5353

54-
(function (global) {
54+
(function (__global) {
5555
(function() {
56-
var Promise = global.Promise || require('es6-promise').Promise;
56+
var Promise = __global.Promise || require('es6-promise').Promise;
5757

5858
var traceur;
5959

@@ -210,55 +210,66 @@ function logloads(loads) {
210210

211211
var depsList;
212212
if (instantiateResult === undefined) {
213-
if (!global.traceur)
213+
if (!__global.traceur)
214214
throw new TypeError('Include Traceur for module syntax support');
215215

216-
traceur = traceur || global.traceur;
216+
traceur = traceur || __global.traceur;
217217
load.address = load.address || 'anon' + ++anonCnt;
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,33 +595,30 @@ 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

590-
<<<<<<< HEAD
591-
for (var i = 0; i < loads.length; i++) {
592-
var load = loads[i];
593-
if (load.kind == 'declarative') {
594-
// To Support Circular references:
595-
// parse the body to read out the export values
596-
// use these export values to create a module shell
597-
// create an empty underlying exports object to be populated
598-
=======
599602
// declare the module with an empty depMap
600-
var depMap = {};
601-
var sys = global.System;
602-
global.System = loader;
603-
var registryEntry = load.declare.call(global, depMap);
603+
var depMap = [];
604+
var sys = __global.System;
605+
__global.System = loader;
606+
var registryEntry = load.declare.call(__global, depMap);
604607

605-
global.System = sys;
606-
>>>>>>> circular references support
608+
__global.System = sys;
607609

608610
var moduleDependencies = [];
609611

612+
// module is just a plain object, until we evaluate it
613+
var module = registryEntry.exports;
614+
615+
console.assert(!load.module, 'Load module already declared!');
616+
610617
load.module = {
611618
name: load.name,
612619
dependencies: moduleDependencies,
613620
execute: registryEntry.execute,
621+
exports: module,
614622
evaluated: false
615623
};
616624

@@ -629,41 +637,38 @@ function logloads(loads) {
629637
if (loads[j].name != depName)
630638
continue;
631639

632-
// link if already not already linked (stops at circular)
633-
if (!loads[j].module)
634-
linkDeclarativeModule(loads[j], loads, loader);
640+
linkDeclarativeModule(loads[j], loads, loader);
635641

636-
depModule = loads[j].module;
642+
depModule = loads[j].exports || loads[j].module;
637643
}
638644
}
639645

640-
var depModuleModule = depModule.module;
646+
console.assert(depModule, 'Dependency module not found!');
647+
console.assert(depModule.exports, 'Dependency module not found!');
641648

642649
if (registryEntry.exportStar && indexOf.call(registryEntry.exportStar, load.dependencies[i].key) != -1) {
643650
// we are exporting * from this dependency
644-
for (var p in depModule.module) (function(p) {
645-
// if the property is already defined throw?
646-
defineProperty(registryEntry.exports, p, {
647-
enumerable: true,
648-
get: function() {
649-
return depModuleModule[p];
650-
},
651-
set: function(value) {
652-
depModuleModule[p] = value;
653-
}
654-
});
655-
})(p);
651+
(function(depModuleModule) {
652+
for (var p in depModuleModule) (function(p) {
653+
// if the property is already defined throw?
654+
defineProperty(module, p, {
655+
enumerable: true,
656+
get: function() {
657+
return depModuleModule[p];
658+
},
659+
set: function(value) {
660+
depModuleModule[p] = value;
661+
}
662+
});
663+
})(p);
664+
})(depModule.exports);
656665
}
657666

658-
console.assert(depModule, 'Dependency module not found!');
659-
console.assert(depModuleModule, 'Dependency module not found!');
660-
661667
moduleDependencies.push(depModule);
662-
depMap[load.dependencies[i].key] = depModuleModule;
668+
depMap[i] = depModule.exports;
663669
}
664670

665-
// at this point we define the module object
666-
load.module.module = Module(registryEntry.exports);
671+
load.status = 'linked';
667672
}
668673

669674

@@ -692,7 +697,7 @@ function logloads(loads) {
692697

693698
// 15.2.6.2 EnsureEvaluated adjusted
694699
function ensureEvaluated(module, seen, loader) {
695-
if (module.evaluated)
700+
if (module.evaluated || !module.dependencies)
696701
return;
697702

698703
seen.push(module);
@@ -709,7 +714,8 @@ function logloads(loads) {
709714
return;
710715

711716
module.evaluated = true;
712-
module.execute.call(global);
717+
module.execute.call(__global);
718+
module.module = Module(module.exports);
713719
delete module.execute;
714720
}
715721

@@ -788,11 +794,13 @@ function logloads(loads) {
788794
'import': function(name, options) {
789795
// run normalize first
790796
var loaderObj = this;
797+
791798
return new Promise(function(resolve) {
792799
resolve(loaderObj.normalize.call(this, name, options && options.name, options && options.address))
793800
})
794801
.then(function(name) {
795802
var loader = loaderObj._loader;
803+
796804
if (loader.modules[name]) {
797805
ensureEvaluated(loader.modules[name], [], loader._loader);
798806
return Promise.resolve(loader.modules[name].module);
@@ -818,7 +826,7 @@ function logloads(loads) {
818826
return !!this._loader.modules[name];
819827
},
820828
set: function(name, module) {
821-
if (!(module instanceof Module))
829+
if (!(module.__esModule))
822830
throw new TypeError('Set must be a module');
823831
this._loader.modules[name] = {
824832
module: module
@@ -901,10 +909,10 @@ function logloads(loads) {
901909
if (typeof obj != 'object')
902910
throw new TypeError('Expected object');
903911

904-
if (!(this instanceof Module))
905-
return new Module(obj);
912+
var self = {
913+
__esModule: true
914+
};
906915

907-
var self = this;
908916
for (var key in obj) {
909917
(function (key) {
910918
defineProperty(self, key, {
@@ -916,31 +924,26 @@ function logloads(loads) {
916924
});
917925
})(key);
918926
}
927+
919928
if (Object.preventExtensions)
920-
Object.preventExtensions(this);
929+
Object.preventExtensions(self);
930+
931+
return self;
921932
}
922-
// Module.prototype = null;
923933

924934

925935
if (typeof exports === 'object')
926936
module.exports = Loader;
927937

928-
global.Reflect = global.Reflect || {};
929-
global.Reflect.Loader = global.Reflect.Loader || Loader;
930-
global.LoaderPolyfill = Loader;
931-
global.Module = Module;
938+
__global.Reflect = __global.Reflect || {};
939+
__global.Reflect.Loader = __global.Reflect.Loader || Loader;
940+
__global.LoaderPolyfill = Loader;
941+
__global.Module = Module;
932942

933943
})();
934944

935-
function __eval(__source, global, __moduleName) {
936-
try {
937-
eval('var __moduleName = "' + (__moduleName || '').replace('"', '\"') + '"; with(global) { (function() { ' + __source + ' \n }).call(global); }');
938-
}
939-
catch(e) {
940-
if (e.name == 'SyntaxError')
941-
e.message = 'Evaluating ' + (__sourceURL || __moduleName) + '\n\t' + e.message;
942-
throw e;
943-
}
945+
function __eval(__source, __global, __moduleName) {
946+
eval('var __moduleName = "' + (__moduleName || '').replace('"', '\"') + '"; with(__global) { (function() { ' + __source + ' \n }).call(__global); }');
944947
}
945948

946949
})(typeof global !== 'undefined' ? global : this);

0 commit comments

Comments
 (0)