Skip to content

Commit

Permalink
Merge remote-tracking branch 'cscott/for-olov'
Browse files Browse the repository at this point in the history
  • Loading branch information
olov committed Apr 21, 2012
2 parents acb5fc1 + 5bf5a12 commit 573c5a6
Show file tree
Hide file tree
Showing 50 changed files with 12,612 additions and 152 deletions.
2 changes: 1 addition & 1 deletion build/.gitignore
@@ -1,5 +1,5 @@
all-build-restricter-ceremony.js
all-narcissus.js
all-restricter-eval.js
all-restricter-checked-bootstrapped.js
all-restricter-checked-repeated.js
all-restricter-checked.js
Expand Down
277 changes: 277 additions & 0 deletions build/almond.js
@@ -0,0 +1,277 @@
/**
* almond 0.0.3 Copyright (c) 2011, The Dojo Foundation All Rights Reserved.
* Available via the MIT or new BSD license.
* see: http://github.com/jrburke/almond for details
*/
/*jslint strict: false, plusplus: false */
/*global setTimeout: false */

var requirejs, require, define;
(function (undef) {

var defined = {},
waiting = {},
aps = [].slice,
main, req;

if (typeof define === "function") {
//If a define is already in play via another AMD loader,
//do not overwrite.
return;
}

/**
* Given a relative module name, like ./something, normalize it to
* a real name that can be mapped to a path.
* @param {String} name the relative name
* @param {String} baseName a real name that the name arg is relative
* to.
* @returns {String} normalized name
*/
function normalize(name, baseName) {
//Adjust any relative paths.
if (name && name.charAt(0) === ".") {
//If have a base name, try to normalize against it,
//otherwise, assume it is a top-level require that will
//be relative to baseUrl in the end.
if (baseName) {
//Convert baseName to array, and lop off the last part,
//so that . matches that "directory" and not name of the baseName's
//module. For instance, baseName of "one/two/three", maps to
//"one/two/three.js", but we want the directory, "one/two" for
//this normalization.
baseName = baseName.split("/");
baseName = baseName.slice(0, baseName.length - 1);

name = baseName.concat(name.split("/"));

//start trimDots
var i, part;
for (i = 0; (part = name[i]); i++) {
if (part === ".") {
name.splice(i, 1);
i -= 1;
} else if (part === "..") {
if (i === 1 && (name[2] === '..' || name[0] === '..')) {
//End of the line. Keep at least one non-dot
//path segment at the front so it can be mapped
//correctly to disk. Otherwise, there is likely
//no path mapping for a path starting with '..'.
//This can still fail, but catches the most reasonable
//uses of ..
break;
} else if (i > 0) {
name.splice(i - 1, 2);
i -= 2;
}
}
}
//end trimDots

name = name.join("/");
}
}
return name;
}

function makeRequire(relName, forceSync) {
return function () {
//A version of a require function that passes a moduleName
//value for items that may need to
//look up paths relative to the moduleName
return req.apply(undef, aps.call(arguments, 0).concat([relName, forceSync]));
};
}

function makeNormalize(relName) {
return function (name) {
return normalize(name, relName);
};
}

function makeLoad(depName) {
return function (value) {
defined[depName] = value;
};
}

function callDep(name) {
if (waiting.hasOwnProperty(name)) {
var args = waiting[name];
delete waiting[name];
main.apply(undef, args);
}
return defined[name];
}

/**
* Makes a name map, normalizing the name, and using a plugin
* for normalization if necessary. Grabs a ref to plugin
* too, as an optimization.
*/
function makeMap(name, relName) {
var prefix, plugin,
index = name.indexOf('!');

if (index !== -1) {
prefix = normalize(name.slice(0, index), relName);
name = name.slice(index + 1);
plugin = callDep(prefix);

//Normalize according
if (plugin && plugin.normalize) {
name = plugin.normalize(name, makeNormalize(relName));
} else {
name = normalize(name, relName);
}
} else {
name = normalize(name, relName);
}

//Using ridiculous property names for space reasons
return {
f: prefix ? prefix + '!' + name : name, //fullName
n: name,
p: plugin
};
}

main = function (name, deps, callback, relName) {
var args = [],
usingExports,
cjsModule, depName, i, ret, map;

//Use name if no relName
if (!relName) {
relName = name;
}

//Call the callback to define the module, if necessary.
if (typeof callback === 'function') {

//Default to require, exports, module if no deps if
//the factory arg has any arguments specified.
if (!deps.length && callback.length) {
deps = ['require', 'exports', 'module'];
}

//Pull out the defined dependencies and pass the ordered
//values to the callback.
for (i = 0; i < deps.length; i++) {
map = makeMap(deps[i], relName);
depName = map.f;

//Fast path CommonJS standard dependencies.
if (depName === "require") {
args[i] = makeRequire(name);
} else if (depName === "exports") {
//CommonJS module spec 1.1
args[i] = defined[name] = {};
usingExports = true;
} else if (depName === "module") {
//CommonJS module spec 1.1
cjsModule = args[i] = {
id: name,
uri: '',
exports: defined[name]
};
} else if (defined.hasOwnProperty(depName) || waiting.hasOwnProperty(depName)) {
args[i] = callDep(depName);
} else if (map.p) {
map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});
args[i] = defined[depName];
} else {
throw name + ' missing ' + depName;
}
}

ret = callback.apply(defined[name], args);

if (name) {
//If setting exports via "module" is in play,
//favor that over return value and exports. After that,
//favor a non-undefined return value over exports use.
if (cjsModule && cjsModule.exports !== undef) {
defined[name] = cjsModule.exports;
} else if (!usingExports) {
//Use the return value from the function.
defined[name] = ret;
}
}
} else if (name) {
//May just be an object definition for the module. Only
//worry about defining if have a module name.
defined[name] = callback;
}
};

requirejs = req = function (deps, callback, relName, forceSync) {
if (typeof deps === "string") {

//Just return the module wanted. In this scenario, the
//deps arg is the module name, and second arg (if passed)
//is just the relName.
//Normalize module name, if it contains . or ..
return callDep(makeMap(deps, callback).f);
} else if (!deps.splice) {
//deps is a config object, not an array.
//Drop the config stuff on the ground.
if (callback.splice) {
//callback is an array, which means it is a dependency list.
//Adjust args if there are dependencies
deps = callback;
callback = arguments[2];
} else {
deps = [];
}
}

//Simulate async callback;
if (forceSync) {
main(undef, deps, callback, relName);
} else {
setTimeout(function () {
main(undef, deps, callback, relName);
}, 15);
}

return req;
};

/**
* Just drops the config on the floor, but returns req in case
* the config return value is used.
*/
req.config = function () {
return req;
};

/**
* Export require as a global, but only if it does not already exist.
*/
if (!require) {
require = req;
}

define = function (name, deps, callback) {

//This module may not have dependencies
if (!deps.splice) {
//deps is not an array, so probably means
//an object literal or factory function for
//the value. Adjust args.
callback = deps;
deps = [];
}

if (define.unordered) {
waiting[name] = [name, deps, callback];
} else {
main(name, deps, callback);
}
};

define.amd = {
jQuery: true
};
}());
2 changes: 2 additions & 0 deletions build/build-restricter-ceremony.js
@@ -1,3 +1,4 @@
define('build-restricter', ['./shaper', 'plugins/restricter'], function(Shaper,_) {
//var load, require = require || function(f) { load(f); };
// run with d8
var filename = "../build/all-restricter.js";
Expand All @@ -7,3 +8,4 @@ var read = read || typeof readFile !== "undefined" && readFile || require("fs").
var src = read(filename);
var root = Shaper.parseScript(src, filename);
Shaper.run(root, ["annotater", "restricter", "source"]);
});
14 changes: 10 additions & 4 deletions build/build-restricter.sh
@@ -1,4 +1,6 @@
#!/bin/sh
# should be run from jsshaper/src

# pick d8 or node
if test -z "$JS" ; then
JS=d8
Expand All @@ -11,15 +13,19 @@ if ! which $JS > /dev/null ; then
exit 1
fi
# concatenate parts of narcissus into all-narcissus.js
cat jsecma5.js narcissus/lib/jsdefs.js jsmods.js narcissus/lib/jslex.js narcissus/lib/jsparse.js > ../build/all-narcissus.js
# concatenate shaper and restricter into all-restricter.js
cat fmt.js ref.js log.js assert.js comments.js shaper.js plugins/annotater.js plugins/restricter.js > ../build/all-restricter.js
node node_modules/r.js -o name=../build/almond.js include=plugins/restricter out=../build/all-restricter-eval.js baseUrl=. optimize=none
# de-eval-ify so it runs right in strict mode.
${JS} run-shaper.js ../build/all-restricter-eval.js plugins/deeval.js --source > ../build/all-restricter.js
# let restricter create a checked version of itself (all-restricter-checked.js)
${JS} run-restricter.js -- ../build/all-restricter.js > ../build/all-restricter-checked.js
# let restricter create a checked version of all-restricter-checked.js
# (should be identical)
${JS} run-restricter.js -- ../build/all-restricter-checked.js > ../build/all-restricter-checked-repeated.js
diff -u ../build/all-restricter-checked.js ../build/all-restricter-checked-repeated.js

# let all-restricter-checked create a checked version of all-restricter
# (should be identical apart from extra trailing newline due to print)
cat ../build/all-narcissus.js plugins/restricter/restrict-mode.js ../build/all-restricter-checked.js ../build/build-restricter-ceremony.js > ../build/all-build-restricter-ceremony.js
cat plugins/restricter/restrict-mode.js ../build/all-restricter-checked.js ../build/build-restricter-ceremony.js > ../build/all-build-restricter-ceremony.js
${JS} ../build/all-build-restricter-ceremony.js > ../build/all-restricter-checked-bootstrapped.js

diff -u ../build/all-restricter-checked.js ../build/all-restricter-checked-bootstrapped.js
12 changes: 5 additions & 7 deletions src/assert.js
@@ -1,6 +1,8 @@
"use strict"; "use restrict";
if (typeof define !== 'function') { var define = require('amdefine')(module); }

define([], function() {
"use strict"; "use restrict";

var Assert = (function() {
var printfn = (typeof console !== "undefined") && console.log || print;
function assert(condition, var_args) {
condition ? assert.pass(arguments) : assert.fail(arguments);
Expand Down Expand Up @@ -29,8 +31,4 @@ var Assert = (function() {
};

return assert;
})();

if (typeof exports !== "undefined") {
module.exports = Assert;
}
});
21 changes: 18 additions & 3 deletions src/bootstrap-shaper.sh
@@ -1,28 +1,43 @@
#!/bin/sh
# should be run from jsshaper/src

# pick d8 or node
if test -z "$JS" ; then
JS=d8
fi
if ! which $JS > /dev/null ; then
JS=node
fi
if ! which $JS > /dev/null ; then
echo "Can't find d8 or node on the path. Please set JS to your JavaScript shell."
exit 1
fi
PIPELINE="plugins/annotater.js plugins/restricter.js plugins/bitwiser.js plugins/asserter.js plugins/logger.js --source"
OUT="../src.shaped"
VM="js -m"
VM="$JS"
mkdir -p $OUT/plugins $OUT/tests $OUT/plugins/restricter $OUT/plugins/watcher
cp -rf narcissus $OUT/narcissus
cp bootstrap-shaper.sh $OUT/bootstrap-shaper.sh
$VM run-shaper.js -- assert.js $PIPELINE > $OUT/assert.js
$VM run-shaper.js -- comments.js $PIPELINE > $OUT/comments.js
$VM run-shaper.js -- fmt.js $PIPELINE > $OUT/fmt.js
$VM run-shaper.js -- jsecma5.js $PIPELINE > $OUT/jsecma5.js
$VM run-shaper.js -- jsmods.js $PIPELINE > $OUT/jsmods.js
$VM run-shaper.js -- log.js $PIPELINE > $OUT/log.js
$VM run-shaper.js -- narcissus.js $PIPELINE > $OUT/narcissus.js
$VM run-shaper.js -- ref.js $PIPELINE > $OUT/ref.js
$VM run-shaper.js -- run-restricter.js $PIPELINE > $OUT/run-restricter.js
$VM run-shaper.js -- run-shaper.js $PIPELINE > $OUT/run-shaper.js
$VM run-shaper.js -- shaper.js $PIPELINE > $OUT/shaper.js
$VM run-shaper.js -- tkn.js $PIPELINE > $OUT/tkn.js
$VM run-shaper.js -- plugins/annotater.js $PIPELINE > $OUT/plugins/annotater.js
$VM run-shaper.js -- plugins/annotation-printer.js $PIPELINE > $OUT/plugins/annotation-printer.js
$VM run-shaper.js -- plugins/asserter.js $PIPELINE > $OUT/plugins/asserter.js
$VM run-shaper.js -- plugins/bitwiser.js $PIPELINE > $OUT/plugins/bitwiser.js
$VM run-shaper.js -- plugins/deeval.js $PIPELINE > $OUT/plugins/deeval.js
$VM run-shaper.js -- plugins/logger.js $PIPELINE > $OUT/plugins/logger.js
$VM run-shaper.js -- plugins/restricter.js $PIPELINE > $OUT/plugins/restricter.js
$VM run-shaper.js -- plugins/restricter/restrict-mode.js $PIPELINE > $OUT/plugins/restricter/restrict-mode.js
$VM run-shaper.js -- plugins/stringconverter.js $PIPELINE > $OUT/plugins/stringconverter.js
$VM run-shaper.js -- plugins/watcher.js $PIPELINE > $OUT/plugins/watcher.js
$VM run-shaper.js -- plugins/watcher/watcher.js $PIPELINE > $OUT/plugins/watcher/watcher.js
$VM run-shaper.js -- plugins/watcher/watch.js $PIPELINE > $OUT/plugins/watcher/watch.js
$VM run-shaper.js -- tests/match.js $PIPELINE > $OUT/tests/match.js

0 comments on commit 573c5a6

Please sign in to comment.