aboutsummaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/js-optimizer.js33
-rw-r--r--tools/scons/site_scons/site_tools/emscripten/__init__.py3
-rw-r--r--tools/scons/site_scons/site_tools/emscripten/emscripten.py44
3 files changed, 63 insertions, 17 deletions
diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js
index a0595b88..213e2257 100644
--- a/tools/js-optimizer.js
+++ b/tools/js-optimizer.js
@@ -15,6 +15,7 @@ var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIR
if (ENVIRONMENT_IS_NODE) {
// Expose functionality in the same simple way that the shells work
+ // Note that we pollute the global namespace here, otherwise we break in node
print = function(x) {
process['stdout'].write(x + '\n');
};
@@ -33,12 +34,16 @@ if (ENVIRONMENT_IS_NODE) {
return ret;
};
+ load = function(f) {
+ globalEval(read(f));
+ };
+
arguments_ = process['argv'].slice(2);
} else if (ENVIRONMENT_IS_SHELL) {
// Polyfill over SpiderMonkey/V8 differences
if (!this['read']) {
- read = function(f) { snarf(f) };
+ this['read'] = function(f) { snarf(f) };
}
if (!this['arguments']) {
@@ -48,11 +53,11 @@ if (ENVIRONMENT_IS_NODE) {
}
} else if (ENVIRONMENT_IS_WEB) {
- print = printErr = function(x) {
+ this['print'] = printErr = function(x) {
console.log(x);
};
- read = function(url) {
+ this['read'] = function(url) {
var xhr = new XMLHttpRequest();
xhr.open('GET', url, false);
xhr.send(null);
@@ -65,7 +70,7 @@ if (ENVIRONMENT_IS_NODE) {
} else if (ENVIRONMENT_IS_WORKER) {
// We can do very little here...
- load = importScripts;
+ this['load'] = importScripts;
} else {
throw 'Unknown runtime environment. Where are we?';
@@ -76,17 +81,17 @@ function globalEval(x) {
}
if (typeof load == 'undefined' && typeof read != 'undefined') {
- load = function(f) {
+ this['load'] = function(f) {
globalEval(read(f));
};
}
if (typeof printErr === 'undefined') {
- printErr = function(){};
+ this['printErr'] = function(){};
}
if (typeof print === 'undefined') {
- print = printErr;
+ this['print'] = printErr;
}
// *** Environment setup code ***
@@ -576,16 +581,10 @@ function optimizeShiftsInternal(ast, conservative) {
var name = node[2][1];
var data = vars[name];
var parent = stack[stack.length-3];
- var parentIndex;
- if (parent[0] == 'defun') {
- parentIndex = 3;
- } else if (parent[0] == 'block') {
- parentIndex = 1;
- } else {
- throw 'Invalid parent for assign-shift: ' + dump(parent);
- }
- var i = parent[parentIndex].indexOf(stack[stack.length-2]);
- parent[parentIndex].splice(i+1, 0, ['stat', ['assign', true, ['name', name + '$s' + data.primaryShift], ['binary', '>>', ['name', name, true], ['num', data.primaryShift]]]]);
+ var statements = getStatements(parent);
+ assert(statements, 'Invalid parent for assign-shift: ' + dump(parent));
+ var i = statements.indexOf(stack[stack.length-2]);
+ statements.splice(i+1, 0, ['stat', ['assign', true, ['name', name + '$s' + data.primaryShift], ['binary', '>>', ['name', name, true], ['num', data.primaryShift]]]]);
} else if (node[0] == 'var') {
var args = node[1];
for (var i = 0; i < args.length; i++) {
diff --git a/tools/scons/site_scons/site_tools/emscripten/__init__.py b/tools/scons/site_scons/site_tools/emscripten/__init__.py
new file mode 100644
index 00000000..8ae2288e
--- /dev/null
+++ b/tools/scons/site_scons/site_tools/emscripten/__init__.py
@@ -0,0 +1,3 @@
+#!/usr/bin/env python
+
+from emscripten import exists, generate
diff --git a/tools/scons/site_scons/site_tools/emscripten/emscripten.py b/tools/scons/site_scons/site_tools/emscripten/emscripten.py
new file mode 100644
index 00000000..cb14b58e
--- /dev/null
+++ b/tools/scons/site_scons/site_tools/emscripten/emscripten.py
@@ -0,0 +1,44 @@
+#!/usr/bin/env python
+
+import os
+
+def generate(env, emscripten_path=None, **kw):
+ """ SCons tool entry point """
+
+ if emscripten_path is None:
+ # Try to find emscripten
+ # Use same method as Emscripten's shared.py
+ EM_CONFIG = os.environ.get('EM_CONFIG')
+ if not EM_CONFIG:
+ EM_CONFIG = '~/.emscripten'
+
+ CONFIG_FILE = os.path.expanduser(EM_CONFIG)
+ try:
+ exec(open(CONFIG_FILE, 'r').read())
+ except Exception, e:
+ print >> sys.stderr, 'Error in evaluating %s (at %s): %s' % (EM_CONFIG, CONFIG_FILE, str(e))
+ sys.exit(1)
+
+ emscripten_path = EMSCRIPTEN_ROOT
+
+ try:
+ emscPath = emscripten_path.abspath
+ except:
+ emscPath = emscripten_path
+
+ env.Replace(CC = os.path.join(emscPath, "emcc" ))
+ env.Replace(CXX = os.path.join(emscPath, "em++" ))
+ env.Replace(LINK = os.path.join(emscPath, "emld" ))
+ # SHLINK and LDMODULE should use LINK so no
+ # need to change them here
+
+ env.Replace(AR = os.path.join(emscPath, "emar" ))
+ env.Replace(RANLIB = os.path.join(emscPath, "emranlib"))
+
+ env.Replace(OBJSUFFIX = [".js", ".bc", ".o"][2])
+ env.Replace(LIBSUFFIX = [".js", ".bc", ".o"][2])
+ env.Replace(PROGSUFFIX = [".html", ".js" ][1])
+
+def exists(env):
+ """ NOOP method required by SCons """
+ return 1