diff options
-rw-r--r-- | tests/runner.py | 11 | ||||
-rw-r--r-- | tools/bindings_generator.py | 31 |
2 files changed, 38 insertions, 4 deletions
diff --git a/tests/runner.py b/tests/runner.py index 318187f2..beef1823 100644 --- a/tests/runner.py +++ b/tests/runner.py @@ -1646,7 +1646,6 @@ if 'benchmark' not in sys.argv: expected = open(path_from_root('tests', 'time', 'output.txt'), 'r').read() self.do_test(src, expected) - def test_statics(self): # static initializers save i16 but load i8 for some reason global COMPILER_TEST_OPTS; COMPILER_TEST_OPTS = ['-g'] @@ -2612,7 +2611,15 @@ if 'benchmark' not in sys.argv: basename = os.path.join(self.get_dir(), 'bindingtest') Popen(['python', BINDINGS_GENERATOR, basename, header_filename], stdout=PIPE, stderr=STDOUT).communicate()[0] - src = src + '\n#include "bindingtest.c"\n' + src = ''' + #include "header.h" + + ScriptMe::ScriptMe(int val) : value(val) { } + int ScriptMe::getVal() { return value; } + void ScriptMe::mulVal(int mul) { value *= mul; } + + #include "bindingtest.c" + ''' script_src_2 = ''' var sme = new ScriptMe(83); diff --git a/tools/bindings_generator.py b/tools/bindings_generator.py index 99d5e889..81d1a0fe 100644 --- a/tools/bindings_generator.py +++ b/tools/bindings_generator.py @@ -51,6 +51,8 @@ for header in sys.argv[2:]: # Second pass - generate bindings +funcs = [] + gen_c = open(basename + '.c', 'w') gen_js = open(basename + '.js', 'w') @@ -83,6 +85,8 @@ for cname, clazz in classes.iteritems(): } ''' % (ret, fullname, typedargs, callprefix, mname, justargs)) + funcs.append('emscripten_bind_' + fullname) + # JS if constructor: @@ -99,10 +103,33 @@ function %s(%s) { } ''' % (cname, mname, justargs, 'return ' if ret != 'void' else '', fullname, (', ' if len(justargs) > 0 else '') + justargs)) + # Finish up -gen_c.write('\n}\n') -gen_c.close() +gen_c.write(''' +} + +#include <stdio.h> +struct EmscriptenEnsurer +{ + EmscriptenEnsurer() { + // Actually use the binding functions, so DFE will not eliminate them + int sum = 0; + void *seen = (void*)%s; +''' % funcs[0]) + +for func in funcs[1:]: + gen_c.write(''' sum += (void*)%s == seen; +''' % func) + +gen_c.write(''' printf("(%d)\\n", sum); + } +}; + +EmscriptenEnsurer emscriptenEnsurer; +''') + +gen_c.close() gen_js.close() |