aboutsummaryrefslogtreecommitdiff
path: root/src/runtime.js
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2012-04-20 18:13:03 -0700
committerAlon Zakai <alonzakai@gmail.com>2012-04-20 18:13:03 -0700
commit45bcf3ad360c950765db789bdd54d111d044ffc5 (patch)
tree13ca2b7b7c88165e9f191cde549f883f420d633f /src/runtime.js
parent410a632a1888bde9b78d574aa682f4dc48fb488f (diff)
make library and gl debug configurable at runtime, and share the pretty printing code
Diffstat (limited to 'src/runtime.js')
-rw-r--r--src/runtime.js52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/runtime.js b/src/runtime.js
index 0e4b7b2d..fe6481f5 100644
--- a/src/runtime.js
+++ b/src/runtime.js
@@ -313,7 +313,59 @@ var Runtime = {
FUNCTION_TABLE.push(func);
FUNCTION_TABLE.push(0);
return ret;
+ },
+
+#if RUNTIME_DEBUG
+ debug: false, // Switch to true at runtime to enable logging at the right times
+
+ printObjectMap: null,
+ printObjectCounter: 1,
+
+ prettyPrint: function(arg) {
+ if (!Runtime.printObjectMap) Runtime.printObjectMap = new WeakMap();
+ if (typeof arg == 'undefined') return '!UNDEFINED!';
+ if (!arg) return arg;
+ if (Runtime.printObjectMap[arg]) return '<' + arg + '|' + Runtime.printObjectMap[arg] + '>';
+ if (arg.toString() == '[object HTMLImageElement]') {
+ return arg + '\n\n';
+ }
+ if (arg.byteLength) {
+ return '{' + Array.prototype.slice.call(arg, 0, Math.min(arg.length, 40)) + '}'; // Useful for correct arrays, less so for compiled arrays, see the code below for that
+ var buf = new ArrayBuffer(32);
+ var i8buf = new Int8Array(buf);
+ var i16buf = new Int16Array(buf);
+ var f32buf = new Float32Array(buf);
+ switch(arg.toString()) {
+ case '[object Uint8Array]':
+ i8buf.set(arg.subarray(0, 32));
+ break;
+ case '[object Float32Array]':
+ f32buf.set(arg.subarray(0, 5));
+ break;
+ case '[object Uint16Array]':
+ i16buf.set(arg.subarray(0, 16));
+ break;
+ default:
+ alert('unknown array for debugging: ' + arg);
+ throw 'see alert';
+ }
+ var ret = '{' + arg.byteLength + ':\n';
+ var arr = Array.prototype.slice.call(i8buf);
+ ret += 'i8:' + arr.toString().replace(/,/g, ',') + '\n';
+ arr = Array.prototype.slice.call(f32buf, 0, 8);
+ ret += 'f32:' + arr.toString().replace(/,/g, ',') + '}';
+ return ret;
+ }
+ if (typeof arg == 'object') {
+ Runtime.printObjectMap[arg] = Runtime.printObjectCounter++;
+ return '<' + arg + '|' + Runtime.printObjectMap[arg] + '>';
+ }
+ if (typeof arg == 'number') {
+ return '0x' + arg.toString(16);
+ }
+ return arg;
}
+#endif
};
Runtime.stackAlloc = unInline('stackAlloc', ['size']);