about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bindings/quickjs.nim1
-rw-r--r--src/js/javascript.nim6
-rw-r--r--src/js/tojs.nim9
3 files changed, 13 insertions, 3 deletions
diff --git a/src/bindings/quickjs.nim b/src/bindings/quickjs.nim
index 28cd4edf..f5846ef5 100644
--- a/src/bindings/quickjs.nim
+++ b/src/bindings/quickjs.nim
@@ -418,6 +418,7 @@ proc JS_NewCFunction*(ctx: JSContext, cfunc: JSCFunction, name: cstring, length:
 
 proc JS_NewString*(ctx: JSContext, str: cstring): JSValue
 proc JS_NewStringLen*(ctx: JSContext, str: cstring, len1: csize_t): JSValue
+proc JS_NewAtomString*(ctx: JSContext, str: cstring): JSValue
 
 proc JS_SetProperty*(ctx: JSContext, this_obj: JSValue, prop: JSAtom, val: JSValue): cint
 proc JS_SetPropertyUint32*(ctx: JSContext, this_obj: JSValue, idx: uint32, val: JSValue): cint
diff --git a/src/js/javascript.nim b/src/js/javascript.nim
index 7bcfb42c..4179f78b 100644
--- a/src/js/javascript.nim
+++ b/src/js/javascript.nim
@@ -261,9 +261,9 @@ func newJSClass*(ctx: JSContext, cdef: JSClassDefConst, tname: string,
   if cdef.exotic != nil and cdef.exotic.get_own_property != nil:
     let val = JS_DupValue(ctx, ctxOpaque.Array_prototype_values)
     doAssert JS_SetProperty(ctx, proto, ctxOpaque.sym_refs[ITERATOR], val) == 1
-  let toStringTag = ctxOpaque.sym_refs[TO_STRING_TAG]
-  let news = JS_NewString(ctx, cdef.class_name)
-  doAssert JS_SetProperty(ctx, proto, toStringTag, news) == 1
+  let news = JS_NewAtomString(ctx, cdef.class_name)
+  doAssert not JS_IsException(news)
+  ctx.definePropertyC(proto, ctxOpaque.sym_refs[TO_STRING_TAG], news)
   JS_SetClassProto(ctx, result, proto)
   ctx.addClassUnforgeable(proto, result, parent, unforgeable)
   if asglobal:
diff --git a/src/js/tojs.nim b/src/js/tojs.nim
index 2936ba28..c79d1bf2 100644
--- a/src/js/tojs.nim
+++ b/src/js/tojs.nim
@@ -105,6 +105,15 @@ makeToJSP(Result)
 makeToJSP(JSValue)
 makeToJSP(JSDict)
 
+proc defineProperty(ctx: JSContext, this: JSValue, name: JSAtom,
+    prop: JSValue, flags = cint(0)) =
+  if JS_DefinePropertyValue(ctx, this, name, prop, flags) <= 0:
+    raise newException(Defect, "Failed to define property string")
+
+proc definePropertyC*(ctx: JSContext, this: JSValue, name: JSAtom,
+    prop: JSValue) =
+  ctx.defineProperty(this, name, prop, JS_PROP_CONFIGURABLE)
+
 proc defineProperty(ctx: JSContext, this: JSValue, name: string,
     prop: JSValue, flags = cint(0)) =
   if JS_DefinePropertyValueStr(ctx, this, cstring(name), prop, flags) <= 0: