handle floats in jsCall properly; fixes asm2f.test_embind_2

This commit is contained in:
Alon Zakai 2014-05-02 13:48:11 -07:00
Родитель 9fd0afa69c
Коммит 2308587a85
2 изменённых файлов: 9 добавлений и 3 удалений

Просмотреть файл

@ -1076,8 +1076,9 @@ def emscript_fast(infile, settings, outfile, libraries=[], compiler_engine=None,
} }
''' % (sig, ',' if len(sig) > 1 else '', args, arg_coercions, ret)) ''' % (sig, ',' if len(sig) > 1 else '', args, arg_coercions, ret))
ffi_args = ','.join([shared.JS.make_coercion('a' + str(i), sig[i], settings, ffi_arg=True) for i in range(1, len(sig))])
for i in range(settings['RESERVED_FUNCTION_POINTERS']): for i in range(settings['RESERVED_FUNCTION_POINTERS']):
jsret = ('return ' if sig[0] != 'v' else '') + shared.JS.make_coercion('jsCall(%d%s%s)' % (i, ',' if coerced_args else '', coerced_args), sig[0], settings) jsret = ('return ' if sig[0] != 'v' else '') + shared.JS.make_coercion('jsCall(%d%s%s)' % (i, ',' if ffi_args else '', ffi_args), sig[0], settings, ffi_result=True)
function_tables_impls.append(''' function_tables_impls.append('''
function jsCall_%s_%s(%s) { function jsCall_%s_%s(%s) {
%s %s

Просмотреть файл

@ -1650,12 +1650,17 @@ class JS:
return '+0' return '+0'
@staticmethod @staticmethod
def make_coercion(value, sig, settings=None): def make_coercion(value, sig, settings=None, ffi_arg=False, ffi_result=False):
settings = settings or Settings settings = settings or Settings
if sig == 'i': if sig == 'i':
return value + '|0' return value + '|0'
elif sig == 'f' and settings.get('PRECISE_F32'): elif sig == 'f' and settings.get('PRECISE_F32'):
return 'Math_fround(' + value + ')' if ffi_arg:
return '+Math_fround(' + value + ')'
elif ffi_result:
return 'Math_fround(+(' + value + '))'
else:
return 'Math_fround(' + value + ')'
elif sig == 'd' or sig == 'f': elif sig == 'd' or sig == 'f':
return '+' + value return '+' + value
else: else: