diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/library.js | 14 | ||||
-rw-r--r-- | src/library_browser.js | 23 | ||||
-rw-r--r-- | src/library_glut.js | 28 | ||||
-rw-r--r-- | src/library_sdl.js | 6 | ||||
-rw-r--r-- | src/preamble.js | 14 | ||||
-rw-r--r-- | src/runtime.js | 19 |
6 files changed, 63 insertions, 41 deletions
diff --git a/src/library.js b/src/library.js index 8e89305e..b5cb3024 100644 --- a/src/library.js +++ b/src/library.js @@ -3617,7 +3617,9 @@ LibraryManager.library = { }, bsearch: function(key, base, num, size, compar) { - var cmp = {{{ Functions.getTable('iii') }}}[compar]; + var cmp = function(x, y) { + return Runtime.dynCall('iii', compar, [x, y]) + }; var left = 0; var right = num; var mid, test, addr; @@ -3859,7 +3861,9 @@ LibraryManager.library = { if (num == 0 || size == 0) return; // forward calls to the JavaScript sort method // first, sort the items logically - comparator = {{{ Functions.getTable('iii') }}}[comparator]; + comparator = function(x, y) { + return Runtime.dynCall('iii', comparator, [x, y]); + } var keys = []; for (var i = 0; i < num; i++) keys.push(i); keys.sort(function(a, b) { @@ -4852,7 +4856,7 @@ LibraryManager.library = { var ptr = {{{ makeGetValue('_llvm_eh_exception.buf', '0', 'void*') }}}; var destructor = {{{ makeGetValue('_llvm_eh_exception.buf', 2 * QUANTUM_SIZE, 'void*') }}}; if (destructor) { - {{{ Functions.getTable('vi') }}}[destructor](ptr); + Runtime.dynCall('vi', destructor, [ptr]); {{{ makeSetValue('_llvm_eh_exception.buf', 2 * QUANTUM_SIZE, '0', 'i32') }}} } // Free ptr if it isn't null. @@ -6491,7 +6495,7 @@ LibraryManager.library = { pthread_once: function(ptr, func) { if (!_pthread_once.seen) _pthread_once.seen = {}; if (ptr in _pthread_once.seen) return; - {{{ Functions.getTable('v') }}}[func](); + Runtime.dynCall('v', func); _pthread_once.seen[ptr] = 1; }, @@ -6509,7 +6513,7 @@ LibraryManager.library = { }, pthread_cleanup_push: function(routine, arg) { - __ATEXIT__.push({ func: function() { {{{ Functions.getTable('vi') }}}[routine](arg) } }) + __ATEXIT__.push({ func: function() { Runtime.dynCall('vi', routine, [arg]) } }) _pthread_cleanup_push.level = __ATEXIT__.length; }, diff --git a/src/library_browser.js b/src/library_browser.js index c9c37491..21bad254 100644 --- a/src/library_browser.js +++ b/src/library_browser.js @@ -377,10 +377,10 @@ mergeInto(LibraryManager.library, { _file.substr(index +1), _url, true, true, function() { - if (onload) {{{ Functions.getTable('vi') }}}[onload](file); + if (onload) Runtime.dynCall('vi', onload, [file]); }, function() { - if (onerror) {{{ Functions.getTable('vi') }}}[onerror](file); + if (onerror) Runtime.dynCall('vi', onerror, [file]); } ); }, @@ -395,10 +395,10 @@ mergeInto(LibraryManager.library, { _file.substr(index +1), new Uint8Array(data.object.contents), true, true, function() { - if (onload) {{{ Functions.getTable('vi') }}}[onload](file); + if (onload) Runtime.dynCall('vi', onload, [file]); }, function() { - if (onerror) {{{ Functions.getTable('vi') }}}[onerror](file); + if (onerror) Runtime.dynCall('vi', onerror, [file]); }, true // don'tCreateFile - it's already there ); @@ -417,10 +417,10 @@ mergeInto(LibraryManager.library, { {{{ makeHEAPView('U8', 'data', 'data + size') }}}, true, true, function() { - if (onload) {{{ Functions.getTable('vi') }}}[onload](arg, cname); + if (onload) Runtime.dynCall('vii', onload, [file, cname]); }, function() { - if (onerror) {{{ Functions.getTable('vi') }}}[onerror](arg); + if (onerror) Runtime.dynCall('vi', onerror, [file]); }, true // don'tCreateFile - it's already there ); @@ -440,7 +440,6 @@ mergeInto(LibraryManager.library, { emscripten_set_main_loop: function(func, fps, simulateInfiniteLoop) { Module['noExitRuntime'] = true; - var jsFunc = {{{ Functions.getTable('v') }}}[func]; Browser.mainLoop.runner = function() { if (Browser.mainLoop.queue.length > 0) { var start = Date.now(); @@ -473,7 +472,7 @@ mergeInto(LibraryManager.library, { Module['preMainLoop'](); } - jsFunc(); + Runtime.dynCall('v', func); if (Module['postMainLoop']) { Module['postMainLoop'](); @@ -517,12 +516,16 @@ mergeInto(LibraryManager.library, { }, _emscripten_push_main_loop_blocker: function(func, arg, name) { - Browser.mainLoop.queue.push({ func: {{{ Functions.getTable('vi') }}}[func], arg: arg, name: Pointer_stringify(name), counted: true }); + Browser.mainLoop.queue.push({ func: function() { + Runtime.dynCall('vi', func, [arg]); + }, name: Pointer_stringify(name), counted: true }); Browser.mainLoop.updateStatus(); }, _emscripten_push_uncounted_main_loop_blocker: function(func, arg, name) { - Browser.mainLoop.queue.push({ func: {{{ Functions.getTable('vi') }}}[func], arg: arg, name: Pointer_stringify(name), counted: false }); + Browser.mainLoop.queue.push({ func: function() { + Runtime.dynCall('vi', func, [arg]); + }, name: Pointer_stringify(name), counted: false }); Browser.mainLoop.updateStatus(); }, diff --git a/src/library_glut.js b/src/library_glut.js index 5f807c63..0994df34 100644 --- a/src/library_glut.js +++ b/src/library_glut.js @@ -54,11 +54,11 @@ var LibraryGLUT = { if (GLUT.buttons == 0 && event.target == Module["canvas"] && GLUT.passiveMotionFunc) { event.preventDefault(); GLUT.saveModifiers(event); - {{{ Functions.getTable('vii') }}}[GLUT.passiveMotionFunc](GLUT.lastX, GLUT.lastY); + Runtime.dynCall('vii', GLUT.passiveMotionFunc, [GLUT.lastX, GLUT.lastY]); } else if (GLUT.buttons != 0 && GLUT.motionFunc) { event.preventDefault(); GLUT.saveModifiers(event); - {{{ Functions.getTable('vii') }}}[GLUT.motionFunc](GLUT.lastX, GLUT.lastY); + Runtime.dynCall('vii', GLUT.motionFunc, [GLUT.lastX, GLUT.lastY]); } }, @@ -159,7 +159,7 @@ var LibraryGLUT = { if( GLUT.specialFunc ) { event.preventDefault(); GLUT.saveModifiers(event); - {{{ Functions.getTable('viii') }}}[GLUT.specialFunc](key, GLUT.lastX, GLUT.lastY); + Runtime.dynCall('viii', GLUT.specialFunc, [key, GLUT.lastX, GLUT.lastY]); } } else @@ -168,7 +168,7 @@ var LibraryGLUT = { if( key !== null && GLUT.keyboardFunc ) { event.preventDefault(); GLUT.saveModifiers(event); - {{{ Functions.getTable('viii') }}}[GLUT.keyboardFunc](key, GLUT.lastX, GLUT.lastY); + Runtime.dynCall('viii', GLUT.keyboardFunc, [key, GLUT.lastX, GLUT.lastY]); } } } @@ -181,7 +181,7 @@ var LibraryGLUT = { if(GLUT.specialUpFunc) { event.preventDefault (); GLUT.saveModifiers(event); - {{{ Functions.getTable('viii') }}}[GLUT.specialUpFunc](key, GLUT.lastX, GLUT.lastY); + Runtime.dynCall('viii', GLUT.specialUpFunc, key, [GLUT.lastX, GLUT.lastY]); } } else @@ -190,7 +190,7 @@ var LibraryGLUT = { if( key !== null && GLUT.keyboardUpFunc ) { event.preventDefault (); GLUT.saveModifiers(event); - {{{ Functions.getTable('viii') }}}[GLUT.keyboardUpFunc](key, GLUT.lastX, GLUT.lastY); + Runtime.dynCall('viii', GLUT.keyboardUpFunc, [key, GLUT.lastX, GLUT.lastY]); } } } @@ -206,7 +206,7 @@ var LibraryGLUT = { } catch (e) {} event.preventDefault(); GLUT.saveModifiers(event); - {{{ Functions.getTable('viiii') }}}[GLUT.mouseFunc](event['button'], 0/*GLUT_DOWN*/, GLUT.lastX, GLUT.lastY); + Runtime.dynCall('viiii', GLUT.mouseFunc, [event['button'], 0/*GLUT_DOWN*/, GLUT.lastX, GLUT.lastY]); } }, @@ -217,7 +217,7 @@ var LibraryGLUT = { if(GLUT.mouseFunc) { event.preventDefault(); GLUT.saveModifiers(event); - {{{ Functions.getTable('viiii') }}}[GLUT.mouseFunc](event['button'], 1/*GLUT_UP*/, GLUT.lastX, GLUT.lastY); + Runtime.dynCal('viiii', GLUT.mouseFunc, [event['button'], 1/*GLUT_UP*/, GLUT.lastX, GLUT.lastY]); } }, @@ -241,7 +241,7 @@ var LibraryGLUT = { /* Can't call _glutReshapeWindow as that requests cancelling fullscreen. */ if (GLUT.reshapeFunc) { // console.log("GLUT.reshapeFunc (from FS): " + width + ", " + height); - {{{ Functions.getTable('vii') }}}[GLUT.reshapeFunc](width, height); + Runtime.dynCall('vii', GLUT.reshapeFunc, [width, height]); } _glutPostRedisplay(); }, @@ -326,7 +326,7 @@ var LibraryGLUT = { glutIdleFunc: function(func) { var callback = function() { if (GLUT.idleFunc) { - {{{ Functions.getTable('v') }}}[GLUT.idleFunc](); + Runtime.dynCall('v', GLUT.idleFunc); window.setTimeout(callback, 0); } } @@ -336,7 +336,7 @@ var LibraryGLUT = { }, glutTimerFunc: function(msec, func, value) { - window.setTimeout(function() { {{{ Functions.getTable('vi') }}}[func](value); }, msec); + window.setTimeout(function() { Runtime.dynCall('vi', func, [value]); }, msec); }, glutDisplayFunc: function(func) { @@ -388,7 +388,7 @@ var LibraryGLUT = { Browser.setCanvasSize(width, height); if (GLUT.reshapeFunc) { // console.log("GLUT.reshapeFunc: " + width + ", " + height); - {{{ Functions.getTable('vii') }}}[GLUT.reshapeFunc](width, height); + Runtime.dynCall('vii', GLUT.reshapeFunc, [width, height]); } _glutPostRedisplay(); }, @@ -417,7 +417,9 @@ var LibraryGLUT = { glutPostRedisplay: function() { if (GLUT.displayFunc) { - Browser.requestAnimationFrame({{{ Functions.getTable('vi') }}}[GLUT.displayFunc]); + Browser.requestAnimationFrame(function() { + Runtime.dynCall('vi', GLUT.displayFunc); + }); } }, diff --git a/src/library_sdl.js b/src/library_sdl.js index 9314493f..6f1ed32b 100644 --- a/src/library_sdl.js +++ b/src/library_sdl.js @@ -1116,7 +1116,7 @@ var LibrarySDL = { SDL.audio.bufferSize = totalSamples*2; // hardcoded 16-bit audio SDL.audio.buffer = _malloc(SDL.audio.bufferSize); SDL.audio.caller = function() { - {{{ Functions.getTable('viii') }}}[SDL.audio.callback](SDL.audio.userdata, SDL.audio.buffer, SDL.audio.bufferSize); + Runtime.dynCall('viii', SDL.audio.callback, [SDL.audio.userdata, SDL.audio.buffer, SDL.audio.bufferSize]); SDL.audio.pushAudio(SDL.audio.buffer, SDL.audio.bufferSize); }; // Mozilla Audio API. TODO: Other audio APIs @@ -1408,7 +1408,7 @@ var LibrarySDL = { audio.pause(); SDL.music.audio = null; if (SDL.hookMusicFinished) { - {{{ Functions.getTable('v') }}}[SDL.hookMusicFinished](); + Runtime.dynCall('v', SDL.hookMusicFinished); } return 0; }, @@ -1555,7 +1555,7 @@ var LibrarySDL = { SDL_AddTimer: function(interval, callback, param) { return window.setTimeout(function() { - {{{ Functions.getTable('ii') }}}[callback](interval, param); + Runtime.dynCall('ii', callback, [interval, param]); }, interval); }, SDL_RemoveTimer: function(id) { diff --git a/src/preamble.js b/src/preamble.js index f69308e9..816eae04 100644 --- a/src/preamble.js +++ b/src/preamble.js @@ -728,14 +728,14 @@ function callRuntimeCallbacks(callbacks) { var callback = callbacks.shift(); var func = callback.func; if (typeof func === 'number') { -#if ASM_JS - func = {{{ Functions.getTable('v') }}}[func] || // void() - {{{ Functions.getTable('vi') }}}[func]; // void(int) -#else - func = {{{ Functions.getTable('x') }}}[func]; -#endif + if (callback.arg === undefined) { + Runtime.dynCall('v', func); + } else { + Runtime.dynCall('vi', func, [callback.arg]); + } + } else { + func(callback.arg === undefined ? null : callback.arg); } - func(callback.arg === undefined ? null : callback.arg); } } diff --git a/src/runtime.js b/src/runtime.js index a32785f3..f63690c0 100644 --- a/src/runtime.js +++ b/src/runtime.js @@ -311,13 +311,26 @@ var Runtime = { return ret; }, - getFunctionTable: function(sig) { - return FUNCTION_TABLE; // TODO: Support asm + dynCall: function(sig, ptr, args) { + if (args && args.length) { +#if ASM_JS + args.splice(0, 0, ptr); + return Module['dynCall_' + sig].apply(null, args); +#else + return FUNCTION_TABLE[ptr].apply(null, args); +#endif + } else { +#if ASM_JS + return Module['dynCall_' + sig].call(null, ptr); +#else + return FUNCTION_TABLE[ptr](); +#endif + } }, addFunction: function(func, sig) { assert(sig); - var table = Runtime.getFunctionTable(sig); + var table = FUNCTION_TABLE; // TODO: support asm var ret = table.length; table.push(func); table.push(0); |