diff options
author | Anthony Pesch <inolen@gmail.com> | 2013-07-30 10:00:46 -0700 |
---|---|---|
committer | Anthony Pesch <inolen@gmail.com> | 2013-07-30 14:10:21 -0700 |
commit | ecd83ed3136015c80d646dc609243586c7371e41 (patch) | |
tree | 7fba8b8e5f61ea1fe17ab203d83186065db8f7db | |
parent | 7b1cee52c46768edd7948d6817f13b5431131da7 (diff) |
Update test_ccall to not use a postrun hook
-rw-r--r-- | src/preamble.js | 14 | ||||
-rwxr-xr-x | tests/runner.py | 61 |
2 files changed, 46 insertions, 29 deletions
diff --git a/src/preamble.js b/src/preamble.js index 218e0388..61188f52 100644 --- a/src/preamble.js +++ b/src/preamble.js @@ -729,6 +729,20 @@ function exitRuntime() { callRuntimeCallbacks(__ATEXIT__); } +Module['addOnInit'] = function addOnInit(cb) { + __ATINIT__.unshift(cb); +}; + +Module['addOnPreMain'] = function addOnPreMain(cb) { + __ATMAIN__.unshift(cb); +}; + +Module['addOnExit'] = function addOnExit(cb) { + __ATEXIT__.unshift(cb); +}; + +// TODO add onprerun, onpostrun + // Tools // This processes a JS string into a C-line array of numbers, 0-terminated. diff --git a/tests/runner.py b/tests/runner.py index 1948ab59..3e620910 100755 --- a/tests/runner.py +++ b/tests/runner.py @@ -9060,6 +9060,7 @@ def process(filename): src = r''' #include <stdio.h> + #include <stdlib.h> extern "C" { int get_int() { return 5; } @@ -9082,42 +9083,44 @@ def process(filename): if (argc == 15) print_string(argv[0]); if (argc == 16) pointer((int*)argv[0]); if (argc % 17 == 12) return multi(argc, float(argc)/2, argc+1, argv[0]); - return 0; + // return 0; + exit(0); } ''' post = ''' def process(filename): src = \'\'\' - var Module = { - 'postRun': function() { - Module.print('*'); - var ret; - ret = Module['ccall']('get_int', 'number'); Module.print([typeof ret, ret]); - ret = ccall('get_float', 'number'); Module.print([typeof ret, ret.toFixed(2)]); - ret = ccall('get_string', 'string'); Module.print([typeof ret, ret]); - ret = ccall('print_int', null, ['number'], [12]); Module.print(typeof ret); - ret = ccall('print_float', null, ['number'], [14.56]); Module.print(typeof ret); - ret = ccall('print_string', null, ['string'], ["cheez"]); Module.print(typeof ret); - ret = ccall('print_string', null, ['array'], [[97, 114, 114, 45, 97, 121, 0]]); Module.print(typeof ret); - ret = ccall('multi', 'number', ['number', 'number', 'number', 'string'], [2, 1.4, 3, 'more']); Module.print([typeof ret, ret]); - var p = ccall('malloc', 'pointer', ['number'], [4]); - setValue(p, 650, 'i32'); - ret = ccall('pointer', 'pointer', ['pointer'], [p]); Module.print([typeof ret, getValue(ret, 'i32')]); - Module.print('*'); - // part 2: cwrap - var multi = Module['cwrap']('multi', 'number', ['number', 'number', 'number', 'string']); - Module.print(multi(2, 1.4, 3, 'atr')); - Module.print(multi(8, 5.4, 4, 'bret')); - Module.print('*'); - // part 3: avoid stack explosion - for (var i = 0; i < TOTAL_STACK/60; i++) { - ccall('multi', 'number', ['number', 'number', 'number', 'string'], [0, 0, 0, '123456789012345678901234567890123456789012345678901234567890']); - } - Module.print('stack is ok.'); + var Module = { noInitialRun: true }; + \'\'\' + open(filename, 'r').read() + \'\'\' + Module.addOnExit(function () { + Module.print('*'); + var ret; + ret = Module['ccall']('get_int', 'number'); Module.print([typeof ret, ret]); + ret = ccall('get_float', 'number'); Module.print([typeof ret, ret.toFixed(2)]); + ret = ccall('get_string', 'string'); Module.print([typeof ret, ret]); + ret = ccall('print_int', null, ['number'], [12]); Module.print(typeof ret); + ret = ccall('print_float', null, ['number'], [14.56]); Module.print(typeof ret); + ret = ccall('print_string', null, ['string'], ["cheez"]); Module.print(typeof ret); + ret = ccall('print_string', null, ['array'], [[97, 114, 114, 45, 97, 121, 0]]); Module.print(typeof ret); + ret = ccall('multi', 'number', ['number', 'number', 'number', 'string'], [2, 1.4, 3, 'more']); Module.print([typeof ret, ret]); + var p = ccall('malloc', 'pointer', ['number'], [4]); + setValue(p, 650, 'i32'); + ret = ccall('pointer', 'pointer', ['pointer'], [p]); Module.print([typeof ret, getValue(ret, 'i32')]); + Module.print('*'); + // part 2: cwrap + var multi = Module['cwrap']('multi', 'number', ['number', 'number', 'number', 'string']); + Module.print(multi(2, 1.4, 3, 'atr')); + Module.print(multi(8, 5.4, 4, 'bret')); + Module.print('*'); + // part 3: avoid stack explosion + for (var i = 0; i < TOTAL_STACK/60; i++) { + ccall('multi', 'number', ['number', 'number', 'number', 'string'], [0, 0, 0, '123456789012345678901234567890123456789012345678901234567890']); } - }; - \'\'\' + open(filename, 'r').read() + Module.print('stack is ok.'); + }); + Module.callMain(); + \'\'\' open(filename, 'w').write(src) ''' |