diff options
author | Mike Pall <mike> | 2016-05-07 12:32:15 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2016-05-07 12:32:15 +0200 |
commit | 35b09e692ead67181755795352f1df12547fd4fa (patch) | |
tree | d120dd561f649f955ddbbe844fe00a97f7b9e625 /doc | |
parent | 6a9973203c55daa4c1fcd611718bc5df09e4e5b5 (diff) | |
download | luajit-35b09e692ead67181755795352f1df12547fd4fa.tar.gz luajit-35b09e692ead67181755795352f1df12547fd4fa.tar.bz2 luajit-35b09e692ead67181755795352f1df12547fd4fa.zip |
Windows/x86: Add full exception interoperability.
Contributed by Peter Cawley.
Diffstat (limited to 'doc')
-rw-r--r-- | doc/extensions.html | 25 |
1 files changed, 11 insertions, 14 deletions
diff --git a/doc/extensions.html b/doc/extensions.html index 7f712a62..368b527c 100644 --- a/doc/extensions.html +++ b/doc/extensions.html | |||
@@ -365,25 +365,30 @@ the toolchain used to compile LuaJIT: | |||
365 | </tr> | 365 | </tr> |
366 | <tr class="odd separate"> | 366 | <tr class="odd separate"> |
367 | <td class="excplatform">POSIX/x64, DWARF2 unwinding</td> | 367 | <td class="excplatform">POSIX/x64, DWARF2 unwinding</td> |
368 | <td class="exccompiler">GCC 4.3+</td> | 368 | <td class="exccompiler">GCC 4.3+, Clang</td> |
369 | <td class="excinterop"><b style="color: #00a000;">Full</b></td> | 369 | <td class="excinterop"><b style="color: #00a000;">Full</b></td> |
370 | </tr> | 370 | </tr> |
371 | <tr class="even"> | 371 | <tr class="even"> |
372 | <td class="excplatform">ARM <tt>-DLUAJIT_UNWIND_EXTERNAL</tt></td> | ||
373 | <td class="exccompiler">GCC, Clang</td> | ||
374 | <td class="excinterop"><b style="color: #00a000;">Full</b></td> | ||
375 | </tr> | ||
376 | <tr class="odd"> | ||
372 | <td class="excplatform">Other platforms, DWARF2 unwinding</td> | 377 | <td class="excplatform">Other platforms, DWARF2 unwinding</td> |
373 | <td class="exccompiler">GCC</td> | 378 | <td class="exccompiler">GCC, Clang</td> |
374 | <td class="excinterop"><b style="color: #c06000;">Limited</b></td> | 379 | <td class="excinterop"><b style="color: #c06000;">Limited</b></td> |
375 | </tr> | 380 | </tr> |
376 | <tr class="odd"> | 381 | <tr class="even"> |
377 | <td class="excplatform">Windows/x64</td> | 382 | <td class="excplatform">Windows/x64</td> |
378 | <td class="exccompiler">MSVC or WinSDK</td> | 383 | <td class="exccompiler">MSVC or WinSDK</td> |
379 | <td class="excinterop"><b style="color: #00a000;">Full</b></td> | 384 | <td class="excinterop"><b style="color: #00a000;">Full</b></td> |
380 | </tr> | 385 | </tr> |
381 | <tr class="even"> | 386 | <tr class="odd"> |
382 | <td class="excplatform">Windows/x86</td> | 387 | <td class="excplatform">Windows/x86</td> |
383 | <td class="exccompiler">Any</td> | 388 | <td class="exccompiler">Any</td> |
384 | <td class="excinterop"><b style="color: #a00000;">No</b></td> | 389 | <td class="excinterop"><b style="color: #00a000;">Full</b></td> |
385 | </tr> | 390 | </tr> |
386 | <tr class="odd"> | 391 | <tr class="even"> |
387 | <td class="excplatform">Other platforms</td> | 392 | <td class="excplatform">Other platforms</td> |
388 | <td class="exccompiler">Other compilers</td> | 393 | <td class="exccompiler">Other compilers</td> |
389 | <td class="excinterop"><b style="color: #a00000;">No</b></td> | 394 | <td class="excinterop"><b style="color: #a00000;">No</b></td> |
@@ -432,14 +437,6 @@ C++ destructors.</li> | |||
432 | <li>Lua errors <b>cannot</b> be caught on the C++ side.</li> | 437 | <li>Lua errors <b>cannot</b> be caught on the C++ side.</li> |
433 | <li>Throwing Lua errors across C++ frames will <b>not</b> call | 438 | <li>Throwing Lua errors across C++ frames will <b>not</b> call |
434 | C++ destructors.</li> | 439 | C++ destructors.</li> |
435 | <li>Additionally, on Windows/x86 with SEH-based C++ exceptions: | ||
436 | it's <b>not</b> safe to throw a Lua error across any frames containing | ||
437 | a C++ function with any try/catch construct or using variables with | ||
438 | (implicit) destructors. This also applies to any functions which may be | ||
439 | inlined in such a function. It doesn't matter whether <tt>lua_error()</tt> | ||
440 | is called inside or outside of a try/catch or whether any object actually | ||
441 | needs to be destroyed: the SEH chain is corrupted and this will eventually | ||
442 | lead to the termination of the process.</li> | ||
443 | </ul> | 440 | </ul> |
444 | <br class="flush"> | 441 | <br class="flush"> |
445 | </div> | 442 | </div> |