- if (_value != 0 && (_value < 100 || _value >= 200)) \
- _assert(false, "_sqlcall(%u:%s): %s\n", _value, #expr, sqlite3_errmsg(database_)); \
- _value; \
+ _assert_("sqlcall", _value == 0 || _value >= 100 && _value < 200, #expr, " %u:%s", _value sqlite3_errmsg(database_)); \
+})
+
+struct CYJSException {
+ JSContextRef context_;
+ JSValueRef value_;
+
+ CYJSException(JSContextRef context) :
+ context_(context),
+ value_(NULL)
+ {
+ }
+
+ ~CYJSException() noexcept(false) {
+ CYThrow(context_, value_);
+ }
+
+ operator JSValueRef *() {
+ return &value_;
+ }
+};
+
+#define _jsccall(code, args...) ({ \
+ CYJSException _error(context); \
+ (code)(args, _error); \