{
}
+CYPoolError::CYPoolError(const char *message) {
+ message_ = pool_.strdup(message);
+}
+
CYPoolError::CYPoolError(const char *format, ...) {
va_list args;
va_start(args, format);
CYPoolError(const CYPoolError &rhs);
+ CYPoolError(const char *message);
CYPoolError(const char *format, ...);
CYPoolError(const char *format, va_list args);
const char *code;
unsigned flags;
if (CYBridgeHash(pool, CYPoolUTF8String(pool, context, property), code, flags)) {
- JSValueRef result(_jsccall(JSEvaluateScript, context, CYJSString(CYPoolCode(pool, code)), NULL, NULL, 0));
+ CYUTF8String parsed;
+
+ try {
+ parsed = CYPoolCode(pool, code);
+ } catch (const CYException &error) {
+ CYThrow("%s", pool.strcat("error caching ", CYPoolCString(pool, context, property), ": ", error.PoolCString(pool), NULL));
+ }
+
+ JSValueRef result(_jsccall(JSEvaluateScript, context, CYJSString(parsed), NULL, NULL, 0));
if (flags == 0) {
JSObjectRef cache(CYGetCachedObject(context, CYJSString("cache")));
CYUTF8String CYPoolCode(CYPool &pool, std::streambuf &stream) {
CYLocalPool local;
CYDriver driver(local, stream);
- _assert(!driver.Parse());
- _assert(driver.errors_.empty());
+
+ if (driver.Parse()) {
+ if (!driver.errors_.empty())
+ CYThrow("%s", driver.errors_.front().message_.c_str());
+ CYThrow("syntax error");
+ }
CYOptions options;
CYContext context(options);