diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/html/dom.nim | 15 | ||||
-rw-r--r-- | src/js/javascript.nim | 14 |
2 files changed, 16 insertions, 13 deletions
diff --git a/src/html/dom.nim b/src/html/dom.nim index 2fa50e3b..e4325b18 100644 --- a/src/html/dom.nim +++ b/src/html/dom.nim @@ -3533,13 +3533,14 @@ proc execute*(element: HTMLScriptElement) = if window != nil and window.jsctx != nil: let script = element.scriptResult.script let urls = script.baseURL.serialize(excludepassword = true) - let ret = window.jsctx.evalFunction(script.record) - if JS_IsException(ret): - let ss = newStringStream() - document.window.jsctx.writeException(ss) - ss.setPosition(0) - document.window.console.log("Exception in document", urls, - ss.readAll()) + if JS_IsException(script.record): + let s = document.window.jsctx.getExceptionStr() + document.window.console.log("Exception in document", urls, s) + else: + let ret = window.jsctx.evalFunction(script.record) + if JS_IsException(ret): + let s = document.window.jsctx.getExceptionStr() + document.window.console.log("Exception in document", urls, s) document.currentScript = oldCurrentScript else: discard #TODO if needsInc: diff --git a/src/js/javascript.nim b/src/js/javascript.nim index d208ffad..2327660d 100644 --- a/src/js/javascript.nim +++ b/src/js/javascript.nim @@ -195,20 +195,22 @@ proc setGlobal*[T](ctx: JSContext, global: JSValue, obj: T) = proc setInterruptHandler*(rt: JSRuntime, cb: JSInterruptHandler, opaque: pointer = nil) = JS_SetInterruptHandler(rt, cb, opaque) -proc writeException*(ctx: JSContext, s: Stream) = +proc getExceptionStr*(ctx: JSContext): string = + result = "" let ex = JS_GetException(ctx) let str = fromJS[string](ctx, ex) if str.isSome: - s.write(str.get & '\n') + result &= str.get & '\n' let stack = JS_GetPropertyStr(ctx, ex, cstring("stack")); if not JS_IsUndefined(stack): - let str = fromJS[string](ctx, stack) - if str.isSome: - s.write(str.get) - s.flush() + result &= fromJS[string](ctx, stack).get("") JS_FreeValue(ctx, stack) JS_FreeValue(ctx, ex) +proc writeException*(ctx: JSContext, s: Stream) = + s.write(ctx.getExceptionStr()) + s.flush() + proc runJSJobs*(rt: JSRuntime, err: Stream) = while JS_IsJobPending(rt): var ctx: JSContext |