--- !ditz.rubyforge.org,2008-03-06/issue title: set error handler explicitly instead of in every duk_pcall/duk_safe_call? desc: |- Very often error handler doesn't need to be set (no error handler) and in also quite often the existing error handler can be kept (e.g. code uses a global error handler). Having an error handler in every protected call is a bit inconvenient for the caller. Error handler could be read/written with explicit API calls. The problem is that unwinding won't then be automatic and caller must be careful to unwind error handler correctly. An intermediate approach would be to have an API call to set the pending error handler for the next protected call and the duk_pcall/duk_safe_call would pick it up. By default the current error handler would be kept. type: :task component: duk release: v0.10 reporter: sva status: :closed disposition: :fixed creation_time: 2013-08-06 06:40:20.110056 Z references: [] id: be47968f8d7c83bad50c40314e61bd2f9beb52e0 log_events: - - 2013-08-06 06:40:20.507034 Z - sva - created - "" - - 2013-09-29 10:05:52.754896 Z - sva - assigned to release v0.8 from v0.7 - "" - - 2013-10-31 00:12:38.098033 Z - sva - assigned to release v0.9 from v0.8 - "" - - 2014-01-12 13:33:39.442715 Z - sva - assigned to release v0.10 from v0.9 - "" - - 2014-04-05 13:56:37.797202 Z - Sami Vaarala - commented - |- Also one simple model would be to store the current error handler in the current Thread object (or perhaps the Thread stash). This way it would be reachable regardless of the value stack state, and there would be no need for a setjmp catchpoint in the user code to restore a previous value. With this approach a module which temporarily sets the error handler could fail to restore it afterwards, and an undesired error handler would then be effective even after the module returns control to its caller. This is probably still better than cluttering all protected call related API calls with DUK_INVALID_INDEX arguments (rarely used) or using a fragile pending index or something like that. - - 2014-04-08 22:38:31.746085 Z - Sami Vaarala - closed with disposition fixed - |- Implemented an error handler model based on explicitly set Duktape.errcreate and Duktape.errthrow instead.