diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/bindings/quickjs.nim | 1 | ||||
-rw-r--r-- | src/js/javascript.nim | 6 | ||||
-rw-r--r-- | src/js/tojs.nim | 9 |
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: |