lean2/src/library/rewriter
Leonardo de Moura d87ad9eb7e refactor(util/lua): propagate C++ Lean exceptions in Lua
The following call sequence is possible:
C++ -> Lua -> C++ -> Lua -> C++

The first block of C++ is the Lean main function.
The main function invokes the Lua interpreter.
The Lua interpreter invokes a C++ Lean API.
Then the Lean API invokes a callback implemented in Lua.
The Lua callback invokes another Lean API.
Now, suppose the Lean API throws an exception.
We want the C++ exception to propagate over the mixed C++/Lua call stack.
We use the clone/rethrow exception idiom to achieve this goal.

Before this commit, the C++ exceptions were converted into strings
using the method what(), and then they were propagated over the Lua
stack using lua_error. A lua_error was then converted into a lua_exception when going back to C++.
This solution was very unsatisfactory, since all C++ exceptions were being converted into a lua_exception, and consequently the structure of the exception was being lost.

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
2013-11-27 12:25:29 -08:00
..
CMakeLists.txt Rename 'rewrite' to 'Rewriter', change type of rewriter::operator() 2013-09-25 15:38:16 -07:00
fo_match.cpp refactor(kernel): move printer and formatter objects to the kernel 2013-10-22 08:15:36 -07:00
fo_match.h refactor(kernel): move printer and formatter objects to the kernel 2013-10-22 08:15:36 -07:00
rewriter.cpp refactor(library): rename light_checker to type_inferer 2013-10-22 08:15:36 -07:00
rewriter.h refactor(util/lua): propagate C++ Lean exceptions in Lua 2013-11-27 12:25:29 -08:00