Skip to content

Commit

Permalink
prevent some common JIT issues
Browse files Browse the repository at this point in the history
* keep shapes stable when possible
* prime with common scenarios
  • Loading branch information
stefanpenner committed Apr 15, 2016
1 parent a4ce9be commit 5f736c5
Showing 1 changed file with 26 additions and 5 deletions.
31 changes: 26 additions & 5 deletions lib/loader/loader.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ var loader, define, requireModule, require, requirejs;

var defaultDeps = ['require', 'exports', 'module'];

function Module(name, deps, callback) {
function Module(name, deps, callback, alias) {
this.id = uuid++;
this.name = name;
this.deps = !deps.length && callback.length ? defaultDeps : deps;
Expand All @@ -62,6 +62,7 @@ var loader, define, requireModule, require, requirejs;
this._require = undefined;
this.finalized = false;
this.hasExportsAsDep = false;
this.isAlias = alias;
}

Module.prototype.makeDefaultExport = function() {
Expand Down Expand Up @@ -144,7 +145,11 @@ var loader, define, requireModule, require, requirejs;
deps = [];
}

registry[name] = new Module(name, deps, callback);
if (callback instanceof Alias) {
registry[name] = new Module(callback.name, deps, callback, true);
} else {
registry[name] = new Module(name, deps, callback, false);
}
};

// we don't support all of AMD
Expand All @@ -171,9 +176,8 @@ var loader, define, requireModule, require, requirejs;
function findModule(name, referrer) {
var mod = registry[name] || registry[name + '/index'];

while (mod && mod.callback instanceof Alias) {
name = mod.callback.name;
mod = registry[name];
while (mod && mod.isAlias) {
mod = registry[mod.name];
}

if (!mod) { missingModule(name, referrer); }
Expand Down Expand Up @@ -214,4 +218,21 @@ var loader, define, requireModule, require, requirejs;
requirejs.entries = requirejs._eak_seen = registry = {};
seen = {};
};

// prime
define('foo', function() {});
define('foo/bar', [], function() {});
define('foo/asdf', ['module', 'exports', 'require'], function(module, exports, require) {
require('foo/bar');
});
define('foo/baz', [], define.alias('foo'));
define('foo/quz', define.alias('foo'));
define('foo/bar', ['foo', './quz', './baz', './asdf', './bar', '../foo'], function() {});
define('foo/main', ['foo/bar'], function() {});

require('foo/main');
require.unsee('foo/bar');

requirejs.clear();

})(this);

0 comments on commit 5f736c5

Please # to comment.