about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorbptato <nincsnevem662@gmail.com>2024-02-24 03:55:48 +0100
committerbptato <nincsnevem662@gmail.com>2024-02-24 03:55:48 +0100
commitb1e2a9ce0c996de83b161a21d4e6ebb188a74699 (patch)
tree0b351dfaa41b81e94a8fe4a79174d5bac422da53 /src
parent2d038b2158ff59dc79f7eb741468fdced1fa4759 (diff)
downloadchawan-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.nim15
-rw-r--r--src/js/javascript.nim14
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