diff --git a/src/embind/embind_gen.js b/src/embind/embind_gen.js index 6af614aae9a75..742af6da5bfa5 100644 --- a/src/embind/embind_gen.js +++ b/src/embind/embind_gen.js @@ -476,8 +476,9 @@ var LibraryEmbind = { } argStart = 2; } - if (argsName.length) - assert(argsName.length == (argTypes.length - hasThis - 1), 'Argument names should match number of parameters.'); + if (argsName.length && argsName.length != (argTypes.length - hasThis - 1)) + throw new Error('Argument names should match number of parameters.'); + const args = []; for (let i = argStart, x = 0; i < argTypes.length; i++) { if (x < argsName.length) { @@ -619,7 +620,9 @@ var LibraryEmbind = { setterContext) { fieldName = readLatin1String(fieldName); const readonly = setter === 0; - assert(readonly || getterReturnType === setterArgumentType, 'Mismatched getter and setter types are not supported.'); + if (!(readonly || getterReturnType === setterArgumentType)) + throw new error('Mismatched getter and setter types are not supported.'); + whenDependentTypesAreResolved([], [classType], function(classType) { classType = classType[0]; whenDependentTypesAreResolved([], [getterReturnType], function(types) { @@ -720,7 +723,9 @@ var LibraryEmbind = { setterContext ) { const valueArray = tupleRegistrations[rawTupleType]; - assert(getterReturnType === setterArgumentType, 'Mismatched getter and setter types are not supported.'); + if (getterReturnType !== setterArgumentType) + throw new Error('Mismatched getter and setter types are not supported.'); + valueArray.elementTypeIds.push(getterReturnType); }, _embind_finalize_value_array__deps: ['$whenDependentTypesAreResolved', '$moduleDefinitions', '$tupleRegistrations'], @@ -761,7 +766,9 @@ var LibraryEmbind = { setterContext ) { const valueObject = structRegistrations[structType]; - assert(getterReturnType === setterArgumentType, 'Mismatched getter and setter types are not supported.'); + if (getterReturnType !== setterArgumentType) + throw new Error('Mismatched getter and setter types are not supported.'); + valueObject.fieldTypeIds.push(getterReturnType); valueObject.fieldNames.push(readLatin1String(fieldName)); }, @@ -822,10 +829,10 @@ var LibraryEmbind = { #endif // Stub functions used by eval, but not needed for TS generation: - $makeLegalFunctionName: () => assert(false, 'stub function should not be called'), - $newFunc: () => assert(false, 'stub function should not be called'), - $runDestructors: () => assert(false, 'stub function should not be called'), - $createNamedFunction: () => assert(false, 'stub function should not be called'), + $makeLegalFunctionName: () => { throw new Error('stub function should not be called'); }, + $newFunc: () => { throw new Error('stub function should not be called'); }, + $runDestructors: () => { throw new Error('stub function should not be called'); }, + $createNamedFunction: () => { throw new Error('stub function should not be called'); }, }; #if EMBIND_AOT diff --git a/test/test_other.py b/test/test_other.py index 96abca1e0f27a..ea53ef93221c4 100644 --- a/test/test_other.py +++ b/test/test_other.py @@ -3384,7 +3384,9 @@ def test_embind_tsgen_ignore(self): extra_args = ['-sMODULARIZE', '--embed-file', 'fail.js', '-sMINIMAL_RUNTIME=2', - '-sEXPORT_ES6=1'] + '-sEXPORT_ES6=1', + '-sASSERTIONS=0', + '-sSTRICT=1'] self.emcc(test_file('other/embind_tsgen.cpp'), extra_args) self.assertFileContents(test_file('other/embind_tsgen_ignore_2.d.ts'), read_file('embind_tsgen.d.ts')) # Also test this separately since it conflicts with other settings.