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> |
