about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/display/client.nim9
-rw-r--r--src/js/javascript.nim4
2 files changed, 11 insertions, 2 deletions
diff --git a/src/display/client.nim b/src/display/client.nim
index 49dae2ea..869435ce 100644
--- a/src/display/client.nim
+++ b/src/display/client.nim
@@ -59,7 +59,7 @@ type
     pager {.jsget.}: Pager
     line {.jsget.}: LineEdit
     config {.jsget.}: Config
-    store {.jsget, jsset.}: URL
+    store {.jsget, jsset.}: Document
     jsrt: JSRuntime
     jsctx: JSContext
     fdmap: Table[int, Container]
@@ -150,6 +150,13 @@ proc quit(client: Client, code = 0) {.jsfunc.} =
   if client.alive:
     client.alive = false
     client.pager.quit()
+    let ctx = client.jsctx
+    var global = JS_GetGlobalObject(ctx)
+    JS_FreeValue(ctx, global)
+    if client.jsctx != nil:
+      free(client.jsctx)
+    if client.jsrt != nil:
+      free(client.jsrt)
   quit(code)
 
 proc feedNext(client: Client) {.jsfunc.} =
diff --git a/src/js/javascript.nim b/src/js/javascript.nim
index e8c36e34..38754d78 100644
--- a/src/js/javascript.nim
+++ b/src/js/javascript.nim
@@ -89,7 +89,7 @@ type
   JSContextOpaque* = ref object
     creg: Table[string, JSClassID]
     typemap: Table[pointer, JSClassID]
-    ctors: Table[JSClassID, JSValue] #TODO TODO TODO free these
+    ctors: Table[JSClassID, JSValue]
     gclaz: string
     sym_refs: array[JSSymbolRefs, JSAtom]
     str_refs: array[JSStrRefs, JSAtom]
@@ -196,6 +196,8 @@ proc free*(ctx: var JSContext) =
       JS_FreeAtom(ctx, a)
     for a in opaque.str_refs:
       JS_FreeAtom(ctx, a)
+    for classid, v in opaque.ctors:
+      JS_FreeValue(ctx, v)
     JS_FreeValue(ctx, opaque.Array_prototype_values)
     for v in opaque.err_ctors:
       JS_FreeValue(ctx, v)