| #if ASSERTIONS |
| // Endianness check (note: assumes compiler arch was little-endian) |
| HEAP16[1] = 0x6373; |
| if (HEAPU8[2] !== 0x73 || HEAPU8[3] !== 0x63) throw 'Runtime error: expected the system to be little-endian!'; |
| |
| function abortFnPtrError(ptr, sig) { |
| #if ASSERTIONS >= 2 |
| var possibleSig = ''; |
| for(var x in debug_tables) { |
| var tbl = debug_tables[x]; |
| if (tbl[ptr]) { |
| possibleSig += 'as sig "' + x + '" pointing to function ' + tbl[ptr] + ', '; |
| } |
| } |
| abort("Invalid function pointer " + ptr + " called with signature '" + sig + "'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this). This pointer might make sense in another type signature: " + possibleSig); |
| #else |
| abort("Invalid function pointer " + ptr + " called with signature '" + sig + "'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this). Build with ASSERTIONS=2 for more info."); |
| #endif |
| } |
| #endif // ASSERTIONS |