diff options
author | bptato <nincsnevem662@gmail.com> | 2024-02-24 03:55:48 +0100 |
---|---|---|
committer | bptato <nincsnevem662@gmail.com> | 2024-02-24 03:55:48 +0100 |
commit | b1e2a9ce0c996de83b161a21d4e6ebb188a74699 (patch) | |
tree | 0b351dfaa41b81e94a8fe4a79174d5bac422da53 /src | |
parent | 2d038b2158ff59dc79f7eb741468fdced1fa4759 (diff) | |
download | chawan-b1e2a9ce0c996de83b161a21d4e6ebb188a74699.tar.gz |
dom: print parse errors to console
instead of trying to evaluate exceptions...
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 |