You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
Sami Vaarala 2f653a934a Example fixes for print/alert removal 9 years ago
..
README.rst Add a C++ exception example 9 years ago
cpp_exceptions.cpp Example fixes for print/alert removal 9 years ago

README.rst

=========================================
C++ exceptions for long control transfers
=========================================

Normally Duktape uses ``setjmp()`` / ``longjmp()`` or their variants for
internal long control transfers. One downside of these functions is that
C++ automatic destructors (scope-based resource management, SBRM, a special
case of RAII) in Duktape/C functions won't be executed which is awkward for
C++ programmers.

When ``DUK_USE_CPP_EXCEPTIONS`` (``DUK_OPT_CPP_EXCEPTIONS``) is defined, and
both Duktape and application code is compiled using a C++ compiler, Duktape
uses C++ ``try-catch`` and ``throw`` for internal long control transfers.
This allows automatic destructors to run as expected. The config option is
not enabled by default because C++ exceptions are sometimes disabled even
when a C++ compiler is used (e.g. for performance reasons).

The ``cpp_exceptions.cpp`` example illustrates how C++ exceptions can be
used in Duktape/C functions at the moment:

* Duktape uses C++ try/catch/throw internally; this is not visible to user
code directly.

* Automatic destructors (scope-based resource management) work as expected.

* C++ exceptions can be used in Duktape/C functions normally, but user
exceptions must be caught before they reach Duktape. If this is not
done, such exceptions are caught by Duktape and converted to API errors
(in other words, they won't propagate "through" Duktape at the moment).